auto-build map

This commit is contained in:
artem 2024-01-26 07:34:23 +03:00
parent 0a83816bfe
commit 1406dc7c21
4 changed files with 576 additions and 428 deletions

Binary file not shown.

View File

@ -9,7 +9,7 @@ fn main() {
&event_loop, &event_loop,
Some(StartupData { Some(StartupData {
working_directory: Default::default(), working_directory: Default::default(),
scene: "data/scene.rgs".into(), scenes: vec!["data/scene.rgs".into()],
}), }),
); );
editor.add_game_plugin(GameConstructor); editor.add_game_plugin(GameConstructor);

View File

@ -1,7 +1,7 @@
use fyrox::{ use fyrox::{
asset::manager::ResourceManager, asset::manager::ResourceManager,
core::sstorage::ImmutableString, core::sstorage::ImmutableString,
core::{algebra::Vector3, math::Rect}, core::{algebra::Vector2, algebra::Vector3, math::Rect},
material::shader::SamplerFallback, material::shader::SamplerFallback,
material::{Material, MaterialResource, PropertyValue}, material::{Material, MaterialResource, PropertyValue},
resource::texture::Texture, resource::texture::Texture,
@ -34,39 +34,187 @@ fn build_ground_material(resource_manager: &ResourceManager) -> MaterialResource
return MaterialResource::new_ok(Default::default(), material); return MaterialResource::new_ok(Default::default(), material);
} }
fn build_ground_block(graph: &mut Graph, resource_manager: &ResourceManager, x: f32, y : f32) { fn build_tree_material(resource_manager: &ResourceManager) -> MaterialResource {
let rb_transform = TransformBuilder::new() let mut material = Material::standard_2d();
.with_local_position(Vector3::new(x, y, 0.0)) material
.build(); .set_property(
&ImmutableString::new("diffuseTexture"),
RigidBodyBuilder::new( PropertyValue::Sampler {
BaseBuilder::new() value: Some(resource_manager.request::<Texture>("assets/data/objects/Tree_2.png")),
.with_children(&[ fallback: SamplerFallback::Normal,
// 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),
) )
// Turn off gravity for tile .unwrap();
.with_gravity_scale(0.) return MaterialResource::new_ok(Default::default(), material);
// Set tile to be static and not rotate }
.with_rotation_locked(true)
.with_body_type(RigidBodyType::Static) fn build_stone_material(resource_manager: &ResourceManager) -> MaterialResource {
.build(graph); let mut material = Material::standard_2d();
material
.set_property(
&ImmutableString::new("diffuseTexture"),
PropertyValue::Sampler {
value: Some(resource_manager.request::<Texture>("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::<Texture>("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) { pub fn build_map(graph: &mut Graph, resource_manager: &ResourceManager) {
for x in -100..100 { let bottom_y: f32 = -5.0;
build_ground_block(graph, resource_manager, x as 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
);
} }

View File

@ -316,133 +316,19 @@
scene_settings: { scene_settings: {
"data/scene.rgs": ( "data/scene.rgs": (
camera_settings: ( camera_settings: (
position: (2.6864347, -1.3119695, -3.0), position: (6.305661, 0.0, -3.0),
yaw: -4.1247883, yaw: -6.4613833,
pitch: 0.8356419, pitch: 0.14342158,
), ),
node_infos: { node_infos: {
( (
index: 15, index: 74,
generation: 1, generation: 1,
): ( ): (
is_expanded: true, is_expanded: true,
), ),
( (
index: 45, index: 94,
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,
generation: 1, generation: 1,
): ( ): (
is_expanded: true, is_expanded: true,
@ -450,281 +336,17 @@
( (
index: 2, index: 2,
generation: 1, generation: 1,
): (
is_expanded: false,
),
(
index: 83,
generation: 1,
): ( ): (
is_expanded: true, 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, index: 10,
generation: 1, 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, is_expanded: true,
), ),
( (
index: 57, index: 47,
generation: 1,
): (
is_expanded: false,
),
(
index: 11,
generation: 1,
): (
is_expanded: false,
),
(
index: 69,
generation: 1,
): (
is_expanded: false,
),
(
index: 59,
generation: 1, generation: 1,
): ( ): (
is_expanded: true, is_expanded: true,
@ -736,25 +358,103 @@
is_expanded: false, is_expanded: false,
), ),
( (
index: 40, index: 8,
generation: 1,
): (
is_expanded: false,
),
(
index: 52,
generation: 1, generation: 1,
): ( ): (
is_expanded: true, is_expanded: true,
), ),
( (
index: 55, index: 39,
generation: 1, generation: 1,
): ( ): (
is_expanded: false, is_expanded: false,
), ),
( (
index: 1, index: 22,
generation: 1, generation: 1,
): ( ): (
is_expanded: false, 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, generation: 1,
): ( ): (
is_expanded: false, is_expanded: false,
@ -762,23 +462,107 @@
( (
index: 29, index: 29,
generation: 1, 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, is_expanded: false,
), ),
( (
index: 82, index: 12,
generation: 1,
): (
is_expanded: false,
),
(
index: 6,
generation: 1, generation: 1,
): ( ): (
is_expanded: true, is_expanded: true,
), ),
( (
index: 0, index: 36,
generation: 1,
): (
is_expanded: false,
),
(
index: 62,
generation: 1, generation: 1,
): ( ): (
is_expanded: true, 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, generation: 1,
): ( ): (
is_expanded: false, is_expanded: false,
@ -790,7 +574,19 @@
is_expanded: true, is_expanded: true,
), ),
( (
index: 14, index: 90,
generation: 1,
): (
is_expanded: false,
),
(
index: 0,
generation: 1,
): (
is_expanded: true,
),
(
index: 17,
generation: 1, generation: 1,
): ( ): (
is_expanded: false, is_expanded: false,
@ -802,11 +598,125 @@
is_expanded: false, is_expanded: false,
), ),
( (
index: 16, index: 54,
generation: 1, generation: 1,
): ( ): (
is_expanded: true, 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, index: 46,
generation: 1, generation: 1,
@ -814,13 +724,37 @@
is_expanded: false, 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, generation: 1,
): ( ): (
is_expanded: false, is_expanded: false,
), ),
( (
index: 94, index: 24,
generation: 1,
): (
is_expanded: false,
),
(
index: 14,
generation: 1, generation: 1,
): ( ): (
is_expanded: true, is_expanded: true,
@ -832,7 +766,73 @@
is_expanded: true, 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, generation: 1,
): ( ): (
is_expanded: true, is_expanded: true,