diff --git a/.build/.added_strings_w3.jai b/.build/.added_strings_w3.jai index 1001acd..249feb4 100644 --- a/.build/.added_strings_w3.jai +++ b/.build/.added_strings_w3.jai @@ -1,35 +1,35 @@ // Workspace: Game // -// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:34. +// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:32. // GAME_NAME :: "OCT24"; // -// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:35. +// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:33. // #import "Bucket_Array"; // -// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:248. +// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:246. // init_scene :: (scene: *Scene) { - scene.by_type._Block.allocator = scene.allocator;scene.by_type._Bush.allocator = scene.allocator;scene.by_type._Character.allocator = scene.allocator;scene.by_type._Crab.allocator = scene.allocator;scene.by_type._Crystal.allocator = scene.allocator;scene.by_type._Crystal_Holder.allocator = scene.allocator;scene.by_type._Item.allocator = scene.allocator;scene.by_type._Water.allocator = scene.allocator; + scene.by_type._Block.allocator = scene.allocator;scene.by_type._Bush.allocator = scene.allocator;scene.by_type._Character.allocator = scene.allocator;scene.by_type._Crab.allocator = scene.allocator;scene.by_type._Crystal.allocator = scene.allocator;scene.by_type._Crystal_Holder.allocator = scene.allocator;scene.by_type._Gate.allocator = scene.allocator;scene.by_type._Item.allocator = scene.allocator;scene.by_type._Level_Done.allocator = scene.allocator;scene.by_type._Water.allocator = scene.allocator; } // -// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:260. +// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:258. // #if EDITOR { editor_ui_entity_creation :: () -> *Entity { - if ui_clickable_label("New Block") return new_block();if ui_clickable_label("New Bush") return new_bush();if ui_clickable_label("New Character") return new_character();if ui_clickable_label("New Crab") return new_crab();if ui_clickable_label("New Crystal") return new_crystal();if ui_clickable_label("New Crystal_Holder") return new_crystal_holder();if ui_clickable_label("New Item") return new_item();if ui_clickable_label("New Water") return new_water(); + if ui_clickable_label("New Block") return new_block();if ui_clickable_label("New Bush") return new_bush();if ui_clickable_label("New Character") return new_character();if ui_clickable_label("New Crab") return new_crab();if ui_clickable_label("New Crystal") return new_crystal();if ui_clickable_label("New Crystal_Holder") return new_crystal_holder();if ui_clickable_label("New Gate") return new_gate();if ui_clickable_label("New Item") return new_item();if ui_clickable_label("New Level_Done") return new_level_done();if ui_clickable_label("New Water") return new_water(); return null; } } // -// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:271. +// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:269. // delete_entity :: (e: *Entity) { // Delete the file too @@ -39,7 +39,7 @@ delete_entity :: (e: *Entity) { destroy_entity(e); if e.type == { - case Block; bucket_array_remove(*e.scene.by_type._Block, e._locator); case Bush; bucket_array_remove(*e.scene.by_type._Bush, e._locator); case Character; bucket_array_remove(*e.scene.by_type._Character, e._locator); case Crab; bucket_array_remove(*e.scene.by_type._Crab, e._locator); case Crystal; bucket_array_remove(*e.scene.by_type._Crystal, e._locator); case Crystal_Holder; bucket_array_remove(*e.scene.by_type._Crystal_Holder, e._locator); case Item; bucket_array_remove(*e.scene.by_type._Item, e._locator); case Water; bucket_array_remove(*e.scene.by_type._Water, e._locator); + case Block; bucket_array_remove(*e.scene.by_type._Block, e._locator); case Bush; bucket_array_remove(*e.scene.by_type._Bush, e._locator); case Character; bucket_array_remove(*e.scene.by_type._Character, e._locator); case Crab; bucket_array_remove(*e.scene.by_type._Crab, e._locator); case Crystal; bucket_array_remove(*e.scene.by_type._Crystal, e._locator); case Crystal_Holder; bucket_array_remove(*e.scene.by_type._Crystal_Holder, e._locator); case Gate; bucket_array_remove(*e.scene.by_type._Gate, e._locator); case Item; bucket_array_remove(*e.scene.by_type._Item, e._locator); case Level_Done; bucket_array_remove(*e.scene.by_type._Level_Done, e._locator); case Water; bucket_array_remove(*e.scene.by_type._Water, e._locator); } } @@ -47,7 +47,7 @@ delete_entity :: (e: *Entity) { // -// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:282. +// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:280. // serialize_entity :: (e: *Entity, path: string) { builder: String_Builder; @@ -60,7 +60,9 @@ serialize_entity :: (e: *Entity, path: string) { case Crab; serialize_entity(cast(*Crab)e, *builder); case Crystal; serialize_entity(cast(*Crystal)e, *builder); case Crystal_Holder; serialize_entity(cast(*Crystal_Holder)e, *builder); + case Gate; serialize_entity(cast(*Gate)e, *builder); case Item; serialize_entity(cast(*Item)e, *builder); + case Level_Done; serialize_entity(cast(*Level_Done)e, *builder); case Water; serialize_entity(cast(*Water)e, *builder); } @@ -69,7 +71,7 @@ serialize_entity :: (e: *Entity, path: string) { } // -// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:293. +// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:291. // deserialize_entity :: (scene: *Scene, id: Entity_Id, path: string) -> *Entity { content := File.read_entire_file(path); @@ -91,7 +93,9 @@ deserialize_entity :: (scene: *Scene, id: Entity_Id, path: string) -> *Entity { case "Crab"; p, locator := find_and_occupy_empty_slot(*scene.by_type._Crab); p._locator = locator; e = p; register_entity(scene, p, id); init_entity(p); deserialize_entity(scene, lines, cast(*Crab)e); update_matrix(*e.transform); case "Crystal"; p, locator := find_and_occupy_empty_slot(*scene.by_type._Crystal); p._locator = locator; e = p; register_entity(scene, p, id); init_entity(p); deserialize_entity(scene, lines, cast(*Crystal)e); update_matrix(*e.transform); case "Crystal_Holder"; p, locator := find_and_occupy_empty_slot(*scene.by_type._Crystal_Holder); p._locator = locator; e = p; register_entity(scene, p, id); init_entity(p); deserialize_entity(scene, lines, cast(*Crystal_Holder)e); update_matrix(*e.transform); + case "Gate"; p, locator := find_and_occupy_empty_slot(*scene.by_type._Gate); p._locator = locator; e = p; register_entity(scene, p, id); init_entity(p); deserialize_entity(scene, lines, cast(*Gate)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, id); init_entity(p); deserialize_entity(scene, lines, cast(*Item)e); update_matrix(*e.transform); + case "Level_Done"; p, locator := find_and_occupy_empty_slot(*scene.by_type._Level_Done); p._locator = locator; e = p; register_entity(scene, p, id); init_entity(p); deserialize_entity(scene, lines, cast(*Level_Done)e); update_matrix(*e.transform); case "Water"; p, locator := find_and_occupy_empty_slot(*scene.by_type._Water); p._locator = locator; e = p; register_entity(scene, p, id); init_entity(p); deserialize_entity(scene, lines, cast(*Water)e); update_matrix(*e.transform); } @@ -100,7 +104,7 @@ deserialize_entity :: (scene: *Scene, id: Entity_Id, path: string) -> *Entity { } // -// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:303. +// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:301. // new_block :: (scene: *Scene = null) -> *Block { _scene := scene; if _scene == null { @@ -126,20 +130,28 @@ new_crystal_holder :: (scene: *Scene = null) -> *Crystal_Holder { _scene := scen if _scene == null { _scene = engine.current_scene; } p, locator := find_and_occupy_empty_slot(*_scene.by_type._Crystal_Holder); p._locator = locator; register_entity(_scene, p); p.transform = create_identity_transform(); init_entity(p); return p; } +new_gate :: (scene: *Scene = null) -> *Gate { _scene := scene; +if _scene == null { +_scene = engine.current_scene; } +p, locator := find_and_occupy_empty_slot(*_scene.by_type._Gate); 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 = engine.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_level_done :: (scene: *Scene = null) -> *Level_Done { _scene := scene; +if _scene == null { +_scene = engine.current_scene; } +p, locator := find_and_occupy_empty_slot(*_scene.by_type._Level_Done); p._locator = locator; register_entity(_scene, p); p.transform = create_identity_transform(); init_entity(p); return p; } new_water :: (scene: *Scene = null) -> *Water { _scene := scene; if _scene == null { _scene = engine.current_scene; } p, locator := find_and_occupy_empty_slot(*_scene.by_type._Water); 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/onegameamonth/oct24/modules/Coven/metaprogram.jai:307. +// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:305. // -serialize_entity :: (e: *Crystal_Holder, builder: *String_Builder) { - print_to_builder(builder, "type: Crystal_Holder\n"); +serialize_entity :: (e: *Water, builder: *String_Builder) { + print_to_builder(builder, "type: Water\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); @@ -164,9 +176,9 @@ serialize_entity :: (e: *Crystal_Holder, builder: *String_Builder) { } // -// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:307. +// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:305. // -deserialize_entity :: (scene: *Scene, lines: [] string, e: *Crystal_Holder) { +deserialize_entity :: (scene: *Scene, lines: [] string, e: *Water) { for line: lines { values := split(line, ":"); if values.count == 2 { @@ -217,7 +229,344 @@ deserialize_entity :: (scene: *Scene, lines: [] string, e: *Crystal_Holder) { } // -// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:307. +// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:305. +// +serialize_entity :: (e: *Level_Done, builder: *String_Builder) { + print_to_builder(builder, "type: Level_Done\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.rendering_offset.x: %\n", e.entity.rendering_offset.x); + print_to_builder(builder, "entity.rendering_offset.y: %\n", e.entity.rendering_offset.y); + print_to_builder(builder, "entity.rendering_offset.z: %\n", e.entity.rendering_offset.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, "entity.snap_intervals.x: %\n", e.entity.snap_intervals.x); + print_to_builder(builder, "entity.snap_intervals.y: %\n", e.entity.snap_intervals.y); + print_to_builder(builder, "entity.snap_intervals.z: %\n", e.entity.snap_intervals.z); +} + +// +// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:305. +// +deserialize_entity :: (scene: *Scene, lines: [] string, e: *Level_Done) { + 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.rendering_offset.x"; + scan2(values[1], "%", *e.entity.rendering_offset.x); + case "entity.rendering_offset.y"; + scan2(values[1], "%", *e.entity.rendering_offset.y); + case "entity.rendering_offset.z"; + scan2(values[1], "%", *e.entity.rendering_offset.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 "entity.snap_intervals.x"; + scan2(values[1], "%", *e.entity.snap_intervals.x); + case "entity.snap_intervals.y"; + scan2(values[1], "%", *e.entity.snap_intervals.y); + case "entity.snap_intervals.z"; + scan2(values[1], "%", *e.entity.snap_intervals.z); + } + } + } +} + +// +// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:305. +// +serialize_entity :: (e: *Crystal_Holder, builder: *String_Builder) { + print_to_builder(builder, "type: Crystal_Holder\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.rendering_offset.x: %\n", e.entity.rendering_offset.x); + print_to_builder(builder, "entity.rendering_offset.y: %\n", e.entity.rendering_offset.y); + print_to_builder(builder, "entity.rendering_offset.z: %\n", e.entity.rendering_offset.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, "entity.snap_intervals.x: %\n", e.entity.snap_intervals.x); + print_to_builder(builder, "entity.snap_intervals.y: %\n", e.entity.snap_intervals.y); + print_to_builder(builder, "entity.snap_intervals.z: %\n", e.entity.snap_intervals.z); + print_to_builder(builder, "occupied: %\n", e.occupied); +} + +// +// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:305. +// +deserialize_entity :: (scene: *Scene, lines: [] string, e: *Crystal_Holder) { + 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.rendering_offset.x"; + scan2(values[1], "%", *e.entity.rendering_offset.x); + case "entity.rendering_offset.y"; + scan2(values[1], "%", *e.entity.rendering_offset.y); + case "entity.rendering_offset.z"; + scan2(values[1], "%", *e.entity.rendering_offset.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 "entity.snap_intervals.x"; + scan2(values[1], "%", *e.entity.snap_intervals.x); + case "entity.snap_intervals.y"; + scan2(values[1], "%", *e.entity.snap_intervals.y); + case "entity.snap_intervals.z"; + scan2(values[1], "%", *e.entity.snap_intervals.z); + case "occupied"; + scan2(values[1], "%", *e.occupied); + } + } + } +} + +// +// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:305. +// +serialize_entity :: (e: *Crystal, builder: *String_Builder) { + print_to_builder(builder, "type: Crystal\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.rendering_offset.x: %\n", e.entity.rendering_offset.x); + print_to_builder(builder, "entity.rendering_offset.y: %\n", e.entity.rendering_offset.y); + print_to_builder(builder, "entity.rendering_offset.z: %\n", e.entity.rendering_offset.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, "entity.snap_intervals.x: %\n", e.entity.snap_intervals.x); + print_to_builder(builder, "entity.snap_intervals.y: %\n", e.entity.snap_intervals.y); + print_to_builder(builder, "entity.snap_intervals.z: %\n", e.entity.snap_intervals.z); + print_to_builder(builder, "state: %\n", e.state); + print_to_builder(builder, "crab_count: %\n", e.crab_count); + print_to_builder(builder, "crabs_ready: %\n", e.crabs_ready); + print_to_builder(builder, "move_up_amount: %\n", e.move_up_amount); +} + +// +// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:305. +// +deserialize_entity :: (scene: *Scene, lines: [] string, e: *Crystal) { + 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.rendering_offset.x"; + scan2(values[1], "%", *e.entity.rendering_offset.x); + case "entity.rendering_offset.y"; + scan2(values[1], "%", *e.entity.rendering_offset.y); + case "entity.rendering_offset.z"; + scan2(values[1], "%", *e.entity.rendering_offset.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 "entity.snap_intervals.x"; + scan2(values[1], "%", *e.entity.snap_intervals.x); + case "entity.snap_intervals.y"; + scan2(values[1], "%", *e.entity.snap_intervals.y); + case "entity.snap_intervals.z"; + scan2(values[1], "%", *e.entity.snap_intervals.z); + case "crab_count"; + scan2(values[1], "%", *e.crab_count); + case "crabs_ready"; + scan2(values[1], "%", *e.crabs_ready); + case "move_up_amount"; + scan2(values[1], "%", *e.move_up_amount); + } + } + } +} + +// +// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:305. +// +serialize_entity :: (e: *Bush, builder: *String_Builder) { + print_to_builder(builder, "type: Bush\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.rendering_offset.x: %\n", e.entity.rendering_offset.x); + print_to_builder(builder, "entity.rendering_offset.y: %\n", e.entity.rendering_offset.y); + print_to_builder(builder, "entity.rendering_offset.z: %\n", e.entity.rendering_offset.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, "entity.snap_intervals.x: %\n", e.entity.snap_intervals.x); + print_to_builder(builder, "entity.snap_intervals.y: %\n", e.entity.snap_intervals.y); + print_to_builder(builder, "entity.snap_intervals.z: %\n", e.entity.snap_intervals.z); +} + +// +// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:305. +// +deserialize_entity :: (scene: *Scene, lines: [] string, e: *Bush) { + 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.rendering_offset.x"; + scan2(values[1], "%", *e.entity.rendering_offset.x); + case "entity.rendering_offset.y"; + scan2(values[1], "%", *e.entity.rendering_offset.y); + case "entity.rendering_offset.z"; + scan2(values[1], "%", *e.entity.rendering_offset.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 "entity.snap_intervals.x"; + scan2(values[1], "%", *e.entity.snap_intervals.x); + case "entity.snap_intervals.y"; + scan2(values[1], "%", *e.entity.snap_intervals.y); + case "entity.snap_intervals.z"; + scan2(values[1], "%", *e.entity.snap_intervals.z); + } + } + } +} + +// +// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:305. // serialize_entity :: (e: *Block, builder: *String_Builder) { print_to_builder(builder, "type: Block\n"); @@ -247,7 +596,7 @@ serialize_entity :: (e: *Block, builder: *String_Builder) { } // -// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:307. +// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:305. // deserialize_entity :: (scene: *Scene, lines: [] string, e: *Block) { for line: lines { @@ -302,10 +651,10 @@ deserialize_entity :: (scene: *Scene, lines: [] string, e: *Block) { } // -// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:307. +// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:305. // -serialize_entity :: (e: *Crystal, builder: *String_Builder) { - print_to_builder(builder, "type: Crystal\n"); +serialize_entity :: (e: *Crab, builder: *String_Builder) { + print_to_builder(builder, "type: Crab\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); @@ -328,13 +677,26 @@ serialize_entity :: (e: *Crystal, builder: *String_Builder) { print_to_builder(builder, "entity.snap_intervals.y: %\n", e.entity.snap_intervals.y); print_to_builder(builder, "entity.snap_intervals.z: %\n", e.entity.snap_intervals.z); print_to_builder(builder, "state: %\n", e.state); - print_to_builder(builder, "crab_count: %\n", e.crab_count); + print_to_builder(builder, "assigned_crystal_offset.x: %\n", e.assigned_crystal_offset.x); + print_to_builder(builder, "assigned_crystal_offset.y: %\n", e.assigned_crystal_offset.y); + print_to_builder(builder, "assigned_crystal_offset.z: %\n", e.assigned_crystal_offset.z); + print_to_builder(builder, "current_yaw: %\n", e.current_yaw); + print_to_builder(builder, "target_look_direction.x: %\n", e.target_look_direction.x); + print_to_builder(builder, "target_look_direction.y: %\n", e.target_look_direction.y); + print_to_builder(builder, "target_look_direction.z: %\n", e.target_look_direction.z); + print_to_builder(builder, "current_direction.x: %\n", e.current_direction.x); + print_to_builder(builder, "current_direction.y: %\n", e.current_direction.y); + print_to_builder(builder, "current_direction.z: %\n", e.current_direction.z); + print_to_builder(builder, "has_initial_position: %\n", e.has_initial_position); + print_to_builder(builder, "initial_position.x: %\n", e.initial_position.x); + print_to_builder(builder, "initial_position.y: %\n", e.initial_position.y); + print_to_builder(builder, "initial_position.z: %\n", e.initial_position.z); } // -// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:307. +// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:305. // -deserialize_entity :: (scene: *Scene, lines: [] string, e: *Crystal) { +deserialize_entity :: (scene: *Scene, lines: [] string, e: *Crab) { for line: lines { values := split(line, ":"); if values.count == 2 { @@ -379,15 +741,138 @@ deserialize_entity :: (scene: *Scene, lines: [] string, e: *Crystal) { scan2(values[1], "%", *e.entity.snap_intervals.y); case "entity.snap_intervals.z"; scan2(values[1], "%", *e.entity.snap_intervals.z); - case "crab_count"; - scan2(values[1], "%", *e.crab_count); + case "assigned_crystal_offset.x"; + scan2(values[1], "%", *e.assigned_crystal_offset.x); + case "assigned_crystal_offset.y"; + scan2(values[1], "%", *e.assigned_crystal_offset.y); + case "assigned_crystal_offset.z"; + scan2(values[1], "%", *e.assigned_crystal_offset.z); + case "current_yaw"; + scan2(values[1], "%", *e.current_yaw); + case "target_look_direction.x"; + scan2(values[1], "%", *e.target_look_direction.x); + case "target_look_direction.y"; + scan2(values[1], "%", *e.target_look_direction.y); + case "target_look_direction.z"; + scan2(values[1], "%", *e.target_look_direction.z); + case "current_direction.x"; + scan2(values[1], "%", *e.current_direction.x); + case "current_direction.y"; + scan2(values[1], "%", *e.current_direction.y); + case "current_direction.z"; + scan2(values[1], "%", *e.current_direction.z); + case "has_initial_position"; + scan2(values[1], "%", *e.has_initial_position); + case "initial_position.x"; + scan2(values[1], "%", *e.initial_position.x); + case "initial_position.y"; + scan2(values[1], "%", *e.initial_position.y); + case "initial_position.z"; + scan2(values[1], "%", *e.initial_position.z); } } } } // -// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:307. +// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:305. +// +serialize_entity :: (e: *Gate, builder: *String_Builder) { + print_to_builder(builder, "type: Gate\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.rendering_offset.x: %\n", e.entity.rendering_offset.x); + print_to_builder(builder, "entity.rendering_offset.y: %\n", e.entity.rendering_offset.y); + print_to_builder(builder, "entity.rendering_offset.z: %\n", e.entity.rendering_offset.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, "entity.snap_intervals.x: %\n", e.entity.snap_intervals.x); + print_to_builder(builder, "entity.snap_intervals.y: %\n", e.entity.snap_intervals.y); + print_to_builder(builder, "entity.snap_intervals.z: %\n", e.entity.snap_intervals.z); + print_to_builder(builder, "crystals_to_be_active: %\n", e.crystals_to_be_active); + print_to_builder(builder, "state: %\n", e.state); + print_to_builder(builder, "initial_position.x: %\n", e.initial_position.x); + print_to_builder(builder, "initial_position.y: %\n", e.initial_position.y); + print_to_builder(builder, "initial_position.z: %\n", e.initial_position.z); + print_to_builder(builder, "open_amount: %\n", e.open_amount); +} + +// +// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:305. +// +deserialize_entity :: (scene: *Scene, lines: [] string, e: *Gate) { + 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.rendering_offset.x"; + scan2(values[1], "%", *e.entity.rendering_offset.x); + case "entity.rendering_offset.y"; + scan2(values[1], "%", *e.entity.rendering_offset.y); + case "entity.rendering_offset.z"; + scan2(values[1], "%", *e.entity.rendering_offset.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 "entity.snap_intervals.x"; + scan2(values[1], "%", *e.entity.snap_intervals.x); + case "entity.snap_intervals.y"; + scan2(values[1], "%", *e.entity.snap_intervals.y); + case "entity.snap_intervals.z"; + scan2(values[1], "%", *e.entity.snap_intervals.z); + case "crystals_to_be_active"; + scan2(values[1], "%", *e.crystals_to_be_active); + case "initial_position.x"; + scan2(values[1], "%", *e.initial_position.x); + case "initial_position.y"; + scan2(values[1], "%", *e.initial_position.y); + case "initial_position.z"; + scan2(values[1], "%", *e.initial_position.z); + case "open_amount"; + scan2(values[1], "%", *e.open_amount); + } + } + } +} + +// +// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:305. // serialize_entity :: (e: *Character, builder: *String_Builder) { print_to_builder(builder, "type: Character\n"); @@ -429,7 +914,7 @@ serialize_entity :: (e: *Character, builder: *String_Builder) { } // -// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:307. +// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:305. // deserialize_entity :: (scene: *Scene, lines: [] string, e: *Character) { for line: lines { @@ -510,169 +995,7 @@ deserialize_entity :: (scene: *Scene, lines: [] string, e: *Character) { } // -// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:307. -// -serialize_entity :: (e: *Water, builder: *String_Builder) { - print_to_builder(builder, "type: Water\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.rendering_offset.x: %\n", e.entity.rendering_offset.x); - print_to_builder(builder, "entity.rendering_offset.y: %\n", e.entity.rendering_offset.y); - print_to_builder(builder, "entity.rendering_offset.z: %\n", e.entity.rendering_offset.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, "entity.snap_intervals.x: %\n", e.entity.snap_intervals.x); - print_to_builder(builder, "entity.snap_intervals.y: %\n", e.entity.snap_intervals.y); - print_to_builder(builder, "entity.snap_intervals.z: %\n", e.entity.snap_intervals.z); -} - -// -// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:307. -// -deserialize_entity :: (scene: *Scene, lines: [] string, e: *Water) { - 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.rendering_offset.x"; - scan2(values[1], "%", *e.entity.rendering_offset.x); - case "entity.rendering_offset.y"; - scan2(values[1], "%", *e.entity.rendering_offset.y); - case "entity.rendering_offset.z"; - scan2(values[1], "%", *e.entity.rendering_offset.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 "entity.snap_intervals.x"; - scan2(values[1], "%", *e.entity.snap_intervals.x); - case "entity.snap_intervals.y"; - scan2(values[1], "%", *e.entity.snap_intervals.y); - case "entity.snap_intervals.z"; - scan2(values[1], "%", *e.entity.snap_intervals.z); - } - } - } -} - -// -// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:307. -// -serialize_entity :: (e: *Bush, builder: *String_Builder) { - print_to_builder(builder, "type: Bush\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.rendering_offset.x: %\n", e.entity.rendering_offset.x); - print_to_builder(builder, "entity.rendering_offset.y: %\n", e.entity.rendering_offset.y); - print_to_builder(builder, "entity.rendering_offset.z: %\n", e.entity.rendering_offset.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, "entity.snap_intervals.x: %\n", e.entity.snap_intervals.x); - print_to_builder(builder, "entity.snap_intervals.y: %\n", e.entity.snap_intervals.y); - print_to_builder(builder, "entity.snap_intervals.z: %\n", e.entity.snap_intervals.z); -} - -// -// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:307. -// -deserialize_entity :: (scene: *Scene, lines: [] string, e: *Bush) { - 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.rendering_offset.x"; - scan2(values[1], "%", *e.entity.rendering_offset.x); - case "entity.rendering_offset.y"; - scan2(values[1], "%", *e.entity.rendering_offset.y); - case "entity.rendering_offset.z"; - scan2(values[1], "%", *e.entity.rendering_offset.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 "entity.snap_intervals.x"; - scan2(values[1], "%", *e.entity.snap_intervals.x); - case "entity.snap_intervals.y"; - scan2(values[1], "%", *e.entity.snap_intervals.y); - case "entity.snap_intervals.z"; - scan2(values[1], "%", *e.entity.snap_intervals.z); - } - } - } -} - -// -// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:307. +// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:305. // serialize_entity :: (e: *Item, builder: *String_Builder) { print_to_builder(builder, "type: Item\n"); @@ -700,7 +1023,7 @@ serialize_entity :: (e: *Item, builder: *String_Builder) { } // -// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:307. +// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:305. // deserialize_entity :: (scene: *Scene, lines: [] string, e: *Item) { for line: lines { @@ -753,126 +1076,14 @@ deserialize_entity :: (scene: *Scene, lines: [] string, e: *Item) { } // -// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:307. -// -serialize_entity :: (e: *Crab, builder: *String_Builder) { - print_to_builder(builder, "type: Crab\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.rendering_offset.x: %\n", e.entity.rendering_offset.x); - print_to_builder(builder, "entity.rendering_offset.y: %\n", e.entity.rendering_offset.y); - print_to_builder(builder, "entity.rendering_offset.z: %\n", e.entity.rendering_offset.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, "entity.snap_intervals.x: %\n", e.entity.snap_intervals.x); - print_to_builder(builder, "entity.snap_intervals.y: %\n", e.entity.snap_intervals.y); - print_to_builder(builder, "entity.snap_intervals.z: %\n", e.entity.snap_intervals.z); - print_to_builder(builder, "state: %\n", e.state); - print_to_builder(builder, "assigned_crystal_position.x: %\n", e.assigned_crystal_position.x); - print_to_builder(builder, "assigned_crystal_position.y: %\n", e.assigned_crystal_position.y); - print_to_builder(builder, "assigned_crystal_position.z: %\n", e.assigned_crystal_position.z); - print_to_builder(builder, "current_yaw: %\n", e.current_yaw); - print_to_builder(builder, "target_look_direction.x: %\n", e.target_look_direction.x); - print_to_builder(builder, "target_look_direction.y: %\n", e.target_look_direction.y); - print_to_builder(builder, "target_look_direction.z: %\n", e.target_look_direction.z); - print_to_builder(builder, "current_direction.x: %\n", e.current_direction.x); - print_to_builder(builder, "current_direction.y: %\n", e.current_direction.y); - print_to_builder(builder, "current_direction.z: %\n", e.current_direction.z); -} - -// -// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:307. -// -deserialize_entity :: (scene: *Scene, lines: [] string, e: *Crab) { - 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.rendering_offset.x"; - scan2(values[1], "%", *e.entity.rendering_offset.x); - case "entity.rendering_offset.y"; - scan2(values[1], "%", *e.entity.rendering_offset.y); - case "entity.rendering_offset.z"; - scan2(values[1], "%", *e.entity.rendering_offset.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 "entity.snap_intervals.x"; - scan2(values[1], "%", *e.entity.snap_intervals.x); - case "entity.snap_intervals.y"; - scan2(values[1], "%", *e.entity.snap_intervals.y); - case "entity.snap_intervals.z"; - scan2(values[1], "%", *e.entity.snap_intervals.z); - case "assigned_crystal_position.x"; - scan2(values[1], "%", *e.assigned_crystal_position.x); - case "assigned_crystal_position.y"; - scan2(values[1], "%", *e.assigned_crystal_position.y); - case "assigned_crystal_position.z"; - scan2(values[1], "%", *e.assigned_crystal_position.z); - case "current_yaw"; - scan2(values[1], "%", *e.current_yaw); - case "target_look_direction.x"; - scan2(values[1], "%", *e.target_look_direction.x); - case "target_look_direction.y"; - scan2(values[1], "%", *e.target_look_direction.y); - case "target_look_direction.z"; - scan2(values[1], "%", *e.target_look_direction.z); - case "current_direction.x"; - scan2(values[1], "%", *e.current_direction.x); - case "current_direction.y"; - scan2(values[1], "%", *e.current_direction.y); - case "current_direction.z"; - scan2(values[1], "%", *e.current_direction.z); - } - } - } -} - -// -// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:315. +// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:313. // // NUM_ENTITY_TYPES tells the target program how many entity types there are. -NUM_ENTITY_TYPES :: 8; +NUM_ENTITY_TYPES :: 10; // entity_types is an array containing all the entity types. -entity_types : [8] Type : .[ Block, Bush, Character, Crab, Crystal, Crystal_Holder, Item, Water ]; +entity_types : [10] Type : .[ Block, Bush, Character, Crab, Crystal, Crystal_Holder, Gate, Item, Level_Done, Water ]; Entity_Storage :: struct { _Block: Bucket_Array(Block, 20, true); @@ -881,7 +1092,9 @@ Entity_Storage :: struct { _Crab: Bucket_Array(Crab, 20, true); _Crystal: Bucket_Array(Crystal, 20, true); _Crystal_Holder: Bucket_Array(Crystal_Holder, 20, true); + _Gate: Bucket_Array(Gate, 20, true); _Item: Bucket_Array(Item, 20, true); + _Level_Done: Bucket_Array(Level_Done, 20, true); _Water: Bucket_Array(Water, 20, true); } diff --git a/core/scene.jai b/core/scene.jai index 4bf6413..ef8a64e 100644 --- a/core/scene.jai +++ b/core/scene.jai @@ -190,6 +190,8 @@ unregister_entity :: (scene: *Scene, entity: *Entity) { } update_animators :: (dt: float) { + if engine.current_scene == null return; + for e: engine.current_scene.entities { if e.flags & .ANIMATED { update_animator(e, *e.animator, dt); @@ -198,6 +200,8 @@ update_animators :: (dt: float) { } update_transforms :: () { + if engine.current_scene == null return; + for e: engine.current_scene.entities { if e.parent == null { update_entity_transform(e, Matrix4_Identity); @@ -232,9 +236,11 @@ update_entity_transform :: (e: *Entity, parent_matrix: Matrix4 = Matrix4_Identit 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); + if e.flags & .RENDERABLE { + for model_node, i: e.renderable.model.nodes { + if model_node.parent == 0 { + update_entity_node(e, model_node, i, e.transform.world_matrix); + } } } diff --git a/editor/editor.jai b/editor/editor.jai index 13ede85..5220ce1 100644 --- a/editor/editor.jai +++ b/editor/editor.jai @@ -112,8 +112,8 @@ init_transform_gizmo :: () { // Transform gizmo shader { - vs := create_vertex_shader_from_source(engine.renderer, TRANSFORM_GIZMO_SHADER, "VS", mesh_data_types = .[.POSITION]); - ps := create_pixel_shader_from_source(engine.renderer, TRANSFORM_GIZMO_SHADER, "PS"); + vs := create_vertex_shader_from_source(engine.renderer, "Transform Gizmo", TRANSFORM_GIZMO_SHADER, "VS", mesh_data_types = .[.POSITION]); + ps := create_pixel_shader_from_source(engine.renderer, "Transform Gizmo", TRANSFORM_GIZMO_SHADER, "PS"); engine.editor.transform_gizmo.pipeline = create_pipeline_state2(engine.renderer, vs, ps, blend_type=.OPAQUE); } diff --git a/editor/editor_ui.jai b/editor/editor_ui.jai index a18bbc4..790629e 100644 --- a/editor/editor_ui.jai +++ b/editor/editor_ui.jai @@ -98,29 +98,31 @@ editor_ui :: () { ui_set_next_size_x(.PCT, 1.0); ui_tab_title_bar("ENTITIES"); - for engine.current_scene.entities { - ui_set_next_padding(20); - clicked := false; - selected := array_find(engine.editor.selected_entities, it); - if it.name.count == 0 { - clicked = ui_clickable_label(tprint("%", it.type), selected, it_index); - } else { - clicked = ui_clickable_label(it.name, selected, it_index); - } - - if clicked { - if !key_pressed(.CTRL) { - engine.editor.selected_entities.count = 0; - array_add(*engine.editor.selected_entities, it); + if engine.current_scene != null { + for engine.current_scene.entities { + ui_set_next_padding(20); + clicked := false; + selected := array_find(engine.editor.selected_entities, it); + if it.name.count == 0 { + clicked = ui_clickable_label(tprint("%", it.type), selected, it_index); } else { - if selected { - array_unordered_remove_by_value(*engine.editor.selected_entities, it); - } else { + clicked = ui_clickable_label(it.name, selected, it_index); + } + + if clicked { + if !key_pressed(.CTRL) { + engine.editor.selected_entities.count = 0; array_add(*engine.editor.selected_entities, it); + } else { + if selected { + array_unordered_remove_by_value(*engine.editor.selected_entities, it); + } else { + array_add(*engine.editor.selected_entities, it); + } } } + //ui_space(0, 5); } - //ui_space(0, 5); } } ui_pop_parent(); @@ -141,7 +143,9 @@ editor_ui :: () { state := ui_interactable_texture(get_texture_from_pass("UI Blend Pass")); if state.left_mouse_down { - pick_scene_view_at(engine.editor.camera, .{state.normalized_local_mouse_coordinates.x, 1.0-state.normalized_local_mouse_coordinates.y}); + if engine.current_scene != null { + pick_scene_view_at(engine.editor.camera, .{state.normalized_local_mouse_coordinates.x, 1.0-state.normalized_local_mouse_coordinates.y}); + } } diff --git a/metaprogram.jai b/metaprogram.jai index 90220d6..8f1fbba 100644 --- a/metaprogram.jai +++ b/metaprogram.jai @@ -4,9 +4,7 @@ #import "Sort"; #import "File"; -build_release := false; - -build :: (main_path: string, game_name: string, working_dir: string = #filepath) { +build :: (build_release: bool, main_path: string, game_name: string, working_dir: string = #filepath) { set_working_directory(working_dir); make_directory_if_it_does_not_exist("../../bin"); diff --git a/module.jai b/module.jai index 63f8075..405bded 100644 --- a/module.jai +++ b/module.jai @@ -104,15 +104,20 @@ coven_run :: (game_update_proc: (float), game_update_post_physics_proc: (float)) } if engine.mode == .PLAYING { game_update_proc(clamped_dt); - update_animators(clamped_dt); - update_physics(engine.current_scene, clamped_dt); - game_update_post_physics_proc(clamped_dt); + + if engine.current_scene != null { + update_animators(clamped_dt); + update_physics(engine.current_scene, clamped_dt); + game_update_post_physics_proc(clamped_dt); + } } - update_transforms(); - sync_engine_buffers(); + if engine.current_scene != null { + update_transforms(); + sync_engine_buffers(); - update_particle_systems(clamped_dt); + update_particle_systems(clamped_dt); + } #if EDITOR { ui_end(); diff --git a/renderer/dx11_renderer.jai b/renderer/dx11_renderer.jai index 7f8e3c7..09c5424 100644 --- a/renderer/dx11_renderer.jai +++ b/renderer/dx11_renderer.jai @@ -311,7 +311,7 @@ d3d_compile :: (shader: string, source_name: string, pDefines: []string, pInclud return bytecode, pCode, errors, hr; } -compile_shader :: (source: string, entry_point: string, shader_model: string, defines: [] string = string.[]) -> string, *ID3DBlob, HRESULT { +compile_shader :: (name: string, source: string, entry_point: string, shader_model: string, defines: [] string = string.[]) -> string, *ID3DBlob, HRESULT { flags := D3DCOMPILE.ENABLE_STRICTNESS; #if DEBUG { @@ -331,7 +331,7 @@ compile_shader :: (source: string, entry_point: string, shader_model: string, de if FAILED(hr) { free(bytecode); - if errors print ("Error msg: %\n", errors); + if errors print ("Shader compilation error in shader '%': %\n", name, errors); return "", null, hr; } @@ -568,13 +568,13 @@ get_shader_info_from_blob :: (blob: *ID3DBlob, shader_type: Shader_Type) -> Shad return shader_info; } -create_backend_shader_from_source :: (using renderer: *D3D11_Backend, source: string, entry_point: string, shader_type: Shader_Type, defines: [] string = string.[]) -> Backend_Shader #must, Shader_Info, bool { +create_backend_shader_from_source :: (using renderer: *D3D11_Backend, name: string, source: string, entry_point: string, shader_type: Shader_Type, defines: [] string = string.[]) -> Backend_Shader #must, Shader_Info, bool { shader_model : string; if shader_type == .VERTEX shader_model = "vs_4_0"; else shader_model = "ps_4_0"; - bytecode, blob, hr := compile_shader(source, entry_point, shader_model, defines); + bytecode, blob, hr := compile_shader(name, source, entry_point, shader_model, defines); if FAILED(hr) return .{}, .{}, false; @@ -610,7 +610,7 @@ create_backend_shader :: (using renderer: *D3D11_Backend, path: string, entry_po if !content return .{}, .{}, false; defer free(content); - shader, info, success := create_backend_shader_from_source(renderer, content, entry_point, shader_type, defines); + shader, info, success := create_backend_shader_from_source(renderer, path, content, entry_point, shader_type, defines); return shader, info, success; } @@ -620,18 +620,18 @@ reload_backend_shader :: (using renderer: *D3D11_Backend, path: string, entry_po if !content return .{}, false; defer free(content); - shader, success := reload_backend_shader_from_source(renderer, content, entry_point, shader_type, defines); + shader, success := reload_backend_shader_from_source(renderer, path, content, entry_point, shader_type, defines); return shader, success; } -reload_backend_shader_from_source :: (using renderer: *D3D11_Backend, source: string, entry_point: string, shader_type: Shader_Type, defines: [] string = string.[]) -> Backend_Shader #must, bool { +reload_backend_shader_from_source :: (using renderer: *D3D11_Backend, name: string, source: string, entry_point: string, shader_type: Shader_Type, defines: [] string = string.[]) -> Backend_Shader #must, bool { shader_model : string; if shader_type == .VERTEX shader_model = "vs_4_0"; else shader_model = "ps_4_0"; - bytecode, blob, hr := compile_shader(source, entry_point, shader_model, defines); + bytecode, blob, hr := compile_shader(name, source, entry_point, shader_model, defines); if FAILED(hr) return .{}, false; @@ -676,11 +676,12 @@ create_backend_blend_state :: (using renderer: *D3D11_Backend, type: Blend_Type) rtbd.DestBlend = .D3D11_BLEND_INV_SRC_ALPHA; rtbd.BlendOp = .D3D11_BLEND_OP_ADD; rtbd.SrcBlendAlpha = .D3D11_BLEND_ONE; - rtbd.DestBlendAlpha = .D3D11_BLEND_ZERO; - rtbd.BlendOpAlpha = .D3D11_BLEND_OP_ADD; + rtbd.DestBlendAlpha = .D3D11_BLEND_DEST_ALPHA; + rtbd.BlendOpAlpha = .D3D11_BLEND_OP_MAX; rtbd.RenderTargetWriteMask = xx D3D11_COLOR_WRITE_ENABLE.ALL; blend_desc.AlphaToCoverageEnable = .FALSE; + blend_desc.IndependentBlendEnable = .FALSE; blend_desc.RenderTarget[0] = rtbd; success := !FAILED(ID3D11Device_CreateBlendState(d3d_device, *blend_desc, *blend_state)); @@ -1314,11 +1315,6 @@ render :: (backend: *D3D11_Backend, command_buffer: *Render_Command_Buffer) { case .OPAQUE; ID3D11DeviceContext_OMSetBlendState(d3d_context, null, null, 0xffffffff); case .TRANSPARENT; - blend_factor : [4]float; - blend_factor[0] = 0.0; - blend_factor[1] = 0.0; - blend_factor[2] = 0.0; - blend_factor[3] = 0.0; ID3D11DeviceContext_OMSetBlendState(d3d_context, it.set_pipeline_state.blend_state, null, 0xffffffff); } case .SET_VERTEX_BUFFER; diff --git a/renderer/renderer.jai b/renderer/renderer.jai index 6186d5e..4720b10 100644 --- a/renderer/renderer.jai +++ b/renderer/renderer.jai @@ -874,7 +874,7 @@ reload_shader :: (using renderer: *Renderer, shader: *Shader) { } } -create_shader_from_source :: (using renderer: *Renderer, source: string, entry_point: string, shader_type: Shader_Type, defines: [] string = string.[], mesh_data_types: [] Mesh_Vertex_Data_Type = .[.POSITION, .NORMAL, .TEXCOORD]) -> Shader_Handle { +create_shader_from_source :: (using renderer: *Renderer, name: string, source: string, entry_point: string, shader_type: Shader_Type, defines: [] string = string.[], mesh_data_types: [] Mesh_Vertex_Data_Type = .[.POSITION, .NORMAL, .TEXCOORD]) -> Shader_Handle { shader : Shader; shader.type = shader_type; @@ -893,7 +893,7 @@ create_shader_from_source :: (using renderer: *Renderer, source: string, entry_p } } - backend_shader, info, success := create_backend_shader_from_source(engine.renderer.backend, source, entry_point, shader_type, defines); + backend_shader, info, success := create_backend_shader_from_source(engine.renderer.backend, name, source, entry_point, shader_type, defines); if success { shader.info = info;