Compare commits

..

No commits in common. "b562abe976e8dc0e5ba05d60a9d2765b0a23ebc4" and "e04e6209304de5d42e43ea0d629b7e359f8344ef" have entirely different histories.

10 changed files with 99 additions and 106 deletions

8
.idea/.gitignore generated vendored Normal file
View File

@ -0,0 +1,8 @@
# 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 Normal file
View File

@ -0,0 +1,6 @@
<?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 Normal file
View File

@ -0,0 +1,7 @@
<?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 Normal file
View File

@ -0,0 +1,15 @@
<?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 Normal file
View File

@ -0,0 +1,8 @@
<?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 Normal file
View File

@ -0,0 +1,11 @@
<?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 Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

View File

@ -1,6 +1,7 @@
{ {
"recommendations": [ "recommendations": [
"vadimcn.vscode-lldb", "vadimcn.vscode-lldb",
"ymotongpoo.licenser",
"rust-lang.rust-analyzer" "rust-lang.rust-analyzer"
] ]
} }

View File

@ -1,10 +1,10 @@
use serde::{Serialize, Deserialize}; use serde::{Serialize, Deserialize};
#[derive(Serialize, Deserialize)] #[derive(Serialize, Deserialize)]
pub struct SurfaceDef<'a> { pub struct SurfaceDef {
pub label: &'a str, label: String,
pub name: &'a str, name: String,
pub description: &'a str, description: String,
pub texture_index: u32, texture_index: u32,
pub support: f32, support: f32,
} }

View File

@ -7,56 +7,10 @@ use bevy::{
prelude::*, prelude::*,
}; };
use bevy_ecs_tilemap::prelude::*; use bevy_ecs_tilemap::prelude::*;
use defs::SurfaceDef; use rand::{thread_rng, Rng};
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,
@ -65,22 +19,18 @@ 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(( .spawn(TileBundle {
tile_terrain.clone(), position: tile_pos,
TileBundle { tilemap_id: TilemapId(tilemap_entity),
position: tile_pos, texture_index: TileTextureIndex(random.gen_range(13..=19)),
tilemap_id: TilemapId(tilemap_entity), ..Default::default()
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);
} }
@ -89,34 +39,18 @@ 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.entity(tilemap_entity).insert(TilemapBundle { commands
grid_size, .entity(tilemap_entity)
map_type, .insert(TilemapBundle {
size: tilemap_size, grid_size,
storage: tile_storage.clone(), map_type,
texture: TilemapTexture::Single(texture_handle), size: tilemap_size,
tile_size, storage: tile_storage.clone(),
transform: get_tilemap_center_transform(&tilemap_size, &grid_size, &map_type, 0.0), texture: TilemapTexture::Single(texture_handle),
..Default::default() tile_size,
}); 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>) {
@ -130,10 +64,9 @@ 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.clone(), texture_handle,
tile_size, tile_size,
); );
make_pawn(&mut commands, texture_handle, tile_size);
} }
fn mouse_motion( fn mouse_motion(
@ -151,21 +84,19 @@ fn mouse_motion(
} }
} }
fn main() { fn main() {
App::new() App::new()
.add_plugins( .add_plugins(DefaultPlugins
DefaultPlugins .set(WindowPlugin {
.set(WindowPlugin { window: WindowDescriptor {
window: WindowDescriptor { width: 1270.0,
width: 1270.0, height:720.0,
height: 720.0, title: String::from("Monstrous"),
title: String::from("Monstrous"), ..Default::default()
..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())