Skip to content
This repository has been archived by the owner on Sep 19, 2022. It is now read-only.

Commit

Permalink
Position all elements on the map. Various changes. Added preview video.
Browse files Browse the repository at this point in the history
  • Loading branch information
AnneKitsune committed Jul 25, 2020
1 parent fff99fd commit 5720660
Show file tree
Hide file tree
Showing 2 changed files with 148 additions and 83 deletions.
Binary file added preview.mp4
Binary file not shown.
231 changes: 148 additions & 83 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,70 +7,71 @@ const PLAY_WIDTH: u32 = 81;
const PLAY_HEIGHT: u32 = 50;
const SCREEN_WIDTH: u32 = 100;
const SCREEN_HEIGHT: u32 = 50;
const CREEP_SPAWN_TICKS: u32 = 50;

const MAP: &[&str] = &[
"###################################00000000#####################################",
"###################################00000000#####################################",
"###################################00000000#####################################",
"######################################00########################################",
"######################################00########################################",
"######################################00########################################",
"######################################00########################################",
"######################################00########################################",
"######################################00########################################",
"######################################00########################################",
"##################00000000000000000000000000000000000000000#####################",
"##################00000000000000000000000000000000000000000#####################",
"##################00##################00#################00#####################",
"##################00##################00#################00#####################",
"##################00##################00#################00#####################",
"##################00##################00#################00#####################",
"##################00##################00#################00#####################",
"##################00##################00#################00#####################",
"##################00##################00#################00#####################",
"##################00##################00#################00#####################",
"##################00##################00#################00#####################",
"##################00##################00#################00#####################",
"##################00##################00#################00#####################",
"##################00##################00#################00#####################",
"##################00##################00#################00#####################",
"##################00##################00#################00#####################",
"##################00##################00#################00#####################",
"##################00##################00#################00#####################",
"##################00##################00#################00#####################",
"##################00##################00#################00#####################",
"##################00##################00#################00#####################",
"##################00##################00#################00#####################",
"##################00##################00#################00#####################",
"##################00##################00#################00#####################",
"##################00##################00#################00#####################",
"##################00##################00#################00#####################",
"##################00##################00#################00#####################",
"##################00##################00#################00#####################",
"##################00##################00#################00#####################",
"##################00000000000000000000000000000000000000000#####################",
"##################00000000000000000000000000000000000000000#####################",
"######################################00########################################",
"######################################00########################################",
"######################################00########################################",
"######################################00########################################",
"######################################00########################################",
"######################################00########################################",
"###################################00000000#####################################",
"###################################00000000#####################################",
"###################################00000000#####################################",
"####################################000000000####################################",
"####################################000000000####################################",
"####################################000000000####################################",
"#########################0000000000000000000000000000000#########################",
"#########################0000000000000000000000000000000#########################",
"#########################0000000000000000000000000000000#########################",
"#########################0000000000000000000000000000000#########################",
"##################000000000000000000000000000000000000000000000##################",
"##################000000000000000000000000000000000000000000000##################",
"##################000000000000000000000000000000000000000000000##################",
"##################00000###############00000###############00000##################",
"##################00000###############00000###############00000##################",
"##################00000###############00000###############00000##################",
"##################00000###############00000###############00000##################",
"##################00000###############00000###############00000##################",
"##################00000###############00000###############00000##################",
"##################00000###############00000###############00000##################",
"##################00000###############00000###############00000##################",
"##################00000###############00000###############00000##################",
"##################00000###############00000###############00000##################",
"##################00000###############00000###############00000##################",
"##################00000###############00000###############00000##################",
"##################00000###############00000###############00000##################",
"##################00000###############00000###############00000##################",
"##################00000###############00000###############00000##################",
"##################00000###############00000###############00000##################",
"##################00000###############00000###############00000##################",
"##################00000###############00000###############00000##################",
"##################00000###############00000###############00000##################",
"##################00000###############00000###############00000##################",
"##################00000###############00000###############00000##################",
"##################00000###############00000###############00000##################",
"##################00000###############00000###############00000##################",
"##################00000###############00000###############00000##################",
"##################00000###############00000###############00000##################",
"##################00000###############00000###############00000##################",
"##################00000###############00000###############00000##################",
"##################00000###############00000###############00000##################",
"##################00000###############00000###############00000##################",
"##################00000###############00000###############00000##################",
"##################000000000000000000000000000000000000000000000##################",
"##################000000000000000000000000000000000000000000000##################",
"##################000000000000000000000000000000000000000000000##################",
"#########################0000000000000000000000000000000#########################",
"#########################0000000000000000000000000000000#########################",
"#########################0000000000000000000000000000000#########################",
"#########################0000000000000000000000000000000#########################",
"####################################000000000####################################",
"####################################000000000####################################",
"####################################000000000####################################",
];

