aboutsummaryrefslogtreecommitdiff
path: root/src/player/inc
diff options
context:
space:
mode:
authorXavier Del Campo Romero <xavi.dcr@tutanota.com>2021-07-03 00:49:03 +0200
committerXavier Del Campo Romero <xavi.dcr@tutanota.com>2022-03-30 08:20:20 +0200
commit6b9f686913efc3725b2690033cd4f398e07076ba (patch)
treee9aa91a6b9f617d78123ebe7ad272fc42a60d306 /src/player/inc
parentc9e6ae44a9aeb89b3f48f3443d6baa80103f7445 (diff)
downloadjancity-6b9f686913efc3725b2690033cd4f398e07076ba.tar.gz
Add project source code
Diffstat (limited to 'src/player/inc')
-rw-r--r--src/player/inc/human_player.h69
-rw-r--r--src/player/inc/player.h71
2 files changed, 140 insertions, 0 deletions
diff --git a/src/player/inc/human_player.h b/src/player/inc/human_player.h
new file mode 100644
index 0000000..6d97cf7
--- /dev/null
+++ b/src/player/inc/human_player.h
@@ -0,0 +1,69 @@
+#ifndef HUMAN_PLAYER_H
+#define HUMAN_PLAYER_H
+
+#include <camera.h>
+#include <instance.h>
+#include <pad.h>
+#include <player.h>
+#include <stdbool.h>
+#include <stddef.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+enum {MAX_SELECTED_INSTANCES = 4};
+
+struct human_player
+{
+ struct player pl;
+ struct camera cam;
+ struct pad pad;
+
+ struct sel_instance
+ {
+ enum sel_type
+ {
+ INSTANCE_TYPE_UNIT,
+ INSTANCE_TYPE_BUILDING,
+ INSTANCE_TYPE_RESOURCE
+ } type;
+
+ union sel_data
+ {
+ const struct unit *u;
+ const struct building *b;
+ const struct resource *r;
+ const struct instance *i;
+ struct unit *rw_u;
+ } d;
+ } sel[MAX_SELECTED_INSTANCES];
+
+ struct
+ {
+ const struct instance *ins;
+ unsigned char t, n;
+ bool render;
+ } target;
+
+ size_t n_sel;
+ bool top_gui;
+ unsigned long gui_res[MAX_RESOURCE_TYPES];
+};
+
+struct human_player_cfg
+{
+ struct player_cfg pl;
+ int padn;
+};
+
+int human_player_init(const struct human_player_cfg *cfg, struct human_player *h);
+bool human_player_update(struct human_player *h, struct player_others *o);
+int human_player_render(const struct human_player *h, const struct player_others *o);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* HUMAN_PLAYER_H */
diff --git a/src/player/inc/player.h b/src/player/inc/player.h
new file mode 100644
index 0000000..25f4d81
--- /dev/null
+++ b/src/player/inc/player.h
@@ -0,0 +1,71 @@
+#ifndef PLAYER_H
+#define PLAYER_H
+
+#include <building.h>
+#include <camera.h>
+#include <instance.h>
+#include <pad.h>
+#include <resource.h>
+#include <tech.h>
+#include <unit.h>
+#include <stdbool.h>
+#include <stddef.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+typedef unsigned int player_team;
+
+enum
+{
+ PLAYER_MAX_UNITS = 5,
+ PLAYER_MAX_BUILDINGS = 5
+};
+
+struct player
+{
+ enum player_color
+ {
+ PLAYER_COLOR_BLUE,
+ PLAYER_COLOR_RED
+ } color;
+
+ player_team team;
+ bool alive;
+ struct unit units[PLAYER_MAX_UNITS];
+ struct building buildings[PLAYER_MAX_BUILDINGS];
+ unsigned long resources[MAX_RESOURCE_TYPES];
+ size_t pop, bpop;
+
+ struct
+ {
+ struct unit_tech u;
+ } tree;
+};
+
+struct player_cfg
+{
+ enum player_color color;
+ player_team team;
+ unsigned long x, y;
+};
+
+struct player_others
+{
+ struct player *pl;
+ struct resource *res;
+ size_t n_pl, n_res;
+};
+
+int player_init(const struct player_cfg *cfg, struct player *pl);
+int player_create_unit(const struct unit_cfg *cfg, struct player *pl);
+int player_create_building(const struct building_cfg *cfg, struct player *pl);
+void player_update(struct player *p);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* PLAYER_H */