コード例 #1
0
ファイル: BattleTest.cs プロジェクト: kyapp69/XposeCraft
 void ScheduleTacticsWhenLowHp()
 {
     GameEvent.Register(GameEventType.UnitReceivedFire, args =>
     {
         // If attacking, run away
         if (args.MyUnit.ActionQueue.CurrentAction is Attack ||
             args.MyUnit.ActionQueue.CurrentAction is AttackMove)
         {
             UnitActionQueue oldActions = args.MyUnit.ActionQueue;
             if (args.MyUnit.Health < args.MyUnit.MaxHealth / 2)
             {
                 // Any unit of course exposes its position in form of coordinates; MyBotData contains data
                 args.MyUnit.MoveTo(MyBotData.HealMeetPointUnit.Position);
                 BotRunner.Log("Unit " + args.MyUnit + " is waiting to be healed");
                 MyBotData.MeetPointEvent = GameEvent.Register(GameEventType.UnitGainedHealth,
                                                               argsB => { argsB.MyUnit.ActionQueue = oldActions; });
             }
         }
         // If hiding, defend
         else if (args.EnemyUnits.Length > 0)
         {
             EnqueueFirst(new Attack(args.EnemyUnits[0]), args.MyUnit);
         }
     });
 }
コード例 #2
0
 /// <summary>
 /// Send the Worker to gather a resource.
 /// <see cref="XposeCraft.Game.Helpers.ResourceHelper"/> provides various methods to find some.
 /// </summary>
 /// <param name="resource">Resource to be gathered.</param>
 public UnitActionQueue SendGather(IResource resource)
 {
     if (resource != null)
     {
         Tutorial.Instance.SendGather();
     }
     return(ActionQueue = new UnitActionQueue(new GatherResource(resource)));
 }
コード例 #3
0
 void ScheduleTacticsWhenLowHp()
 {
     Event.Register(EventType.UnitReceivedFire, args =>
     {
         UnitActionQueue oldActions = args.MyUnit.ActionQueue;
         if (args.MyUnit.Health < args.MyUnit.MaxHealth / 2)
         {
             // Any unit of course exposes its position in form of coordinates; MyBot is custom player’s class
             args.MyUnit.MoveTo(MyBot.HealMeetPointUnit.Position);
             MyBot.MeetPointEvent = Event.Register(EventType.UnitGainedHealth,
                                                   argsB => { argsB.MyUnit.ReplaceActionQueue(oldActions); });
         }
     });
 }
コード例 #4
0
ファイル: BattleTest.cs プロジェクト: kyapp69/XposeCraft
        public void BattleStage(Action startNextStage)
        {
            // Plan individual unit attacks or a return when meeting too many units
            GameEvent.Register(GameEventType.EnemyUnitsOnSight, args =>
            {
                if (args.EnemyUnits.Length > UnitHelper.GetMyUnits <IUnit>().Length)
                {
                    // Too many enemies, return back
                    foreach (IUnit unit in UnitHelper.GetMyUnits <IUnit>())
                    {
                        unit.MoveTo(PlaceType.MyBase.Center);
                    }
                }
                else
                {
                    UnitActionQueue queue = new UnitActionQueue();
                    foreach (IUnit enemy in args.EnemyUnits)
                    {
                        queue.After(new Attack(enemy));
                    }
                    foreach (IUnit unit in UnitHelper.GetMyUnits <IUnit>())
                    {
                        unit.ActionQueue = queue;
                    }
                }
            });

            // Initiate the attack
            GoAttack();
            // When the units get to low health, they will return back to heal
            ScheduleTacticsWhenLowHp();
            // Stores enemies for later possible calculations
            RememberEnemies();
            // Destroys buildings when possible, should be preferable contitioned
            DestroyBuildings();
        }
コード例 #5
0
 // TODO: deprecate in favor of equals operator?
 public UnitActionQueue ReplaceActionQueue(UnitActionQueue queue)
 {
     return(ActionQueue = queue);
 }
コード例 #6
0
ファイル: Unit.cs プロジェクト: kyapp69/XposeCraft
 public UnitActionQueue Attack(IUnit unit)
 {
     return(ActionQueue = new UnitActionQueue(new Attack(unit)));
 }
コード例 #7
0
ファイル: Unit.cs プロジェクト: kyapp69/XposeCraft
 public UnitActionQueue AttackMoveTo(Position position)
 {
     return(ActionQueue = new UnitActionQueue(new AttackMove(position)));
 }
コード例 #8
0
ファイル: Unit.cs プロジェクト: kyapp69/XposeCraft
 public UnitActionQueue Attack(IBuilding building)
 {
     return(ActionQueue = new UnitActionQueue(new Attack(building)));
 }
コード例 #9
0
 private void StopGathering()
 {
     // This is deprecated and all using functions should be converted to GameActions
     ActionQueue = new UnitActionQueue();
     Gathering   = null;
 }