Scene loading fixes
This commit is contained in:
@@ -29,8 +29,9 @@ cmd_new_scene :: (arguments: [] string) {
|
|||||||
unload_scene(engine.current_scene);
|
unload_scene(engine.current_scene);
|
||||||
}
|
}
|
||||||
|
|
||||||
engine.current_scene = create_scene(arguments[0]);
|
make_directory_if_it_does_not_exist(scene_path);
|
||||||
|
|
||||||
|
engine.current_scene = create_scene(arguments[0]);
|
||||||
|
|
||||||
switch_to_scene(arguments[0]);
|
switch_to_scene(arguments[0]);
|
||||||
console_success("Scene '%' loaded\n", arguments[0]);
|
console_success("Scene '%' loaded\n", arguments[0]);
|
||||||
|
|||||||
@@ -33,6 +33,8 @@ Particle_System :: struct {
|
|||||||
_locator: Bucket_Locator;
|
_locator: Bucket_Locator;
|
||||||
|
|
||||||
on_particle_update: (*Particle_System, float);
|
on_particle_update: (*Particle_System, float);
|
||||||
|
|
||||||
|
scene: *Scene;
|
||||||
}
|
}
|
||||||
|
|
||||||
create_particle_system :: (pipeline: Pipeline_State_Handle, update_func: (*Particle_System, float), owning_entity: *Entity = null, scene: *Scene = null) -> *Particle_System {
|
create_particle_system :: (pipeline: Pipeline_State_Handle, update_func: (*Particle_System, float), owning_entity: *Entity = null, scene: *Scene = null) -> *Particle_System {
|
||||||
@@ -43,9 +45,15 @@ create_particle_system :: (pipeline: Pipeline_State_Handle, update_func: (*Parti
|
|||||||
particle_system.pipeline = pipeline;
|
particle_system.pipeline = pipeline;
|
||||||
particle_system.on_particle_update = update_func;
|
particle_system.on_particle_update = update_func;
|
||||||
particle_system.owning_entity = owning_entity;
|
particle_system.owning_entity = owning_entity;
|
||||||
|
particle_system.scene = scene;
|
||||||
return particle_system;
|
return particle_system;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
destroy_particle_system :: (system: *Particle_System) {
|
||||||
|
destroy_buffer(engine.renderer, system.vertex_buffer);
|
||||||
|
bucket_array_remove(*system.scene.particle_systems, system._locator);
|
||||||
|
}
|
||||||
|
|
||||||
spawn_particle :: (system: *Particle_System, position: Vector3, velocity: Vector3 = .{0,0,0}, size: float = 1.0, lifetime: float = 1.0, color: Vector4 = .{1,1,1,1}) {
|
spawn_particle :: (system: *Particle_System, position: Vector3, velocity: Vector3 = .{0,0,0}, size: float = 1.0, lifetime: float = 1.0, color: Vector4 = .{1,1,1,1}) {
|
||||||
particle: Particle;
|
particle: Particle;
|
||||||
particle.position = position;
|
particle.position = position;
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ Scene :: struct {
|
|||||||
|
|
||||||
entities : [..] *Entity;
|
entities : [..] *Entity;
|
||||||
|
|
||||||
particle_systems : Bucket_Array(Particle_System, 64);
|
particle_systems : Bucket_Array(Particle_System, 128);
|
||||||
|
|
||||||
by_type : Entity_Storage;
|
by_type : Entity_Storage;
|
||||||
|
|
||||||
@@ -20,6 +20,7 @@ Scene :: struct {
|
|||||||
camera : Camera;
|
camera : Camera;
|
||||||
directional_light : Directional_Light;
|
directional_light : Directional_Light;
|
||||||
|
|
||||||
|
mode: Engine_Mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
Entity_File_Info :: struct {
|
Entity_File_Info :: struct {
|
||||||
@@ -43,6 +44,7 @@ visitor :: (info : *File_Visit_Info, files: *[..] Entity_File_Info) {
|
|||||||
|
|
||||||
load_scene :: (name: string) -> *Scene {
|
load_scene :: (name: string) -> *Scene {
|
||||||
scene := create_scene(name, 1024);
|
scene := create_scene(name, 1024);
|
||||||
|
scene.mode = engine.mode;
|
||||||
|
|
||||||
if engine.procs.on_scene_loaded != null {
|
if engine.procs.on_scene_loaded != null {
|
||||||
engine.procs.on_pre_scene_loaded(scene, engine.mode);
|
engine.procs.on_pre_scene_loaded(scene, engine.mode);
|
||||||
@@ -125,6 +127,10 @@ save_scene :: (scene: *Scene, path: string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
unload_scene :: (scene: *Scene) {
|
unload_scene :: (scene: *Scene) {
|
||||||
|
if engine.procs.on_pre_scene_unloaded != null {
|
||||||
|
engine.procs.on_pre_scene_unloaded(scene);
|
||||||
|
}
|
||||||
|
|
||||||
for e: scene.entities {
|
for e: scene.entities {
|
||||||
destroy_entity(e);
|
destroy_entity(e);
|
||||||
}
|
}
|
||||||
@@ -165,6 +171,7 @@ create_scene :: (name: string = "", max_entities: s64 = 256) -> *Scene {
|
|||||||
}
|
}
|
||||||
|
|
||||||
scene.name = copy_string(new_name);
|
scene.name = copy_string(new_name);
|
||||||
|
scene.mode = engine.mode;
|
||||||
|
|
||||||
// Setup allocator
|
// Setup allocator
|
||||||
scene.pool = .{};
|
scene.pool = .{};
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ Engine_Core :: struct {
|
|||||||
procs: struct {
|
procs: struct {
|
||||||
on_scene_loaded: (*Scene, Engine_Mode);
|
on_scene_loaded: (*Scene, Engine_Mode);
|
||||||
on_pre_scene_loaded: (*Scene, Engine_Mode);
|
on_pre_scene_loaded: (*Scene, Engine_Mode);
|
||||||
|
on_pre_scene_unloaded: (*Scene);
|
||||||
on_trigger_enter: (*Entity, *Entity);
|
on_trigger_enter: (*Entity, *Entity);
|
||||||
on_trigger_exit: (*Entity, *Entity);
|
on_trigger_exit: (*Entity, *Entity);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -546,7 +546,7 @@ ui_figure_out_sizes :: () {
|
|||||||
// Downwards-dependent
|
// Downwards-dependent
|
||||||
for *box : ui_state.boxes {
|
for *box : ui_state.boxes {
|
||||||
if box.semantic_size[0].size_kind == .CHILDREN_SUM {
|
if box.semantic_size[0].size_kind == .CHILDREN_SUM {
|
||||||
assert(box.num_children != 0);
|
//assert(box.num_children != 0);
|
||||||
|
|
||||||
size : float = 0.0;
|
size : float = 0.0;
|
||||||
child := box.first_child;
|
child := box.first_child;
|
||||||
@@ -564,7 +564,7 @@ ui_figure_out_sizes :: () {
|
|||||||
box.size.x = size + box.padding_left + box.padding_right;
|
box.size.x = size + box.padding_left + box.padding_right;
|
||||||
}
|
}
|
||||||
if box.semantic_size[1].size_kind == .CHILDREN_SUM {
|
if box.semantic_size[1].size_kind == .CHILDREN_SUM {
|
||||||
assert(box.num_children != 0);
|
//assert(box.num_children != 0);
|
||||||
|
|
||||||
size : float = 0.0;
|
size : float = 0.0;
|
||||||
child := box.first_child;
|
child := box.first_child;
|
||||||
|
|||||||
Reference in New Issue
Block a user