Example #1
0
 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);
     }
 }
Example #2
0
        // 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);
        }
Example #3
0
        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);
        }
Example #4
0
 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;
 }
Example #10
0
 // 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;
 }
Example #11
0
 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);
     }
 }
Example #12
0
        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);
        }