Moved some game code into engine code
This commit is contained in:
@@ -76,9 +76,11 @@ Entity :: struct {
|
||||
collider : Collider; @DontSerialize
|
||||
// End physics
|
||||
|
||||
#if NETWORKING {
|
||||
remote_id: Entity_Id; @DontSerialize
|
||||
is_proxy: bool; @DontSerialize
|
||||
last_replication_time: float; @DontSerialize
|
||||
}
|
||||
|
||||
_locator: Bucket_Locator; @DontSerialize
|
||||
scene: *Scene; @DontSerialize
|
||||
|
||||
@@ -118,6 +118,7 @@ register_entity :: (scene: *Scene, entity: *Entity) {
|
||||
array_add(*scene.entities, entity);
|
||||
next_entity_id += 1;
|
||||
|
||||
#if NETWORKING {
|
||||
if net_data.net_mode == {
|
||||
case .LISTEN_SERVER; #through;
|
||||
case .DEDICATED_SERVER; {
|
||||
@@ -125,10 +126,67 @@ register_entity :: (scene: *Scene, entity: *Entity) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
unregister_entity :: (scene: *Scene, entity: *Entity) {
|
||||
array_unordered_remove_by_value(*scene.entities, entity);
|
||||
}
|
||||
|
||||
update_animators :: (dt: float) {
|
||||
for e: current_scene.entities {
|
||||
if e.flags & .ANIMATED {
|
||||
update_animator(e, *e.animator, dt);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
update_transforms :: () {
|
||||
for e: current_scene.entities {
|
||||
if e.parent == null {
|
||||
update_entity_transform(e, Matrix4_Identity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
update_entity_node :: (e: *Entity, model_node: Node, index: s64, parent_matrix: Matrix4) {
|
||||
n := *e.renderable.nodes[index];
|
||||
update_matrix(*n.transform);
|
||||
|
||||
n.transform.world_matrix = parent_matrix * n.transform.model_matrix;
|
||||
|
||||
for children_index: 0..model_node.children.count-1 {
|
||||
index := model_node.children[children_index]-1;
|
||||
mn := e.renderable.model.nodes[index];
|
||||
update_entity_node(e, mn, xx index, n.transform.world_matrix);
|
||||
}
|
||||
}
|
||||
|
||||
update_entity_transform :: (e: *Entity, parent_matrix: Matrix4 = Matrix4_Identity) {
|
||||
if e.transform.dirty {
|
||||
update_matrix(*e.transform);
|
||||
e.transform.dirty = false;
|
||||
}
|
||||
|
||||
e.transform.world_matrix = parent_matrix * e.transform.model_matrix;
|
||||
|
||||
for model_node, i: e.renderable.model.nodes {
|
||||
if model_node.parent == 0 {
|
||||
update_entity_node(e, model_node, i, e.transform.world_matrix);
|
||||
}
|
||||
}
|
||||
|
||||
for i: 0..e.num_children-1 {
|
||||
child := e.children[i];
|
||||
|
||||
matrix := e.transform.world_matrix;
|
||||
if child.attach_node_index != -1 {
|
||||
matrix = e.renderable.nodes[child.attach_node_index].transform.world_matrix;
|
||||
}
|
||||
|
||||
update_entity_transform(child, matrix);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#scope_file
|
||||
next_entity_id: Entity_Id;
|
||||
Reference in New Issue
Block a user