diff --git a/data/scene.rgs b/data/scene.rgs index 5278aae..c266516 100644 Binary files a/data/scene.rgs and b/data/scene.rgs differ diff --git a/editor/src/main.rs b/editor/src/main.rs index d8b8a38..726641f 100644 --- a/editor/src/main.rs +++ b/editor/src/main.rs @@ -9,7 +9,7 @@ fn main() { &event_loop, Some(StartupData { working_directory: Default::default(), - scene: "data/scene.rgs".into(), + scenes: vec!["data/scene.rgs".into()], }), ); editor.add_game_plugin(GameConstructor); diff --git a/game/src/map.rs b/game/src/map.rs index 235a0f4..a9d37e7 100644 --- a/game/src/map.rs +++ b/game/src/map.rs @@ -1,7 +1,7 @@ use fyrox::{ asset::manager::ResourceManager, core::sstorage::ImmutableString, - core::{algebra::Vector3, math::Rect}, + core::{algebra::Vector2, algebra::Vector3, math::Rect}, material::shader::SamplerFallback, material::{Material, MaterialResource, PropertyValue}, resource::texture::Texture, @@ -34,39 +34,187 @@ fn build_ground_material(resource_manager: &ResourceManager) -> MaterialResource return MaterialResource::new_ok(Default::default(), material); } -fn build_ground_block(graph: &mut Graph, resource_manager: &ResourceManager, x: f32, y : f32) { - let rb_transform = TransformBuilder::new() - .with_local_position(Vector3::new(x, y, 0.0)) - .build(); - - RigidBodyBuilder::new( - BaseBuilder::new() - .with_children(&[ - // Collider to prevent player from moving past boundary - RectangleBuilder::new(BaseBuilder::new()) - .with_material(build_ground_material(resource_manager)) - // Sprite is located in top left corner of sprite sheet - .with_uv_rect(Rect::new(0.0, 0.0, 1.0, 1.0)) - .build(graph), - ColliderBuilder::new(BaseBuilder::new()) - .with_shape(ColliderShape::Cuboid(CuboidShape::default())) - .build(graph), - ]) - // Optional, set name of tile - .with_name(format!("Boundary ({x}, {y})",)) - // Set position of tile - .with_local_transform(rb_transform), +fn build_tree_material(resource_manager: &ResourceManager) -> MaterialResource { + let mut material = Material::standard_2d(); + material + .set_property( + &ImmutableString::new("diffuseTexture"), + PropertyValue::Sampler { + value: Some(resource_manager.request::("assets/data/objects/Tree_2.png")), + fallback: SamplerFallback::Normal, + }, ) - // Turn off gravity for tile - .with_gravity_scale(0.) - // Set tile to be static and not rotate - .with_rotation_locked(true) - .with_body_type(RigidBodyType::Static) - .build(graph); + .unwrap(); + return MaterialResource::new_ok(Default::default(), material); +} + +fn build_stone_material(resource_manager: &ResourceManager) -> MaterialResource { + let mut material = Material::standard_2d(); + material + .set_property( + &ImmutableString::new("diffuseTexture"), + PropertyValue::Sampler { + value: Some(resource_manager.request::("assets/data/objects/Stone.png")), + fallback: SamplerFallback::Normal, + }, + ) + .unwrap(); + return MaterialResource::new_ok(Default::default(), material); +} + +fn build_box_material(resource_manager: &ResourceManager) -> MaterialResource { + let mut material = Material::standard_2d(); + material + .set_property( + &ImmutableString::new("diffuseTexture"), + PropertyValue::Sampler { + value: Some(resource_manager.request::("assets/data/objects/Crate.png")), + fallback: SamplerFallback::Normal, + }, + ) + .unwrap(); + return MaterialResource::new_ok(Default::default(), material); +} + +fn build_dynamic_block( + graph: &mut Graph, + x: f32, + y: f32, + scale: f32, + material: MaterialResource, + shape: ColliderShape, + mass: f32 +) { + let rb_transform = TransformBuilder::new() + .with_local_position(Vector3::new(x, y, 0.0)) + .with_local_scale(Vector3::new(scale, scale, 1.0)) + .build(); + + RigidBodyBuilder::new( + BaseBuilder::new() + .with_children(&[ + // Collider to prevent player from moving past boundary + RectangleBuilder::new(BaseBuilder::new()) + .with_material(material) + // Sprite is located in top left corner of sprite sheet + .with_uv_rect(Rect::new(0.0, 0.0, 1.0, 1.0)) + .build(graph), + ColliderBuilder::new(BaseBuilder::new()) + .with_shape(shape) + .build(graph), + ]) + // Optional, set name of tile + .with_name(format!("Boundary ({x}, {y})",)) + // Set position of tile + .with_local_transform(rb_transform), + ) + .with_mass(mass) + // Turn off gravity for tile + .with_gravity_scale(1.) + .with_lin_damping(1.0) + // Set tile to be static and not rotate + .with_rotation_locked(false) + .with_body_type(RigidBodyType::Dynamic) + .build(graph); +} + + +fn build_block( + graph: &mut Graph, + x: f32, + y: f32, + scale: f32, + material: MaterialResource, + shape: ColliderShape, +) { + let rb_transform = TransformBuilder::new() + .with_local_position(Vector3::new(x, y, 0.0)) + .with_local_scale(Vector3::new(scale, scale, 1.0)) + .build(); + + RigidBodyBuilder::new( + BaseBuilder::new() + .with_children(&[ + // Collider to prevent player from moving past boundary + RectangleBuilder::new(BaseBuilder::new()) + .with_material(material) + // Sprite is located in top left corner of sprite sheet + .with_uv_rect(Rect::new(0.0, 0.0, 1.0, 1.0)) + .build(graph), + ColliderBuilder::new(BaseBuilder::new()) + .with_shape(shape) + .build(graph), + ]) + // Optional, set name of tile + .with_name(format!("Boundary ({x}, {y})",)) + // Set position of tile + .with_local_transform(rb_transform), + ) + // Turn off gravity for tile + .with_gravity_scale(0.) + // Set tile to be static and not rotate + .with_rotation_locked(true) + .with_body_type(RigidBodyType::Static) + .build(graph); } pub fn build_map(graph: &mut Graph, resource_manager: &ResourceManager) { - for x in -100..100 { - build_ground_block(graph, resource_manager, x as f32, -5.0); + let bottom_y: f32 = -5.0; + let left_x: i32 = -50; + let right_x: i32 = 50; + let box_shape = ColliderShape::Cuboid(CuboidShape::default()); + let tree_shape = ColliderShape::Cuboid(CuboidShape { + half_extents: Vector2::new(0.5, 1.0), + }); + for x in left_x..right_x { + build_block( + graph, + x as f32, + bottom_y, + 1.0, + build_ground_material(resource_manager), + box_shape.clone(), + ); } + build_block( + graph, + 30.0, + bottom_y + 1.5, + 2.0, + build_tree_material(resource_manager), + tree_shape.clone(), + ); + build_block( + graph, + 25.0, + bottom_y + 1.0, + 1.0, + build_stone_material(resource_manager), + box_shape.clone(), + ); + build_block( + graph, + -25.0, + bottom_y + 1.0, + 1.0, + build_stone_material(resource_manager), + box_shape.clone(), + ); + build_block( + graph, + -30.0, + bottom_y + 1.5, + 2.0, + build_tree_material(resource_manager), + tree_shape.clone(), + ); + build_dynamic_block( + graph, + 10.0, + bottom_y + 1.0, + 1.0, + build_box_material(resource_manager), + box_shape.clone(), + 3.0 + ); } diff --git a/settings.ron b/settings.ron index 729ec23..6930542 100644 --- a/settings.ron +++ b/settings.ron @@ -316,133 +316,19 @@ scene_settings: { "data/scene.rgs": ( camera_settings: ( - position: (2.6864347, -1.3119695, -3.0), - yaw: -4.1247883, - pitch: 0.8356419, + position: (6.305661, 0.0, -3.0), + yaw: -6.4613833, + pitch: 0.14342158, ), node_infos: { ( - index: 15, + index: 74, generation: 1, ): ( is_expanded: true, ), ( - index: 45, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 86, - generation: 1, - ): ( - is_expanded: true, - ), - ( - index: 12, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 33, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 63, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 24, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 81, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 9, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 66, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 23, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 18, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 28, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 84, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 44, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 22, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 47, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 5, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 48, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 6, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 80, + index: 94, generation: 1, ): ( is_expanded: true, @@ -450,281 +336,17 @@ ( index: 2, generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 83, - generation: 1, ): ( is_expanded: true, ), - ( - index: 72, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 32, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 89, - generation: 1, - ): ( - is_expanded: true, - ), - ( - index: 50, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 77, - generation: 1, - ): ( - is_expanded: true, - ), - ( - index: 62, - generation: 1, - ): ( - is_expanded: true, - ), - ( - index: 41, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 21, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 31, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 34, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 19, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 7, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 75, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 4, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 56, - generation: 1, - ): ( - is_expanded: true, - ), - ( - index: 95, - generation: 1, - ): ( - is_expanded: true, - ), - ( - index: 93, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 49, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 54, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 51, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 37, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 43, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 65, - generation: 1, - ): ( - is_expanded: true, - ), - ( - index: 3, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 91, - generation: 1, - ): ( - is_expanded: true, - ), - ( - index: 25, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 13, - generation: 1, - ): ( - is_expanded: true, - ), - ( - index: 27, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 30, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 20, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 17, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 90, - generation: 1, - ): ( - is_expanded: false, - ), ( index: 10, generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 42, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 8, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 36, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 39, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 35, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 52, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 38, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 74, - generation: 1, ): ( is_expanded: true, ), ( - index: 57, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 11, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 69, - generation: 1, - ): ( - is_expanded: false, - ), - ( - index: 59, + index: 47, generation: 1, ): ( is_expanded: true, @@ -736,25 +358,103 @@ is_expanded: false, ), ( - index: 40, + index: 8, + generation: 1, + ): ( + is_expanded: false, + ), + ( + index: 52, generation: 1, ): ( is_expanded: true, ), ( - index: 55, + index: 39, generation: 1, ): ( is_expanded: false, ), ( - index: 1, + index: 22, generation: 1, ): ( is_expanded: false, ), ( - index: 78, + index: 42, + generation: 1, + ): ( + is_expanded: false, + ), + ( + index: 5, + generation: 1, + ): ( + is_expanded: false, + ), + ( + index: 77, + generation: 1, + ): ( + is_expanded: true, + ), + ( + index: 15, + generation: 1, + ): ( + is_expanded: true, + ), + ( + index: 18, + generation: 1, + ): ( + is_expanded: true, + ), + ( + index: 33, + generation: 1, + ): ( + is_expanded: true, + ), + ( + index: 13, + generation: 1, + ): ( + is_expanded: true, + ), + ( + index: 80, + generation: 1, + ): ( + is_expanded: true, + ), + ( + index: 59, + generation: 1, + ): ( + is_expanded: true, + ), + ( + index: 83, + generation: 1, + ): ( + is_expanded: true, + ), + ( + index: 4, + generation: 1, + ): ( + is_expanded: true, + ), + ( + index: 9, + generation: 1, + ): ( + is_expanded: false, + ), + ( + index: 75, generation: 1, ): ( is_expanded: false, @@ -762,23 +462,107 @@ ( index: 29, generation: 1, + ): ( + is_expanded: true, + ), + ( + index: 7, + generation: 1, + ): ( + is_expanded: true, + ), + ( + index: 38, + generation: 1, + ): ( + is_expanded: true, + ), + ( + index: 35, + generation: 1, + ): ( + is_expanded: true, + ), + ( + index: 95, + generation: 1, + ): ( + is_expanded: true, + ), + ( + index: 16, + generation: 1, + ): ( + is_expanded: true, + ), + ( + index: 21, + generation: 1, ): ( is_expanded: false, ), ( - index: 82, + index: 12, + generation: 1, + ): ( + is_expanded: false, + ), + ( + index: 6, generation: 1, ): ( is_expanded: true, ), ( - index: 0, + index: 36, + generation: 1, + ): ( + is_expanded: false, + ), + ( + index: 62, generation: 1, ): ( is_expanded: true, ), ( - index: 26, + index: 25, + generation: 1, + ): ( + is_expanded: false, + ), + ( + index: 93, + generation: 1, + ): ( + is_expanded: false, + ), + ( + index: 41, + generation: 1, + ): ( + is_expanded: true, + ), + ( + index: 23, + generation: 1, + ): ( + is_expanded: true, + ), + ( + index: 84, + generation: 1, + ): ( + is_expanded: false, + ), + ( + index: 37, + generation: 1, + ): ( + is_expanded: false, + ), + ( + index: 45, generation: 1, ): ( is_expanded: false, @@ -790,7 +574,19 @@ is_expanded: true, ), ( - index: 14, + index: 90, + generation: 1, + ): ( + is_expanded: false, + ), + ( + index: 0, + generation: 1, + ): ( + is_expanded: true, + ), + ( + index: 17, generation: 1, ): ( is_expanded: false, @@ -802,11 +598,125 @@ is_expanded: false, ), ( - index: 16, + index: 54, generation: 1, ): ( is_expanded: true, ), + ( + index: 27, + generation: 1, + ): ( + is_expanded: false, + ), + ( + index: 26, + generation: 1, + ): ( + is_expanded: true, + ), + ( + index: 44, + generation: 1, + ): ( + is_expanded: true, + ), + ( + index: 50, + generation: 1, + ): ( + is_expanded: true, + ), + ( + index: 49, + generation: 1, + ): ( + is_expanded: false, + ), + ( + index: 82, + generation: 1, + ): ( + is_expanded: true, + ), + ( + index: 81, + generation: 1, + ): ( + is_expanded: false, + ), + ( + index: 56, + generation: 1, + ): ( + is_expanded: true, + ), + ( + index: 28, + generation: 1, + ): ( + is_expanded: false, + ), + ( + index: 30, + generation: 1, + ): ( + is_expanded: true, + ), + ( + index: 53, + generation: 1, + ): ( + is_expanded: true, + ), + ( + index: 57, + generation: 1, + ): ( + is_expanded: false, + ), + ( + index: 40, + generation: 1, + ): ( + is_expanded: true, + ), + ( + index: 66, + generation: 1, + ): ( + is_expanded: false, + ), + ( + index: 20, + generation: 1, + ): ( + is_expanded: true, + ), + ( + index: 71, + generation: 1, + ): ( + is_expanded: true, + ), + ( + index: 48, + generation: 1, + ): ( + is_expanded: false, + ), + ( + index: 1, + generation: 1, + ): ( + is_expanded: true, + ), + ( + index: 69, + generation: 1, + ): ( + is_expanded: false, + ), ( index: 46, generation: 1, @@ -814,13 +724,37 @@ is_expanded: false, ), ( - index: 53, + index: 51, + generation: 1, + ): ( + is_expanded: true, + ), + ( + index: 89, + generation: 1, + ): ( + is_expanded: true, + ), + ( + index: 65, + generation: 1, + ): ( + is_expanded: true, + ), + ( + index: 43, generation: 1, ): ( is_expanded: false, ), ( - index: 94, + index: 24, + generation: 1, + ): ( + is_expanded: false, + ), + ( + index: 14, generation: 1, ): ( is_expanded: true, @@ -832,7 +766,73 @@ is_expanded: true, ), ( - index: 71, + index: 55, + generation: 1, + ): ( + is_expanded: true, + ), + ( + index: 86, + generation: 1, + ): ( + is_expanded: true, + ), + ( + index: 78, + generation: 1, + ): ( + is_expanded: false, + ), + ( + index: 11, + generation: 1, + ): ( + is_expanded: false, + ), + ( + index: 91, + generation: 1, + ): ( + is_expanded: true, + ), + ( + index: 19, + generation: 1, + ): ( + is_expanded: false, + ), + ( + index: 3, + generation: 1, + ): ( + is_expanded: false, + ), + ( + index: 34, + generation: 1, + ): ( + is_expanded: true, + ), + ( + index: 31, + generation: 1, + ): ( + is_expanded: true, + ), + ( + index: 72, + generation: 1, + ): ( + is_expanded: false, + ), + ( + index: 63, + generation: 1, + ): ( + is_expanded: false, + ), + ( + index: 32, generation: 1, ): ( is_expanded: true,