View Single Post
  #5  
Old 04-26-2012, 11:19 AM
FG28_Kodiak FG28_Kodiak is offline
Senior Member
 
Join Date: Dec 2009
Location: Swabia->Bavaria->Germany
Posts: 884
Default

for example:
Code:
using System;
using System.Collections;
using System.Collections.Generic;
using maddox.game;
using maddox.game.world;


public class Mission : AMission
{

    List<AiAircraft> enemyAircraftsInGame = new List<AiAircraft>();
    const int EnemyArmy = 1; // reds are enemy change to 2 for blues
    const int MinNumberEnemyPlanesAlive = 1; // number of enemy planes left before creating new airgroup 

    private Queue<string> ActionQueue = new Queue<string>(new string[] { "createAnsons", "createSpits1", "createBlenheims", "createSpits2", "createMosquitos", "createSpits3"});


    public override void OnBattleStarted()
    {
        base.OnBattleStarted();

        MissionNumberListener = -1;
    }


    public override void OnActorCreated(int missionNumber, string shortName, AiActor actor)
    {
        base.OnActorCreated(missionNumber, shortName, actor);

        if (actor is AiAircraft && actor.Army() == EnemyArmy)
            enemyAircraftsInGame.Add(actor as AiAircraft);
    }


    public override void OnAircraftKilled(int missionNumber, string shortName, AiAircraft aircraft)
    {
        base.OnAircraftKilled(missionNumber, shortName, aircraft);

        enemyAircraftsInGame.RemoveAll(item => item == aircraft);

        if (enemyAircraftsInGame.Count <= MinNumberEnemyPlanesAlive)
        {
            string actionName = ActionQueue.Dequeue();
            ActionQueue.Enqueue(actionName);

            AiAction action = GamePlay.gpGetAction(actionName);
            if (action != null) action.Do();


            actionName = ActionQueue.Dequeue();
            ActionQueue.Enqueue(actionName);

            action = GamePlay.gpGetAction(actionName);
            if (action != null) action.Do();


        }
    }


    public override void OnActorDead(int missionNumber, string shortName, AiActor actor, List<DamagerScore> damages)
    {
        base.OnActorDead(missionNumber, shortName, actor, damages);


        if (actor is AiAircraft)
        {
            enemyAircraftsInGame.RemoveAll(item => item == actor as AiAircraft);

            if (enemyAircraftsInGame.Count <= MinNumberEnemyPlanesAlive)
            {
                string actionName = ActionQueue.Dequeue();
                ActionQueue.Enqueue(actionName);

                AiAction action = GamePlay.gpGetAction(actionName);
                if (action != null) action.Do();


                actionName = ActionQueue.Dequeue();
                ActionQueue.Enqueue(actionName);

                action = GamePlay.gpGetAction(actionName);
                if (action != null) action.Do();


            }
        }
    }


    public override void OnPlaceLeave(Player player, AiActor actor, int placeIndex)
    {
        base.OnPlaceLeave(player, actor, placeIndex);

        if (IsActorDestroyable(actor))
            if (actor is AiCart)
                (actor as AiCart).Destroy();
    }


    private bool IsActorDestroyable(AiActor actor)
    {
        bool actorDestroyable = true;

        //Check if actor is empty (no Player)
        if (actor is AiAircraft)
        {
            if ((actor as AiAircraft).ExistCabin(0))
                for (int i = 0; i < (actor as AiAircraft).Places(); i++)
                {
                    if ((actor as AiAircraft).Player(i) != null)
                    {
                        actorDestroyable = false;
                        break;
                    }
                }
        }
        else if (actor is AiGroundActor)
        {
            if ((actor as AiGroundActor).ExistCabin(0))
                for (int i = 0; i < (actor as AiGroundActor).Places(); i++)
                {
                    if ((actor as AiGroundActor).Player(i) != null)
                    {
                        actorDestroyable = false;
                        break;
                    }
                }
        }

        return actorDestroyable;
    }

}
added the Action Names for Fighter spawn to the Queue.
First is Bomber, second is fighter.

then i modify the
Code:
 if (enemyAircraftsInGame.Count <= MinNumberEnemyPlanesAlive)
        {
            string actionName = ActionQueue.Dequeue();
            ActionQueue.Enqueue(actionName);

            AiAction action = GamePlay.gpGetAction(actionName);
            if (action != null) action.Do();


            actionName = ActionQueue.Dequeue();
            ActionQueue.Enqueue(actionName);

            action = GamePlay.gpGetAction(actionName);
            if (action != null) action.Do();


        }
so it reads the action two times from the Queue. First creates the bombers the second the fighters or vice versa, depens on the actions you created.
Reply With Quote