// Workspace: Game // // String added via add_build_string() from c:/Personal/games/FPS/modules/Coven/metaprogram.jai:32. // GAME_NAME :: "FPS"; // // String added via add_build_string() from c:/Personal/games/FPS/modules/Coven/metaprogram.jai:246. // serialize_entity :: (e: *Entity, path: string) { builder: String_Builder; builder.allocator = temp; if e.type == { case Block; serialize_entity(cast(*Block)e, *builder); case Character; serialize_entity(cast(*Character)e, *builder); case Item; serialize_entity(cast(*Item)e, *builder); case Pistol; serialize_entity(cast(*Pistol)e, *builder); } write_entire_file(tprint("%/%.ent", path, e.id), builder_to_string(*builder)); } // // String added via add_build_string() from c:/Personal/games/FPS/modules/Coven/metaprogram.jai:257. // deserialize_entity :: (scene: *Scene, path: string) -> *Entity { content := read_entire_file(path); if content.count == 0 return null; lines := split(content, "\n"); first_line := split(lines[0], ":"); if first_line.count != 2 return null; e: *Entity; type := trim(first_line[1], " \n\r"); if type == { case "Block"; p, locator := find_and_occupy_empty_slot(*scene.by_type._Block); p._locator = locator; e = p; register_entity(scene, p); init_entity(p); deserialize_entity(scene, lines, cast(*Block)e); update_matrix(*e.transform); case "Character"; p, locator := find_and_occupy_empty_slot(*scene.by_type._Character); p._locator = locator; e = p; register_entity(scene, p); init_entity(p); deserialize_entity(scene, lines, cast(*Character)e); update_matrix(*e.transform); case "Item"; p, locator := find_and_occupy_empty_slot(*scene.by_type._Item); p._locator = locator; e = p; register_entity(scene, p); init_entity(p); deserialize_entity(scene, lines, cast(*Item)e); update_matrix(*e.transform); case "Pistol"; p, locator := find_and_occupy_empty_slot(*scene.by_type._Pistol); p._locator = locator; e = p; register_entity(scene, p); init_entity(p); deserialize_entity(scene, lines, cast(*Pistol)e); update_matrix(*e.transform); } return e; } // // String added via add_build_string() from c:/Personal/games/FPS/modules/Coven/metaprogram.jai:266. // new_block :: (scene: *Scene = null) -> *Block { _scene := scene; if _scene == null { _scene = game_state.current_scene; } p, locator := find_and_occupy_empty_slot(*_scene.by_type._Block); p._locator = locator; register_entity(_scene, p); p.transform = create_identity_transform(); init_entity(p); return p; } new_character :: (scene: *Scene = null) -> *Character { _scene := scene; if _scene == null { _scene = game_state.current_scene; } p, locator := find_and_occupy_empty_slot(*_scene.by_type._Character); p._locator = locator; register_entity(_scene, p); p.transform = create_identity_transform(); init_entity(p); return p; } new_item :: (scene: *Scene = null) -> *Item { _scene := scene; if _scene == null { _scene = game_state.current_scene; } p, locator := find_and_occupy_empty_slot(*_scene.by_type._Item); p._locator = locator; register_entity(_scene, p); p.transform = create_identity_transform(); init_entity(p); return p; } new_pistol :: (scene: *Scene = null) -> *Pistol { _scene := scene; if _scene == null { _scene = game_state.current_scene; } p, locator := find_and_occupy_empty_slot(*_scene.by_type._Pistol); p._locator = locator; register_entity(_scene, p); p.transform = create_identity_transform(); init_entity(p); return p; } // // String added via add_build_string() from c:/Personal/games/FPS/modules/Coven/metaprogram.jai:270. // serialize_entity :: (e: *Item, builder: *String_Builder) { print_to_builder(builder, "type: Item\n"); print_to_builder(builder, "entity.enabled: %\n", e.entity.enabled); print_to_builder(builder, "entity.flags: %\n", e.entity.flags); print_to_builder(builder, "entity.transform.position.x: %\n", e.entity.transform.position.x); print_to_builder(builder, "entity.transform.position.y: %\n", e.entity.transform.position.y); print_to_builder(builder, "entity.transform.position.z: %\n", e.entity.transform.position.z); print_to_builder(builder, "entity.transform.orientation.x: %\n", e.entity.transform.orientation.x); print_to_builder(builder, "entity.transform.orientation.y: %\n", e.entity.transform.orientation.y); print_to_builder(builder, "entity.transform.orientation.z: %\n", e.entity.transform.orientation.z); print_to_builder(builder, "entity.transform.orientation.w: %\n", e.entity.transform.orientation.w); print_to_builder(builder, "entity.transform.scale.x: %\n", e.entity.transform.scale.x); print_to_builder(builder, "entity.transform.scale.y: %\n", e.entity.transform.scale.y); print_to_builder(builder, "entity.transform.scale.z: %\n", e.entity.transform.scale.z); print_to_builder(builder, "entity.grid_position.x: %\n", e.entity.grid_position.x); print_to_builder(builder, "entity.grid_position.y: %\n", e.entity.grid_position.y); print_to_builder(builder, "entity.grid_position.z: %\n", e.entity.grid_position.z); print_to_builder(builder, "entity.snap_offset.x: %\n", e.entity.snap_offset.x); print_to_builder(builder, "entity.snap_offset.y: %\n", e.entity.snap_offset.y); print_to_builder(builder, "entity.snap_offset.z: %\n", e.entity.snap_offset.z); } // // String added via add_build_string() from c:/Personal/games/FPS/modules/Coven/metaprogram.jai:270. // deserialize_entity :: (scene: *Scene, lines: [] string, e: *Item) { for line: lines { values := split(line, ":"); if values.count == 2 { if trim(values[0], " ") == { case "entity.enabled"; scan2(values[1], "%", *e.entity.enabled); case "entity.transform.position.x"; scan2(values[1], "%", *e.entity.transform.position.x); case "entity.transform.position.y"; scan2(values[1], "%", *e.entity.transform.position.y); case "entity.transform.position.z"; scan2(values[1], "%", *e.entity.transform.position.z); case "entity.transform.orientation.x"; scan2(values[1], "%", *e.entity.transform.orientation.x); case "entity.transform.orientation.y"; scan2(values[1], "%", *e.entity.transform.orientation.y); case "entity.transform.orientation.z"; scan2(values[1], "%", *e.entity.transform.orientation.z); case "entity.transform.orientation.w"; scan2(values[1], "%", *e.entity.transform.orientation.w); case "entity.transform.scale.x"; scan2(values[1], "%", *e.entity.transform.scale.x); case "entity.transform.scale.y"; scan2(values[1], "%", *e.entity.transform.scale.y); case "entity.transform.scale.z"; scan2(values[1], "%", *e.entity.transform.scale.z); case "entity.grid_position.x"; scan2(values[1], "%", *e.entity.grid_position.x); case "entity.grid_position.y"; scan2(values[1], "%", *e.entity.grid_position.y); case "entity.grid_position.z"; scan2(values[1], "%", *e.entity.grid_position.z); case "entity.snap_offset.x"; scan2(values[1], "%", *e.entity.snap_offset.x); case "entity.snap_offset.y"; scan2(values[1], "%", *e.entity.snap_offset.y); case "entity.snap_offset.z"; scan2(values[1], "%", *e.entity.snap_offset.z); } } } } // // String added via add_build_string() from c:/Personal/games/FPS/modules/Coven/metaprogram.jai:270. // serialize_entity :: (e: *Block, builder: *String_Builder) { print_to_builder(builder, "type: Block\n"); print_to_builder(builder, "entity.enabled: %\n", e.entity.enabled); print_to_builder(builder, "entity.flags: %\n", e.entity.flags); print_to_builder(builder, "entity.transform.position.x: %\n", e.entity.transform.position.x); print_to_builder(builder, "entity.transform.position.y: %\n", e.entity.transform.position.y); print_to_builder(builder, "entity.transform.position.z: %\n", e.entity.transform.position.z); print_to_builder(builder, "entity.transform.orientation.x: %\n", e.entity.transform.orientation.x); print_to_builder(builder, "entity.transform.orientation.y: %\n", e.entity.transform.orientation.y); print_to_builder(builder, "entity.transform.orientation.z: %\n", e.entity.transform.orientation.z); print_to_builder(builder, "entity.transform.orientation.w: %\n", e.entity.transform.orientation.w); print_to_builder(builder, "entity.transform.scale.x: %\n", e.entity.transform.scale.x); print_to_builder(builder, "entity.transform.scale.y: %\n", e.entity.transform.scale.y); print_to_builder(builder, "entity.transform.scale.z: %\n", e.entity.transform.scale.z); print_to_builder(builder, "entity.grid_position.x: %\n", e.entity.grid_position.x); print_to_builder(builder, "entity.grid_position.y: %\n", e.entity.grid_position.y); print_to_builder(builder, "entity.grid_position.z: %\n", e.entity.grid_position.z); print_to_builder(builder, "entity.snap_offset.x: %\n", e.entity.snap_offset.x); print_to_builder(builder, "entity.snap_offset.y: %\n", e.entity.snap_offset.y); print_to_builder(builder, "entity.snap_offset.z: %\n", e.entity.snap_offset.z); print_to_builder(builder, "block_type: %\n", e.block_type); print_to_builder(builder, "debug_id: %\n", e.debug_id); } // // String added via add_build_string() from c:/Personal/games/FPS/modules/Coven/metaprogram.jai:270. // deserialize_entity :: (scene: *Scene, lines: [] string, e: *Block) { for line: lines { values := split(line, ":"); if values.count == 2 { if trim(values[0], " ") == { case "entity.enabled"; scan2(values[1], "%", *e.entity.enabled); case "entity.transform.position.x"; scan2(values[1], "%", *e.entity.transform.position.x); case "entity.transform.position.y"; scan2(values[1], "%", *e.entity.transform.position.y); case "entity.transform.position.z"; scan2(values[1], "%", *e.entity.transform.position.z); case "entity.transform.orientation.x"; scan2(values[1], "%", *e.entity.transform.orientation.x); case "entity.transform.orientation.y"; scan2(values[1], "%", *e.entity.transform.orientation.y); case "entity.transform.orientation.z"; scan2(values[1], "%", *e.entity.transform.orientation.z); case "entity.transform.orientation.w"; scan2(values[1], "%", *e.entity.transform.orientation.w); case "entity.transform.scale.x"; scan2(values[1], "%", *e.entity.transform.scale.x); case "entity.transform.scale.y"; scan2(values[1], "%", *e.entity.transform.scale.y); case "entity.transform.scale.z"; scan2(values[1], "%", *e.entity.transform.scale.z); case "entity.grid_position.x"; scan2(values[1], "%", *e.entity.grid_position.x); case "entity.grid_position.y"; scan2(values[1], "%", *e.entity.grid_position.y); case "entity.grid_position.z"; scan2(values[1], "%", *e.entity.grid_position.z); case "entity.snap_offset.x"; scan2(values[1], "%", *e.entity.snap_offset.x); case "entity.snap_offset.y"; scan2(values[1], "%", *e.entity.snap_offset.y); case "entity.snap_offset.z"; scan2(values[1], "%", *e.entity.snap_offset.z); case "debug_id"; scan2(values[1], "%", *e.debug_id); } } } } // // String added via add_build_string() from c:/Personal/games/FPS/modules/Coven/metaprogram.jai:270. // serialize_entity :: (e: *Pistol, builder: *String_Builder) { print_to_builder(builder, "type: Pistol\n"); print_to_builder(builder, "entity.enabled: %\n", e.entity.enabled); print_to_builder(builder, "entity.flags: %\n", e.entity.flags); print_to_builder(builder, "entity.transform.position.x: %\n", e.entity.transform.position.x); print_to_builder(builder, "entity.transform.position.y: %\n", e.entity.transform.position.y); print_to_builder(builder, "entity.transform.position.z: %\n", e.entity.transform.position.z); print_to_builder(builder, "entity.transform.orientation.x: %\n", e.entity.transform.orientation.x); print_to_builder(builder, "entity.transform.orientation.y: %\n", e.entity.transform.orientation.y); print_to_builder(builder, "entity.transform.orientation.z: %\n", e.entity.transform.orientation.z); print_to_builder(builder, "entity.transform.orientation.w: %\n", e.entity.transform.orientation.w); print_to_builder(builder, "entity.transform.scale.x: %\n", e.entity.transform.scale.x); print_to_builder(builder, "entity.transform.scale.y: %\n", e.entity.transform.scale.y); print_to_builder(builder, "entity.transform.scale.z: %\n", e.entity.transform.scale.z); print_to_builder(builder, "entity.grid_position.x: %\n", e.entity.grid_position.x); print_to_builder(builder, "entity.grid_position.y: %\n", e.entity.grid_position.y); print_to_builder(builder, "entity.grid_position.z: %\n", e.entity.grid_position.z); print_to_builder(builder, "entity.snap_offset.x: %\n", e.entity.snap_offset.x); print_to_builder(builder, "entity.snap_offset.y: %\n", e.entity.snap_offset.y); print_to_builder(builder, "entity.snap_offset.z: %\n", e.entity.snap_offset.z); print_to_builder(builder, "shooting: %\n", e.shooting); print_to_builder(builder, "reloading: %\n", e.reloading); print_to_builder(builder, "shoot_time: %\n", e.shoot_time); print_to_builder(builder, "reload_time: %\n", e.reload_time); print_to_builder(builder, "shot_cooldown_time: %\n", e.shot_cooldown_time); print_to_builder(builder, "current_mag_ammo: %\n", e.current_mag_ammo); print_to_builder(builder, "ammo_per_mag: %\n", e.ammo_per_mag); } // // String added via add_build_string() from c:/Personal/games/FPS/modules/Coven/metaprogram.jai:270. // deserialize_entity :: (scene: *Scene, lines: [] string, e: *Pistol) { for line: lines { values := split(line, ":"); if values.count == 2 { if trim(values[0], " ") == { case "entity.enabled"; scan2(values[1], "%", *e.entity.enabled); case "entity.transform.position.x"; scan2(values[1], "%", *e.entity.transform.position.x); case "entity.transform.position.y"; scan2(values[1], "%", *e.entity.transform.position.y); case "entity.transform.position.z"; scan2(values[1], "%", *e.entity.transform.position.z); case "entity.transform.orientation.x"; scan2(values[1], "%", *e.entity.transform.orientation.x); case "entity.transform.orientation.y"; scan2(values[1], "%", *e.entity.transform.orientation.y); case "entity.transform.orientation.z"; scan2(values[1], "%", *e.entity.transform.orientation.z); case "entity.transform.orientation.w"; scan2(values[1], "%", *e.entity.transform.orientation.w); case "entity.transform.scale.x"; scan2(values[1], "%", *e.entity.transform.scale.x); case "entity.transform.scale.y"; scan2(values[1], "%", *e.entity.transform.scale.y); case "entity.transform.scale.z"; scan2(values[1], "%", *e.entity.transform.scale.z); case "entity.grid_position.x"; scan2(values[1], "%", *e.entity.grid_position.x); case "entity.grid_position.y"; scan2(values[1], "%", *e.entity.grid_position.y); case "entity.grid_position.z"; scan2(values[1], "%", *e.entity.grid_position.z); case "entity.snap_offset.x"; scan2(values[1], "%", *e.entity.snap_offset.x); case "entity.snap_offset.y"; scan2(values[1], "%", *e.entity.snap_offset.y); case "entity.snap_offset.z"; scan2(values[1], "%", *e.entity.snap_offset.z); case "shooting"; scan2(values[1], "%", *e.shooting); case "reloading"; scan2(values[1], "%", *e.reloading); case "shoot_time"; scan2(values[1], "%", *e.shoot_time); case "reload_time"; scan2(values[1], "%", *e.reload_time); case "shot_cooldown_time"; scan2(values[1], "%", *e.shot_cooldown_time); case "current_mag_ammo"; scan2(values[1], "%", *e.current_mag_ammo); case "ammo_per_mag"; scan2(values[1], "%", *e.ammo_per_mag); } } } } // // String added via add_build_string() from c:/Personal/games/FPS/modules/Coven/metaprogram.jai:270. // serialize_entity :: (e: *Character, builder: *String_Builder) { print_to_builder(builder, "type: Character\n"); print_to_builder(builder, "entity.enabled: %\n", e.entity.enabled); print_to_builder(builder, "entity.flags: %\n", e.entity.flags); print_to_builder(builder, "entity.transform.position.x: %\n", e.entity.transform.position.x); print_to_builder(builder, "entity.transform.position.y: %\n", e.entity.transform.position.y); print_to_builder(builder, "entity.transform.position.z: %\n", e.entity.transform.position.z); print_to_builder(builder, "entity.transform.orientation.x: %\n", e.entity.transform.orientation.x); print_to_builder(builder, "entity.transform.orientation.y: %\n", e.entity.transform.orientation.y); print_to_builder(builder, "entity.transform.orientation.z: %\n", e.entity.transform.orientation.z); print_to_builder(builder, "entity.transform.orientation.w: %\n", e.entity.transform.orientation.w); print_to_builder(builder, "entity.transform.scale.x: %\n", e.entity.transform.scale.x); print_to_builder(builder, "entity.transform.scale.y: %\n", e.entity.transform.scale.y); print_to_builder(builder, "entity.transform.scale.z: %\n", e.entity.transform.scale.z); print_to_builder(builder, "entity.grid_position.x: %\n", e.entity.grid_position.x); print_to_builder(builder, "entity.grid_position.y: %\n", e.entity.grid_position.y); print_to_builder(builder, "entity.grid_position.z: %\n", e.entity.grid_position.z); print_to_builder(builder, "entity.snap_offset.x: %\n", e.entity.snap_offset.x); print_to_builder(builder, "entity.snap_offset.y: %\n", e.entity.snap_offset.y); print_to_builder(builder, "entity.snap_offset.z: %\n", e.entity.snap_offset.z); print_to_builder(builder, "look_direction.x: %\n", e.look_direction.x); print_to_builder(builder, "look_direction.y: %\n", e.look_direction.y); print_to_builder(builder, "look_direction.z: %\n", e.look_direction.z); print_to_builder(builder, "yaw: %\n", e.yaw); print_to_builder(builder, "pitch: %\n", e.pitch); print_to_builder(builder, "last_footstep_audio: %\n", e.last_footstep_audio); print_to_builder(builder, "animation_time: %\n", e.animation_time); print_to_builder(builder, "health: %\n", e.health); print_to_builder(builder, "jump_press_time: %\n", e.jump_press_time); print_to_builder(builder, "last_grounded_time: %\n", e.last_grounded_time); } // // String added via add_build_string() from c:/Personal/games/FPS/modules/Coven/metaprogram.jai:270. // deserialize_entity :: (scene: *Scene, lines: [] string, e: *Character) { for line: lines { values := split(line, ":"); if values.count == 2 { if trim(values[0], " ") == { case "entity.enabled"; scan2(values[1], "%", *e.entity.enabled); case "entity.transform.position.x"; scan2(values[1], "%", *e.entity.transform.position.x); case "entity.transform.position.y"; scan2(values[1], "%", *e.entity.transform.position.y); case "entity.transform.position.z"; scan2(values[1], "%", *e.entity.transform.position.z); case "entity.transform.orientation.x"; scan2(values[1], "%", *e.entity.transform.orientation.x); case "entity.transform.orientation.y"; scan2(values[1], "%", *e.entity.transform.orientation.y); case "entity.transform.orientation.z"; scan2(values[1], "%", *e.entity.transform.orientation.z); case "entity.transform.orientation.w"; scan2(values[1], "%", *e.entity.transform.orientation.w); case "entity.transform.scale.x"; scan2(values[1], "%", *e.entity.transform.scale.x); case "entity.transform.scale.y"; scan2(values[1], "%", *e.entity.transform.scale.y); case "entity.transform.scale.z"; scan2(values[1], "%", *e.entity.transform.scale.z); case "entity.grid_position.x"; scan2(values[1], "%", *e.entity.grid_position.x); case "entity.grid_position.y"; scan2(values[1], "%", *e.entity.grid_position.y); case "entity.grid_position.z"; scan2(values[1], "%", *e.entity.grid_position.z); case "entity.snap_offset.x"; scan2(values[1], "%", *e.entity.snap_offset.x); case "entity.snap_offset.y"; scan2(values[1], "%", *e.entity.snap_offset.y); case "entity.snap_offset.z"; scan2(values[1], "%", *e.entity.snap_offset.z); case "look_direction.x"; scan2(values[1], "%", *e.look_direction.x); case "look_direction.y"; scan2(values[1], "%", *e.look_direction.y); case "look_direction.z"; scan2(values[1], "%", *e.look_direction.z); case "yaw"; scan2(values[1], "%", *e.yaw); case "pitch"; scan2(values[1], "%", *e.pitch); case "last_footstep_audio"; scan2(values[1], "%", *e.last_footstep_audio); case "animation_time"; scan2(values[1], "%", *e.animation_time); case "health"; scan2(values[1], "%", *e.health); case "jump_press_time"; scan2(values[1], "%", *e.jump_press_time); case "last_grounded_time"; scan2(values[1], "%", *e.last_grounded_time); } } } } // // String added via add_build_string() from c:/Personal/games/FPS/modules/Coven/metaprogram.jai:278. // // NUM_ENTITY_TYPES tells the target program how many entity types there are. NUM_ENTITY_TYPES :: 4; // entity_types is an array containing all the entity types. entity_types : [4] Type : .[ Block, Character, Item, Pistol ]; Entity_Storage :: struct { _Block: Bucket_Array(Block, 20, true); _Character: Bucket_Array(Character, 20, true); _Item: Bucket_Array(Item, 20, true); _Pistol: Bucket_Array(Pistol, 20, true); }