public static void Serialize(BinaryWriter s, RTSTeam team) { s.Write(team.Type); RTSRace.Serialize(s, team.Race); if (team.Input != null) { s.Write(true); s.Write(ReflectedScript.GetKey(team.Input)); team.Input.Serialize(s); } else { s.Write(false); } s.Write(team.ColorScheme.Name); s.Write(team.ColorScheme.Primary); s.Write(team.ColorScheme.Secondary); s.Write(team.ColorScheme.Tertiary); s.Write(team.Buildings.Count); foreach (var building in team.Buildings) { RTSBuilding.Serialize(s, building); } s.Write(team.Units.Count); foreach (var unit in team.Units) { RTSUnit.Serialize(s, unit); } s.Write(team.Squads.Count); foreach (var squad in team.Squads) { RTSSquad.Serialize(s, squad); } }
// Squad Addition And Removal public RTSSquad AddSquad() { RTSSquad squad = new RTSSquad(this); squad.ActionController = Race.SCAction.CreateInstance <ACSquadActionController>(); squad.MovementController = Race.SCMovement.CreateInstance <ACSquadMovementController>(); squad.TargetingController = Race.SCTargeting.CreateInstance <ACSquadTargetingController>(); Squads.Add(squad); if (OnSquadCreation != null) { OnSquadCreation(squad); } return(squad); }
public static RTSSquad Deserialize(BinaryReader s, RTSTeam team, out List <int> units) { RTSSquad squad = team.AddSquad(); int c = s.ReadInt32(); units = new List <int>(); for (int i = 0; i < c; i++) { units.Add(s.ReadInt32()); } squad.gridPos = s.ReadVector2(); if (s.ReadBoolean()) { if (squad.ActionController != null) { squad.ActionController.Deserialize(s); } } else { squad.ActionController = null; } if (s.ReadBoolean()) { if (squad.MovementController != null) { squad.MovementController.Deserialize(s); } } else { squad.MovementController = null; } if (s.ReadBoolean()) { if (squad.TargetingController != null) { squad.TargetingController.Deserialize(s); } } else { squad.TargetingController = null; } return(squad); }
public static void Serialize(BinaryWriter s, RTSSquad squad) { s.Write(squad.units.Count); foreach (var unit in squad.units) { s.Write(unit.UUID); } s.Write(squad.GridPosition); if (squad.ActionController != null) { s.Write(true); squad.ActionController.Serialize(s); } else { s.Write(false); } if (squad.MovementController != null) { s.Write(true); squad.MovementController.Serialize(s); } else { s.Write(false); } if (squad.TargetingController != null) { s.Write(true); squad.TargetingController.Serialize(s); } else { s.Write(false); } }
public BTaskSquadDecision(GameState g, RTSSquad s) : base(s.Units.Count) { squad = s; state = g; }
public SquadQuery(RTSSquad s, PathQuery q) { Squad = s; Query = q; }
private void SendSquadQuery(GameState s, RTSSquad squad, GameInputEvent e) { squad.RecalculateGridPosition(); Vector2 start = squad.GridPosition; var swe = e as SetWayPointEvent; var ste = e as SetTargetEvent; Vector2 goal = start; if(swe != null) goal = swe.Waypoint; else if(ste != null && ste.Target != null) goal = ste.Target.GridPosition; float minDistSq = float.MaxValue; for(int u = 0; u < squad.Units.Count; u++) { RTSUnit unit = squad.Units[u]; float distSq = (goal - unit.GridPosition).LengthSquared(); if(distSq < minDistSq) { minDistSq = distSq; start = unit.GridPosition; } } var query = pathfinder.ReissuePathQuery(new PathQuery(start, goal, e.Team), start, goal, e.Team); squadQueries.Add(new SquadQuery(squad, query)); }
private void AddTask(GameState s, RTSSquad squad) { // Init The Squad if(squad.TargetingController != null) squad.TargetingController.Init(s, this, squad.Team.Race.SCTargeting); if(squad.MovementController != null) squad.MovementController.Init(s, this, squad.Team.Race.SCMovementInitArgs); if(squad.ActionController != null) squad.ActionController.Init(s, this, squad.Team.Race.SCActionInitArgs); var bts = new BTaskSquadDecision(s, squad); squad.OnDeath += (o) => { tbSquadDecisions.RemoveTask(bts); }; tbSquadDecisions.AddTask(bts); }
private static bool IsSquadEmpty(RTSSquad s) { return s.IsDead; }
// Squad Addition And Removal public RTSSquad AddSquad() { RTSSquad squad = new RTSSquad(this); squad.ActionController = Race.SCAction.CreateInstance<ACSquadActionController>(); squad.MovementController = Race.SCMovement.CreateInstance<ACSquadMovementController>(); squad.TargetingController = Race.SCTargeting.CreateInstance<ACSquadTargetingController>(); Squads.Add(squad); if(OnSquadCreation != null) OnSquadCreation(squad); return squad; }
public static void Serialize(BinaryWriter s, RTSSquad squad) { s.Write(squad.units.Count); foreach(var unit in squad.units) { s.Write(unit.UUID); } s.Write(squad.GridPosition); if(squad.ActionController != null) { s.Write(true); squad.ActionController.Serialize(s); } else { s.Write(false); } if(squad.MovementController != null) { s.Write(true); squad.MovementController.Serialize(s); } else { s.Write(false); } if(squad.TargetingController != null) { s.Write(true); squad.TargetingController.Serialize(s); } else { s.Write(false); } }
public static RTSTeam Deserialize(BinaryReader s, int index, GameState state) { int t = s.ReadInt32(); RTSTeam team = new RTSTeam(index, t); team.Race = RTSRace.Deserialize(s, state); if (s.ReadBoolean()) { string it = s.ReadString(); team.Input = state.Scripts[it].CreateInstance <ACInputController>(); team.Input.Deserialize(s); team.Input.Init(state, index, null); } RTSColorScheme scheme = new RTSColorScheme(); scheme.Name = s.ReadString(); scheme.Primary = s.ReadVector3(); scheme.Secondary = s.ReadVector3(); scheme.Tertiary = s.ReadVector3(); team.ColorScheme = scheme; int? target; var du = new Dictionary <int, RTSUnit>(); List <int> su; int c = s.ReadInt32(); RTSBuilding building; for (int i = 0; i < c; i++) { building = RTSBuilding.Deserialize(s, team, out target); team.buildings.Add(building); if (target.HasValue) { // TODO: Add A Target Binding } state.CGrid.Add(building); } c = s.ReadInt32(); RTSUnit unit; for (int i = 0; i < c; i++) { unit = RTSUnit.Deserialize(s, team, out target); du.Add(unit.UUID, unit); team.units.Add(unit); if (target.HasValue) { // TODO: Add A Target Binding } } c = s.ReadInt32(); RTSSquad squad; for (int i = 0; i < c; i++) { squad = RTSSquad.Deserialize(s, team, out su); team.squads.Add(squad); foreach (int uuid in su) { if (du.TryGetValue(uuid, out unit)) { squad.Add(unit); } else { throw new Exception("Could Not Find A Unit With The Specified UUID"); } } } return(team); }