#[derive(Component)]
pub struct Tower;
#[derive(Component)]
pub struct Core;
#[derive(Component)]
pub struct Barracks;
pub struct Barrack;
#[derive(Component)]
pub struct Creep;
#[derive(Component)]
pub struct CreepSpawner(u32);
pub struct CreepSpawner(u32, u32);
#[derive(Component)]
pub struct Base;
pub struct Spawner<F: Fn(&mut World)> {
Expand All @@ -79,7 +80,7 @@ pub struct Spawner<F: Fn(&mut World)> {
#[derive(Component)]
pub struct Player;

#[derive(Component)]
#[derive(Component, PartialEq, Eq, Copy, Clone, Debug)]
pub enum Team {
Me, Other,
}
Expand All @@ -105,6 +106,11 @@ pub enum InputEvent {
ZoomToggle,
}

#[derive(PartialEq, Eq, Copy, Clone, Debug)]
pub enum GameEvent {
GameWon(Team),
}

// TODO: Replace by minigene's Time after its implemented
pub struct GameSpeed(pub u32);

Expand All @@ -127,7 +133,7 @@ system!(UpdateCollisionResourceSystem, |global_map: WriteExpect<
'a,
Player,
>| {
for j in 0..50usize {
for j in 0..(PLAY_HEIGHT as usize) {
MAP[j].char_indices().for_each(|(i, c)| {
if c == '#' {
global_map.map.set(i as u32, j as u32);
Expand All @@ -136,6 +142,7 @@ system!(UpdateCollisionResourceSystem, |global_map: WriteExpect<
}
});
}
// TODO fix this
for (pos, _) in (&positions, &players).join() {
global_map.position.x = pos.x - 40;
global_map.position.y = pos.y - 25;
Expand All @@ -150,25 +157,29 @@ system!(
creeps: WriteStorage<'a, Creep>,
ai_destinations: WriteStorage<'a, AiDestination>,
ai_paths: WriteStorage<'a, AiPath>,
teams: WriteStorage<'a, Team>,
sprites: WriteStorage<'a, Sprite>| {
let mut v = vec![];
for (pos, mut spawner) in (&positions, &mut spawners).join() {
for (pos, mut spawner, team) in (&positions, &mut spawners, &teams).join() {
if spawner.0 == 0 {
spawner.0 = 20;
spawner.0 = spawner.1;
// spawn
v.push(pos.clone());
v.push((pos.clone(), team.clone()));
}
spawner.0 -= 1;
}
v.into_iter().for_each(|pos| {
v.into_iter().for_each(|(pos, team)| {
let creep = entities.create();
positions.insert(creep, pos.clone()).unwrap();
creeps.insert(creep, Creep).unwrap();
ai_paths
.insert(creep, AiPath::new(NavigationPath::new()))
.unwrap();
ai_destinations
.insert(creep, AiDestination::new(Point::new(39, 25)))
.insert(creep, AiDestination::new(Point::new(PLAY_WIDTH / 2, PLAY_HEIGHT / 2)))
.unwrap();
teams
.insert(creep, team)
.unwrap();
sprites
.insert(
Expand Down Expand Up @@ -260,6 +271,9 @@ fn main() -> BError {
world.register::<MultiSprite>();
world.register::<Sprite>();
world.register::<Team>();
world.register::<Barrack>();
world.register::<Tower>();
world.register::<Core>();
world.register::<Comp<StatSet<Stats>>>();

let mut input_channel = EventChannel::<VirtualKeyCode>::new();
Expand Down Expand Up @@ -314,71 +328,122 @@ fn main() -> BError {

// player
// TODO remove
world
.create_entity()
.with(Point::new(0, 0))
.with(MultiSprite::new(MultiTileSprite::from_string("@@", 1, 2)))
.with(Comp(stat_defs.to_statset()))
//.with(Player)
.build();
//world
// .create_entity()
// .with(Point::new(0, 0))
// .with(MultiSprite::new(MultiTileSprite::from_string("@@", 1, 2)))
// .with(Comp(stat_defs.to_statset()))
// //.with(Player)
// .build();

world.insert(stat_defs);
world.insert(CollisionResource::new(
CollisionMap::new(PLAY_WIDTH, PLAY_HEIGHT),
Point::new(0, 0),
));

// single tile test
// TODO remove
// Create cores
world
.create_entity()
.with(Point::new(5, 5))
.with(Point::new(PLAY_WIDTH as i32 / 2, 1))
.with(Sprite {
glyph: to_cp437('x'),
fg: RGBA::named(YELLOW),
bg: RGBA::named(BLACK),
glyph: to_cp437('C'),
fg: RGBA::named(BLUE),
bg: RGBA::named(RED),
})
.with(Team::Other)
.with(Core)
.build();
// creep spawner
// TODO move from hardcoded to dyn position
world
.create_entity()
.with(Point::new(55, 10))
.with(CreepSpawner(0))
.build();

world
.create_entity()
.with(Point::new(25, 10))
.with(CreepSpawner(0))
.with(Point::new(PLAY_WIDTH as i32 / 2, PLAY_HEIGHT as i32 - 2))
.with(Sprite {
glyph: to_cp437('C'),
fg: RGBA::named(BLUE),
bg: RGBA::named(RED),
})
.with(Team::Me)
.with(Core)
.build();

// Create barracks
for i in -1..=1 {
let x = PLAY_WIDTH as i32 / 2 + PLAY_WIDTH as i32 / 8 * i as i32;
let y = PLAY_HEIGHT as i32 / 8;
world
.create_entity()
.with(Point::new(PLAY_WIDTH as i32 / 2 + PLAY_WIDTH as i32 / 6 * i as i32, PLAY_HEIGHT as i32 / 6))
.with(Point::new(x, y))
.with(Sprite {
glyph: to_cp437('B'),
fg: RGBA::named(YELLOW),
bg: RGBA::named(RED),
})
.with(Team::Other)
.with(Barrack)
.build();
// Creep spawners
world
.create_entity()
.with(Point::new(x, y + 1))
.with(CreepSpawner(0, CREEP_SPAWN_TICKS))
.with(Team::Other)
.build();
}

for i in -1..=1 {
let x = PLAY_WIDTH as i32 / 2 + PLAY_WIDTH as i32 / 8 * i;
let y = PLAY_HEIGHT as i32 - 1 - PLAY_HEIGHT as i32 / 8;
world
.create_entity()
.with(Point::new(PLAY_WIDTH as i32 / 2 + PLAY_WIDTH as i32 / 6 * i, PLAY_HEIGHT as i32 - PLAY_HEIGHT as i32 / 6))
.with(Point::new(PLAY_WIDTH as i32 / 2 + PLAY_WIDTH as i32 / 8 * i, PLAY_HEIGHT as i32 - 1 - PLAY_HEIGHT as i32 / 8))
.with(Sprite {
glyph: to_cp437('B'),
fg: RGBA::named(YELLOW),
bg: RGBA::named(RED),
})
.with(Team::Me)
.with(Barrack)
.build();
// Creep spawners
world
.create_entity()
.with(Point::new(x, y - 1))
.with(CreepSpawner(0, CREEP_SPAWN_TICKS))
.with(Team::Me)
.build();
}

// Create towers
for i in -1..=1 {
for j in 1..=2 {
world
.create_entity()
.with(Point::new(PLAY_WIDTH as i32 / 2 + PLAY_WIDTH as i32 / 4 * i, PLAY_HEIGHT as i32 * j / 6))
.with(Sprite {
glyph: to_cp437('T'),
fg: RGBA::named(GREEN),
bg: RGBA::named(RED),
})
.with(Team::Me)
.build();
}
}

for i in -1..=1 {
for j in 1..=2 {
world
.create_entity()
.with(Point::new(PLAY_WIDTH as i32 / 2 + PLAY_WIDTH as i32 / 4 * i, PLAY_HEIGHT as i32 - 1 - PLAY_HEIGHT as i32 * j / 6))
.with(Sprite {
glyph: to_cp437('T'),
fg: RGBA::named(GREEN),
bg: RGBA::named(RED),
})
.with(Team::Other)
.build();
}
}

//for i in 10..30 {
// world.create_entity()
Expand Down

0 comments on commit 5720660

Please sign in to comment.