1 #ifndef _CLIENT_ENTITY_H_
2 #define _CLIENT_ENTITY_H_
4 #include <dragonnet/peer.h>
5 #include <dragonstd/refcount.h>
7 #include "client/model.h"
13 struct ClientEntityType *type;
18 pthread_rwlock_t lock_pos_rot;
19 pthread_rwlock_t lock_box_eye;
20 pthread_rwlock_t lock_nametag;
23 typedef struct ClientEntityType {
24 void (*add )(ClientEntity *entity); // called when server sent addition of entity
25 void (*remove)(ClientEntity *entity); // called when server sent removal of entity
26 void (*free )(ClientEntity *entity); // called when entity is garbage collected
28 void (*update_pos_rot)(ClientEntity *entity);
29 void (*update_box_eye)(ClientEntity *entity);
30 void (*update_nametag)(ClientEntity *entity);
32 void (*transform)(ClientEntity *entity);
35 void client_entity_init();
36 void client_entity_deinit();
38 ClientEntity *client_entity_grab(u64 id);
39 void client_entity_drop(ClientEntity *entity);
41 void client_entity_transform(ClientEntity *entity);
43 void client_entity_add(DragonnetPeer *peer, ToClientEntityAdd *pkt);
44 void client_entity_remove(DragonnetPeer *peer, ToClientEntityRemove *pkt);
45 void client_entity_update_pos_rot(DragonnetPeer *peer, ToClientEntityUpdatePosRot *pkt);
46 void client_entity_update_box_eye(DragonnetPeer *peer, ToClientEntityUpdateBoxEye *pkt);
47 void client_entity_update_nametag(DragonnetPeer *peer, ToClientEntityUpdateNametag *pkt);
49 extern ClientEntityType client_entity_types[];
51 #endif // _CLIENT_ENTITY_H_