1 #ifndef _CLIENT_ENTITY_H_
2 #define _CLIENT_ENTITY_H_
4 #include <dragonstd/refcount.h>
6 #include "client/gui.h"
7 #include "client/model.h"
14 struct ClientEntityType *type;
21 aabb3f32 box_collision;
22 aabb3f32 box_culling; // ToDo
23 mat4x4 *nametag_offset;
25 pthread_rwlock_t lock_pos_rot;
26 pthread_rwlock_t lock_nametag;
27 pthread_rwlock_t lock_box_off;
30 // Entity is pronounced N-Tiddy, hmmmm...
32 typedef struct ClientEntityType {
33 void (*add )(ClientEntity *entity); // called when server sent addition of entity
34 void (*remove)(ClientEntity *entity); // called when server sent removal of entity
35 void (*free )(ClientEntity *entity); // called when entity is garbage collected
37 void (*update_pos_rot)(ClientEntity *entity);
38 void (*update_nametag)(ClientEntity *entity);
40 void (*transform)(ClientEntity *entity);
43 extern ClientEntityType client_entity_types[];
44 extern Mesh client_entity_cube;
45 extern ModelShader client_entity_shader;
47 void client_entity_init();
48 void client_entity_deinit();
50 bool client_entity_gfx_init();
51 void client_entity_gfx_deinit();
52 void client_entity_gfx_update();
54 ClientEntity *client_entity_grab(u64 id);
55 void client_entity_drop(ClientEntity *entity);
57 void client_entity_transform(ClientEntity *entity);
59 void client_entity_add(void *peer, ToClientEntityAdd *pkt);
60 void client_entity_remove(void *peer, ToClientEntityRemove *pkt);
61 void client_entity_update_pos_rot(void *peer, ToClientEntityUpdatePosRot *pkt);
62 void client_entity_update_nametag(void *peer, ToClientEntityUpdateNametag *pkt);
64 #endif // _CLIENT_ENTITY_H_