summaryrefslogtreecommitdiff
path: root/src/engine/bitwise_engine.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/bitwise_engine.rs')
-rw-r--r--src/engine/bitwise_engine.rs45
1 files changed, 28 insertions, 17 deletions
diff --git a/src/engine/bitwise_engine.rs b/src/engine/bitwise_engine.rs
index 99e4d92..add7d31 100644
--- a/src/engine/bitwise_engine.rs
+++ b/src/engine/bitwise_engine.rs
@@ -23,7 +23,9 @@ pub struct PlayerBuildings {
pub occupied: u64,
pub energy_towers: u64,
- pub missile_towers: [u64; MISSILE_COOLDOWN+1],
+
+ pub missile_towers: [u64; MISSILE_COOLDOWN_STATES],
+ pub firing_tower: usize,
pub missiles: [(u64, u64); MISSILE_MAX_SINGLE_CELL],
pub tesla_cooldowns: [TeslaCooldown; TESLA_MAX]
@@ -178,6 +180,26 @@ impl BitwiseGameState {
self.player_buildings.tesla_cooldowns.sort_by_key(|b| (!b.active, b.pos));
self.opponent_buildings.tesla_cooldowns.sort_by_key(|b| (!b.active, b.pos));
+
+
+ while self.player_buildings.firing_tower > 0 {
+ self.player_buildings.firing_tower -= 1;
+ let zero = self.player_buildings.missile_towers[0];
+ for i in 1..self.player_buildings.missile_towers.len() {
+ self.player_buildings.missile_towers[i-1] = self.player_buildings.missile_towers[i];
+ }
+ let end = self.player_buildings.missile_towers.len()-1;
+ self.player_buildings.missile_towers[end] = zero;
+ }
+ while self.opponent_buildings.firing_tower > 0 {
+ self.opponent_buildings.firing_tower -= 1;
+ let zero = self.opponent_buildings.missile_towers[0];
+ for i in 1..self.opponent_buildings.missile_towers.len() {
+ self.opponent_buildings.missile_towers[i-1] = self.opponent_buildings.missile_towers[i];
+ }
+ let end = self.opponent_buildings.missile_towers.len()-1;
+ self.opponent_buildings.missile_towers[end] = zero;
+ }
}
#[cfg(debug_assertions)]
@@ -256,7 +278,7 @@ impl BitwiseGameState {
player_buildings.energy_towers |= bitfield;
}
if building_type == BuildingType::Attack {
- player_buildings.missile_towers[0] |= bitfield;
+ player_buildings.missile_towers[player_buildings.firing_tower] |= bitfield;
}
if building_type == BuildingType::Tesla {
let ref mut tesla_cooldown = if player_buildings.tesla_cooldowns[0].active {
@@ -321,27 +343,15 @@ impl BitwiseGameState {
}
fn add_missiles(player_buildings: &mut PlayerBuildings) {
- let mut missiles = player_buildings.missile_towers[0];
+ let mut missiles = player_buildings.missile_towers[player_buildings.firing_tower];
for mut tier in player_buildings.missiles.iter_mut() {
let setting = !tier.0 & missiles;
tier.0 |= setting;
missiles &= !setting;
}
-
- BitwiseGameState::rotate_missile_towers(player_buildings);
- }
-
- //TODO: Add a pointer and stop rotating here
- fn rotate_missile_towers(player_buildings: &mut PlayerBuildings) {
- let zero = player_buildings.missile_towers[0];
- for i in 1..player_buildings.missile_towers.len() {
- player_buildings.missile_towers[i-1] = player_buildings.missile_towers[i];
- }
- let end = player_buildings.missile_towers.len()-1;
- player_buildings.missile_towers[end] = zero;
+ player_buildings.firing_tower = (player_buildings.firing_tower + 1) % MISSILE_COOLDOWN_STATES;
}
-
fn move_and_collide_missiles(opponent: &mut Player, opponent_buildings: &mut PlayerBuildings, player_missiles: &mut [(u64, u64); MISSILE_MAX_SINGLE_CELL]) {
for _ in 0..MISSILE_SPEED {
for i in 0..MISSILE_MAX_SINGLE_CELL {
@@ -417,7 +427,8 @@ impl PlayerBuildings {
buildings: [0; DEFENCE_HEALTH],
occupied: 0,
energy_towers: 0,
- missile_towers: [0; MISSILE_COOLDOWN+1],
+ missile_towers: [0; MISSILE_COOLDOWN_STATES],
+ firing_tower: 0,
missiles: [(0,0); MISSILE_MAX_SINGLE_CELL],
tesla_cooldowns: [TeslaCooldown::empty(); TESLA_MAX]
}