/// <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(); }
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); }
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(); }