示例#1
0
        /// <summary>
        /// Prepare this instance.
        /// Actions for key pressed and released event need to be declared here.
        /// </summary>
        protected override void Prepare()
        {
            // Set Key Actions.
            keyActions.Add(new KeyAction(Keys.Enter, pressed: () => { ChangeState(new TeamManageState(pressedKeys)); }));

            keyActions.Add(new KeyAction(Keys.E, pressed: InteractionButtonPressed));

            // Set movement actions.
            foreach (Keys moveKey in moveKeys.Keys)
            {
                keyActions.Add(new KeyAction(moveKey, pressed: () => { player.Walk(moveKeys[moveKey]); moveKeyStack.Push(moveKey); }));
            }

            // Set GUIs
            guiLayer = (GUILayer)Global.world.GetLayer("GUILayer");
            if (guiLayer.GetGUI <TeamManagement>() == null)
            {
                guiLayer.AddGUI(new TeamManagement("TeamManagement", null, 0, 288));
            }

            base.Prepare();
        }
示例#2
0
        public override void Update(GameTime gameTime)
        {
            if (transforming) // Starting
            {
                timespan++;
                if (timespan > TRANSFORMING_TIME)
                {
                    #region Summon Enemy and Hero objects.
                    foreach (Enemy enemy in combat.enemyFrontList)
                    {
                        EnemyObject enemyObject = new EnemyObject(0, 0, enemy, FighterState.Front, Global.soulBox.GetRandomHeros(1, enemy.soulCount));
                        guiLayer.AddGUI(new EnemyGages(enemy.name + "Gages", null, enemyObject));
                        stage.AddFighterObject(enemyObject);
                    }
                    foreach (Enemy enemy in combat.enemyBehindList)
                    {
                        EnemyObject enemyObject = new EnemyObject(0, 0, enemy, FighterState.Behind, Global.soulBox.GetRandomHeros(1, enemy.soulCount));
                        guiLayer.AddGUI(new EnemyGages(enemy.name + "Gages", null, enemyObject));
                        stage.AddFighterObject(enemyObject);
                    }
                    foreach (Hero hero in player.heros)
                    {
                        if (hero.defaultFighterState == FighterState.Stored)
                        {
                            continue;
                        }
                        HeroObject heroObject = new HeroObject(0, 0, hero);
                        guiLayer.AddGUI(new HeroGages(hero.name + "Gages", null, heroObject));
                        stage.AddFighterObject(heroObject);
                    }
                    SetFighterObjects();
                    #endregion
                    #region Set Selector
                    int i = 0;
                    foreach (ISelectable element in actionMenu.GetChild())
                    {
                        selector.SetItemToMatrix("ActionMenuGroup", element, i++, 0);
                    }
                    selector.SetItemToMatrix("ActionSelectGroup", actionSelect, 0, 0);

                    SetFighterGroupMatrix();
                    #endregion

                    transforming = false;
                    timePaused   = false;
                }
                else
                {
                    Global.camera.offsetY += (float)PLAYEROFFSET_Y / TRANSFORMING_TIME;
                }
            }
            else // Battle Started.
            {
                if (timePaused)
                {
                    // If targetBuffer is filled, do current action.
                    if (targetBuffer.Count > 0 && targetBufferFilled)
                    {
                        currentAction?.Execute(stage, actingFighterObject, targetBuffer, SummonFighterObject);
                        actionMenu.Deactivate();
                        actionSelect.Deactivate();
                        instruction.Deactivate();
                        selector.Reset();
                        targetBufferFilled = false;
                        return;
                    }
                    KeyCheck();
                }
                else
                {
                    // Buff trigger check.
                    foreach (FighterObject fighterObject in stage)
                    {
                        foreach (Buff buff in fighterObject.buffList)
                        {
                            string method = buff.TriggerCheck();
                            if (method != "")
                            {
                                readiedBuff.Enqueue(new BuffAction(buff, method));
                            }
                        }
                    }

                    if (readiedBuff.Count > 0)
                    {
                        timePaused = true;
                        BuffAction buffAction = readiedBuff.Dequeue();

                        switch (buffAction.method)
                        {
                        case "Start": buffAction.buff.Start(SummonFighterObject); break;

                        case "Finish": buffAction.buff.Finish(SummonFighterObject); break;

                        case "Attack": buffAction.buff.Attack(SummonFighterObject); break;

                        case "Hit": buffAction.buff.Hit(SummonFighterObject); break;

                        case "Ready": buffAction.buff.Ready(SummonFighterObject); break;

                        case "Tick": buffAction.buff.Tick(SummonFighterObject); break;
                        }
                    }
                    else if (readiedFighterObjects.Count > 0)
                    {
                        timePaused          = true;
                        actingFighterObject = readiedFighterObjects.Dequeue();
                        // Check if fighter is paused.
                        while (actingFighterObject.paused)
                        {
                            actingFighterObject = readiedFighterObjects.Dequeue();
                        }

                        if (actingFighterObject.fighter is Hero)
                        {
                            ActionMenuEnable((HeroObject)actingFighterObject);
                        }

                        if (actingFighterObject is EnemyObject)
                        {
                            EnemySkill enemySkill = ((EnemyObject)actingFighterObject).GetAction();
                            enemySkill.Execute(stage, actingFighterObject, enemySkill.SelectTarget(stage), SummonFighterObject);
                        }
                    }
                    else // Time goes here.
                    {
                        foreach (FighterObject fighterObject in stage)
                        {
                            if (fighterObject == null)
                            {
                                continue;
                            }

                            if (fighterObject.IncreaseGage(60))
                            {
                                readiedFighterObjects.Enqueue(fighterObject);
                            }

                            foreach (Buff buff in fighterObject.buffList)
                            {
                                buff.Update(gameTime);
                            }
                        }
                    }
                }
            }
            base.Update(gameTime);
        }
 public InteractionState(List <Keys> pressedKeys, Interaction interaction) : base(pressedKeys)
 {
     this.interaction = interaction;
     guiLayer         = (GUILayer)Global.world.GetLayer("GUILayer");
     guiLayer.AddGUI(interaction.InteractionTextbox);
 }
