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,
Some(StartupData {
working_directory: Default::default(),
scene: "data/scene.rgs".into(),
scenes: vec!["data/scene.rgs".into()],
}),
);
editor.add_game_plugin(GameConstructor);

View File

@ -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::<Texture>("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::<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) {
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
);
}

View File

@ -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,