Compare commits
3 Commits
e04e620930
...
b562abe976
Author | SHA1 | Date | |
---|---|---|---|
b562abe976 | |||
22ed2261f3 | |||
d4175e0710 |
8
.idea/.gitignore
generated
vendored
8
.idea/.gitignore
generated
vendored
@ -1,8 +0,0 @@
|
|||||||
# Default ignored files
|
|
||||||
/shelf/
|
|
||||||
/workspace.xml
|
|
||||||
# Editor-based HTTP Client requests
|
|
||||||
/httpRequests/
|
|
||||||
# Datasource local storage ignored files
|
|
||||||
/dataSources/
|
|
||||||
/dataSources.local.xml
|
|
6
.idea/GitLink.xml
generated
6
.idea/GitLink.xml
generated
@ -1,6 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="uk.co.ben_gibson.git.link.SettingsState">
|
|
||||||
<option name="host" value="e0f86390-1091-4871-8aeb-f534fbc99cf0" />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
7
.idea/discord.xml
generated
7
.idea/discord.xml
generated
@ -1,7 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="DiscordProjectSettings">
|
|
||||||
<option name="show" value="PROJECT_FILES" />
|
|
||||||
<option name="description" value="" />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
15
.idea/git_toolbox_prj.xml
generated
15
.idea/git_toolbox_prj.xml
generated
@ -1,15 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="GitToolBoxProjectSettings">
|
|
||||||
<option name="commitMessageIssueKeyValidationOverride">
|
|
||||||
<BoolValueOverride>
|
|
||||||
<option name="enabled" value="true" />
|
|
||||||
</BoolValueOverride>
|
|
||||||
</option>
|
|
||||||
<option name="commitMessageValidationEnabledOverride">
|
|
||||||
<BoolValueOverride>
|
|
||||||
<option name="enabled" value="true" />
|
|
||||||
</BoolValueOverride>
|
|
||||||
</option>
|
|
||||||
</component>
|
|
||||||
</project>
|
|
8
.idea/modules.xml
generated
8
.idea/modules.xml
generated
@ -1,8 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="ProjectModuleManager">
|
|
||||||
<modules>
|
|
||||||
<module fileurl="file://$PROJECT_DIR$/.idea/monstrous.iml" filepath="$PROJECT_DIR$/.idea/monstrous.iml" />
|
|
||||||
</modules>
|
|
||||||
</component>
|
|
||||||
</project>
|
|
11
.idea/monstrous.iml
generated
11
.idea/monstrous.iml
generated
@ -1,11 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<module type="CPP_MODULE" version="4">
|
|
||||||
<component name="NewModuleRootManager">
|
|
||||||
<content url="file://$MODULE_DIR$">
|
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/target" />
|
|
||||||
</content>
|
|
||||||
<orderEntry type="inheritedJdk" />
|
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
|
||||||
</component>
|
|
||||||
</module>
|
|
6
.idea/vcs.xml
generated
6
.idea/vcs.xml
generated
@ -1,6 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="VcsDirectoryMappings">
|
|
||||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
1
.vscode/extensions.json
vendored
1
.vscode/extensions.json
vendored
@ -1,7 +1,6 @@
|
|||||||
{
|
{
|
||||||
"recommendations": [
|
"recommendations": [
|
||||||
"vadimcn.vscode-lldb",
|
"vadimcn.vscode-lldb",
|
||||||
"ymotongpoo.licenser",
|
|
||||||
"rust-lang.rust-analyzer"
|
"rust-lang.rust-analyzer"
|
||||||
]
|
]
|
||||||
}
|
}
|
12
src/defs.rs
12
src/defs.rs
@ -1,10 +1,10 @@
|
|||||||
use serde::{Serialize, Deserialize};
|
use serde::{Serialize, Deserialize};
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize)]
|
#[derive(Serialize, Deserialize)]
|
||||||
pub struct SurfaceDef {
|
pub struct SurfaceDef<'a> {
|
||||||
label: String,
|
pub label: &'a str,
|
||||||
name: String,
|
pub name: &'a str,
|
||||||
description: String,
|
pub description: &'a str,
|
||||||
texture_index: u32,
|
pub texture_index: u32,
|
||||||
support: f32,
|
pub support: f32,
|
||||||
}
|
}
|
||||||
|
131
src/main.rs
131
src/main.rs
@ -7,10 +7,56 @@ use bevy::{
|
|||||||
prelude::*,
|
prelude::*,
|
||||||
};
|
};
|
||||||
use bevy_ecs_tilemap::prelude::*;
|
use bevy_ecs_tilemap::prelude::*;
|
||||||
use rand::{thread_rng, Rng};
|
use defs::SurfaceDef;
|
||||||
|
|
||||||
mod defs;
|
mod defs;
|
||||||
|
|
||||||
|
const TERRAINS: [SurfaceDef; 3] = [
|
||||||
|
SurfaceDef {
|
||||||
|
label: "Mud",
|
||||||
|
name: "mud",
|
||||||
|
description: "Soil saturated with water.",
|
||||||
|
texture_index: 13,
|
||||||
|
support: 20.0,
|
||||||
|
},
|
||||||
|
SurfaceDef {
|
||||||
|
label: "Grass",
|
||||||
|
name: "grass",
|
||||||
|
description: "Green. Try to touch it.",
|
||||||
|
texture_index: 14,
|
||||||
|
support: 40.0,
|
||||||
|
},
|
||||||
|
SurfaceDef {
|
||||||
|
label: "Sand",
|
||||||
|
name: "sand",
|
||||||
|
description: "Gets everywhere, ruins vanilla sex fantasies.",
|
||||||
|
texture_index: 15,
|
||||||
|
support: 20.0,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
#[derive(Component, Clone)]
|
||||||
|
struct TileTerrain {
|
||||||
|
terrain_id: usize,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl TileTerrain {
|
||||||
|
fn def(&self) -> &SurfaceDef {
|
||||||
|
&TERRAINS[self.terrain_id]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Bundle, Default)]
|
||||||
|
struct PawnBundle {
|
||||||
|
position: TilePos,
|
||||||
|
sprite: Sprite,
|
||||||
|
transform: Transform,
|
||||||
|
global_transform: GlobalTransform,
|
||||||
|
texture: Handle<Image>,
|
||||||
|
visibility: Visibility,
|
||||||
|
computed_visibility: ComputedVisibility,
|
||||||
|
}
|
||||||
|
|
||||||
fn make_ground_layer(
|
fn make_ground_layer(
|
||||||
commands: &mut Commands,
|
commands: &mut Commands,
|
||||||
tilemap_size: TilemapSize,
|
tilemap_size: TilemapSize,
|
||||||
@ -19,18 +65,22 @@ fn make_ground_layer(
|
|||||||
) {
|
) {
|
||||||
let mut tile_storage = TileStorage::empty(tilemap_size);
|
let mut tile_storage = TileStorage::empty(tilemap_size);
|
||||||
let tilemap_entity = commands.spawn_empty().id();
|
let tilemap_entity = commands.spawn_empty().id();
|
||||||
let mut random = thread_rng();
|
|
||||||
|
|
||||||
for x in 0..tilemap_size.x {
|
for x in 0..tilemap_size.x {
|
||||||
for y in 0..tilemap_size.y {
|
for y in 0..tilemap_size.y {
|
||||||
let tile_pos = TilePos { x, y };
|
let tile_pos = TilePos { x, y };
|
||||||
|
|
||||||
|
let tile_terrain = TileTerrain { terrain_id: 1 };
|
||||||
let tile_entity = commands
|
let tile_entity = commands
|
||||||
.spawn(TileBundle {
|
.spawn((
|
||||||
position: tile_pos,
|
tile_terrain.clone(),
|
||||||
tilemap_id: TilemapId(tilemap_entity),
|
TileBundle {
|
||||||
texture_index: TileTextureIndex(random.gen_range(13..=19)),
|
position: tile_pos,
|
||||||
..Default::default()
|
tilemap_id: TilemapId(tilemap_entity),
|
||||||
})
|
texture_index: TileTextureIndex(tile_terrain.def().texture_index),
|
||||||
|
..Default::default()
|
||||||
|
},
|
||||||
|
))
|
||||||
.id();
|
.id();
|
||||||
tile_storage.set(&tile_pos, tile_entity);
|
tile_storage.set(&tile_pos, tile_entity);
|
||||||
}
|
}
|
||||||
@ -39,18 +89,34 @@ fn make_ground_layer(
|
|||||||
let grid_size = tile_size.into();
|
let grid_size = tile_size.into();
|
||||||
let map_type = TilemapType::default();
|
let map_type = TilemapType::default();
|
||||||
|
|
||||||
commands
|
commands.entity(tilemap_entity).insert(TilemapBundle {
|
||||||
.entity(tilemap_entity)
|
grid_size,
|
||||||
.insert(TilemapBundle {
|
map_type,
|
||||||
grid_size,
|
size: tilemap_size,
|
||||||
map_type,
|
storage: tile_storage.clone(),
|
||||||
size: tilemap_size,
|
texture: TilemapTexture::Single(texture_handle),
|
||||||
storage: tile_storage.clone(),
|
tile_size,
|
||||||
texture: TilemapTexture::Single(texture_handle),
|
transform: get_tilemap_center_transform(&tilemap_size, &grid_size, &map_type, 0.0),
|
||||||
tile_size,
|
..Default::default()
|
||||||
transform: get_tilemap_center_transform(&tilemap_size, &grid_size, &map_type, 0.0),
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
fn make_pawn(commands: &mut Commands, texture_handle: Handle<Image>, tile_size: TilemapTileSize) {
|
||||||
|
commands.spawn(PawnBundle {
|
||||||
|
transform: Transform::from_xyz(0.0, 0.0, 1.0),
|
||||||
|
texture: texture_handle,
|
||||||
|
sprite: Sprite {
|
||||||
|
rect: Option::Some(Rect::new(
|
||||||
|
3. * tile_size.x,
|
||||||
|
4. * tile_size.y,
|
||||||
|
4. * tile_size.x,
|
||||||
|
5. * tile_size.y,
|
||||||
|
)),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
});
|
},
|
||||||
|
visibility: Visibility { is_visible: true },
|
||||||
|
..Default::default()
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
fn startup(mut commands: Commands, asset_server: Res<AssetServer>) {
|
fn startup(mut commands: Commands, asset_server: Res<AssetServer>) {
|
||||||
@ -64,9 +130,10 @@ fn startup(mut commands: Commands, asset_server: Res<AssetServer>) {
|
|||||||
make_ground_layer(
|
make_ground_layer(
|
||||||
&mut commands,
|
&mut commands,
|
||||||
tilemap_size,
|
tilemap_size,
|
||||||
texture_handle,
|
texture_handle.clone(),
|
||||||
tile_size,
|
tile_size,
|
||||||
);
|
);
|
||||||
|
make_pawn(&mut commands, texture_handle, tile_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn mouse_motion(
|
fn mouse_motion(
|
||||||
@ -84,19 +151,21 @@ fn mouse_motion(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
App::new()
|
App::new()
|
||||||
.add_plugins(DefaultPlugins
|
.add_plugins(
|
||||||
.set(WindowPlugin {
|
DefaultPlugins
|
||||||
window: WindowDescriptor {
|
.set(WindowPlugin {
|
||||||
width: 1270.0,
|
window: WindowDescriptor {
|
||||||
height:720.0,
|
width: 1270.0,
|
||||||
title: String::from("Monstrous"),
|
height: 720.0,
|
||||||
..Default::default()
|
title: String::from("Monstrous"),
|
||||||
},
|
..Default::default()
|
||||||
..default()
|
},
|
||||||
})
|
..default()
|
||||||
.set(ImagePlugin::default_nearest()),
|
})
|
||||||
|
.set(ImagePlugin::default_nearest()),
|
||||||
)
|
)
|
||||||
.add_plugin(LogDiagnosticsPlugin::default())
|
.add_plugin(LogDiagnosticsPlugin::default())
|
||||||
.add_plugin(FrameTimeDiagnosticsPlugin::default())
|
.add_plugin(FrameTimeDiagnosticsPlugin::default())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user