示例#4
0
        protected override void Prepare()
        {
            timespan        = 0;
            transforming    = true;
            timePaused      = true;
            player          = Global.world.GetPlayer();
            guiLayer        = (GUILayer)Global.world.GetLayer("GUILayer");
            gameObjectLayer = (GameObjectLayer)Global.world.GetLayer("GameObjectLayer");
            topEffectLayer  = (EffectLayer)Global.world.GetLayer("TopEffectLayer");

            targetBuffer          = new List <FighterObject>();
            readiedFighterObjects = new Queue <FighterObject>();
            readiedBuff           = new Queue <BuffAction>();
            deadEnemyObjects      = new List <EnemyObject>();

            player.Look(Direction.Up);
            player.Stand();

            guiLayer.RemoveGUI("TeamManagement");
            actionMenu = new ActionMenu("ActionMenu", null, MENUSTART_X, MENUSTART_Y);
            actionMenu.Deactivate();
            guiLayer.AddGUI(actionMenu);
            actionSelect = new ActionSelect("ActionSelect", null, SELECTSTART_X, MENUSTART_Y, null);
            actionSelect.Deactivate();
            guiLayer.AddGUI(actionSelect);
            instruction = new Label("Instruction", null, INSTRUCTION_X, INSTRUCTION_Y, "Select Target", Color.White,
                                    512, Global.content.Load <SpriteFont>("neodgm24"), AlignType.Top, AlignType.Center);
            instruction.Deactivate();
            guiLayer.AddGUI(instruction);

            stage    = new BattleStage();
            selector = new Selector(mirrorMode: true);
            selector.CreateNewMatrix("ActionMenuGroup", 1, 5);
            selector.CreateNewMatrix("ActionSelectGroup", 1, 1);
            selector.CreateNewMatrix("FighterGroup", Global.Properties.FIGHTER_IN_ROW, 4); // Two for NullFighterObject.

            // Key setting
            keyActions.Add(new KeyAction(Keys.W, pressed: () => { selector.SelectNext(Direction.Up); }));
            keyActions.Add(new KeyAction(Keys.S, pressed: () => { selector.SelectNext(Direction.Down); }));
            keyActions.Add(new KeyAction(Keys.A, pressed: () =>
            {
                if (selector.matrixName == "ActionSelectGroup")
                {
                    actionSelect.Next(Direction.Left);
                }
                else
                {
                    selector.SelectNext(Direction.Left);
                }
            }));
            keyActions.Add(new KeyAction(Keys.D, pressed: () =>
            {
                if (selector.matrixName == "ActionSelectGroup")
                {
                    actionSelect.Next(Direction.Right);
                }
                else
                {
                    selector.SelectNext(Direction.Right);
                }
            }));
            keyActions.Add(new KeyAction(Keys.E, pressed: () => { selector.SelectAction(); }));
            keyActions.Add(new KeyAction(Keys.Q, pressed: () => { Rewind(); }));


            base.Prepare();
        }