use crate::rules::*;
use weasel::creature::CreatureId;
use weasel::team::TeamId;
use weasel::{
Actor, Battle, BattleController, CreateCreature, CreateTeam, EndTurn, Entity, EntityId,
EventTrigger, Server, StartTurn,
};
mod rules;
static TEAM_ID: TeamId<CustomRules> = 1;
static CREATURE_1_ID: CreatureId<CustomRules> = 1;
static CREATURE_2_ID: CreatureId<CustomRules> = 2;
static ENTITY_1_ID: EntityId<CustomRules> = EntityId::Creature(CREATURE_1_ID);
static ENTITY_2_ID: EntityId<CustomRules> = EntityId::Creature(CREATURE_2_ID);
fn main() {
let battle = Battle::builder(CustomRules::new()).build();
let mut server = Server::builder(battle).build();
CreateTeam::trigger(&mut server, TEAM_ID).fire().unwrap();
println!("Spawning two creatures...");
println!();
CreateCreature::trigger(&mut server, CREATURE_1_ID, TEAM_ID, ())
.abilities_seed(vec![PUNCH])
.fire()
.unwrap();
CreateCreature::trigger(&mut server, CREATURE_2_ID, TEAM_ID, ())
.abilities_seed(vec![PUNCH, POWER_UP])
.fire()
.unwrap();
println!(
"Now doing three rounds of combat. Notice how Creature (2) punches get more powerful!"
);
println!();
for i in 0..3 {
round(&mut server, i);
}
}
fn round(server: &mut Server<CustomRules>, turn: u32) {
println!("Round {}", turn + 1);
println!();
print_power(server, CREATURE_1_ID);
print_power(server, CREATURE_2_ID);
println!("Turn of Creature (1)...");
StartTurn::trigger(server, ENTITY_1_ID).fire().unwrap();
EndTurn::trigger(server).fire().unwrap();
println!("Turn of Creature (2)...");
StartTurn::trigger(server, ENTITY_2_ID).fire().unwrap();
EndTurn::trigger(server).fire().unwrap();
print_power(server, CREATURE_1_ID);
print_power(server, CREATURE_2_ID);
println!();
}
fn print_power(server: &Server<CustomRules>, id: CreatureId<CustomRules>) {
let creature = server.battle().entities().creature(&id).unwrap();
println!(
"{} punch power: {:?}",
creature.entity_id(),
creature.ability(&PUNCH).unwrap().power()
);
}