public override void Attack(PlayerAttack attack, BattleCombatant target) { currentAttack = attack; currentAttackTarget = target; if (attack.Name == "Fried Chicken Smoothie") { anim.Play("Jumping"); playSound(healSound); currentAttackTarget.Heal(); } else if (attack.Name == "All-Purpose Slice") { initialPosition = transform.position; AnimationInProgress = true; currentAnimation = AnimationSequence.JumpForward; attackAnimationState = AttackAnimationState.NeedsToStart; } else if (attack.Name == "Sales Pitch") { initialPosition = transform.position; AnimationInProgress = true; currentAnimation = AnimationSequence.SalesPitch; attackAnimationState = AttackAnimationState.NeedsToStart; } }
public override void Attack(PlayerAttack attack, BattleCombatant target) { currentAttack = attack; currentAttackTarget = target; if (attack.Name == "Slam Dunk") { AnimationInProgress = true; currentAnimation = AnimationSequence.PreparingToSlam; attackAnimationState = AttackAnimationState.NeedsToStart; } else if (attack.Name == "Gatorade\u2122 Sports Drink") { playSound(healSound); currentAttackTarget.Heal(); } }
public override void Attack(PlayerAttack attack, BattleCombatant target) { currentAttack = attack; currentAttackTarget = target; if (attack.Name == "Gas Blast") { initialPosition = transform.position; AnimationInProgress = true; currentAnimation = AnimationSequence.FlyingTowardsTarget; attackAnimationState = AttackAnimationState.NeedsToStart; } else if (attack.Name == "Can of Beans") { playSound(HealSound); currentAttackTarget.Heal(); } }
public override void OnGUI() { base.OnGUI(); // if the battle has started... if (battleEnabled) { // enforce 16:9 aspect ratio GUILayout.BeginArea(AspectUtility.screenRect); // draw the player combatants' data drawPlayerInfo(); if (isPlayerTurn()) { PlayerCombatant currentPlayer = (PlayerCombatant)PlayerCombatants[currentTurn]; switch (turnState) { case BattleTurnState.Attacking: selectedAttack = getSelectedAttack(); if (selectedAttack != null) { currentButtonSelection = 0; turnState = BattleTurnState.Targeting; } checkKeyControlFocus(); break; case BattleTurnState.Targeting: selectedTarget = getSelectedTarget(selectedAttack); if (selectedTarget != null) { currentButtonSelection = 0; currentPlayer.Attack(selectedAttack, selectedTarget); currentPlayer.IncrementTurnCounter(); turnState = BattleTurnState.WaitingForAnimation; } checkKeyControlFocus(); break; case BattleTurnState.WaitingForAnimation: // has the player's animation finished? if (!PlayerCombatants[currentTurn].AnimationInProgress) { turnState = BattleTurnState.TurnComplete; } break; } } else // otherwise it is an enemy's turn { EnemyCombatant currentEnemy = (EnemyCombatant)EnemyCombatants[currentTurn - PlayerCombatants.Count]; switch (turnState) { case BattleTurnState.Attacking: if (!currentEnemy.isSleeping) { currentEnemy.AutoAttack(PlayerCombatants); } currentEnemy.IncrementTurnCounter(); turnState = BattleTurnState.WaitingForAnimation; break; case BattleTurnState.WaitingForAnimation: // if the enemy attack has finished... if (Event.current.type == EventType.Repaint && !currentEnemy.AnimationInProgress) { turnState = BattleTurnState.TurnComplete; } break; } } if (turnState == BattleTurnState.TurnComplete) { // if the turn has completed, check if anyone won checkForVictory(); // reset turn state turnState = BattleTurnState.Attacking; //...and then increment the turn. incrementTurn(); // notify registered listeners of the turn change // note: this is not inside incrementTurn due to recursion if (OnBattleEvent != null) { OnBattleEvent(BattleEvent.TurnChange); } } GUILayout.EndArea(); } }
private BattleCombatant getSelectedTarget(PlayerAttack chosenAttack) { BattleCombatant chosenTarget = null; bool targetingCancelled = false; List <BattleCombatant> availableTargets; //used for the keyboard controls List <BattleCombatant> attackableTargets = new List <BattleCombatant>(); if (chosenAttack.Type == AttackType.Heal) { // if it's a healing move, then target the current combatant // but also offer revivals to dead combatants availableTargets = new List <BattleCombatant>(); availableTargets.Add((BattleCombatant)PlayerCombatants[currentTurn]); availableTargets.AddRange(PlayerCombatants.FindAll((BattleCombatant c) => c.HitPoints == 0)); } else { // if it's an attack/status move, show the list of enemies availableTargets = EnemyCombatants.FindAll((BattleCombatant c) => c.participatingInBattle); } int areaHeight = scalePx(120 + 30 * availableTargets.Count); GUILayout.BeginArea(new Rect(0, 0, scalePx(330), areaHeight), guiSkin.customStyles [0]); GUILayout.Label("<b>" + chosenAttack.Name + "</b>"); GUILayout.Label(chosenAttack.Description, guiSkin.customStyles[2]); GUILayout.Label("SELECT TARGET", guiSkin.customStyles [3]); BattleCombatant availableTarget; string status; int currentButtonNum = 0; for (int i = 0; i < availableTargets.Count; i++) { availableTarget = availableTargets [i]; status = ((int)Mathf.Round(availableTarget.HitPoints / (float)availableTarget.MaxHitPoints * 100)) + "%"; bool isTargetable = true; if (availableTarget.HitPoints == 0 || availableTarget.isShielded || (chosenAttack.Type == AttackType.Damage && availableTarget.immuneToDamage) || (chosenAttack.Type == AttackType.Heal && availableTarget.HitPoints == availableTarget.MaxHitPoints)) { isTargetable = false; if (availableTarget.isShielded) { status = "Shielded"; } else if (availableTarget.immuneToDamage) { status = "Immune"; } else if (availableTarget.HitPoints == 0 && chosenAttack.Type == AttackType.Heal) { status = "Revive"; isTargetable = true; } } if (availableTarget.isSleeping) { status += ", Sleeping"; } if (isTargetable) { attackableTargets.Add(availableTarget); } // grey out the button if the target is already dead if (!isTargetable) { GUI.enabled = false; } else { GUI.SetNextControlName(currentButtonNum.ToString()); currentButtonNum++; } if (GUILayout.Button("<b>" + availableTarget.getName() + "</b> (" + status + ")")) { chosenTarget = availableTarget; } // now highlight the selected target foreach (BattleCombatant t in availableTargets) { SpriteRenderer r = t.GetComponent <SpriteRenderer>(); if (r != null) { r.color = new Color(1, 1, 1, 0.5f); } } if (currentButtonSelection < attackableTargets.Count) { SpriteRenderer r = attackableTargets[currentButtonSelection].GetComponent <SpriteRenderer>(); if (r != null) { r.color = new Color(1, 1, 1, 1f); } } // if the target is dead, undo the greyout state we enabled above if (!isTargetable) { GUI.enabled = true; } } GUI.SetNextControlName(currentButtonNum.ToString()); if (GUILayout.Button("Cancel", GUILayout.ExpandWidth(false))) { targetingCancelled = true; //set the turn state back to attacking, which will take effect on the next loop turnState = BattleTurnState.Attacking; currentButtonSelection = 0; } numberOfButtonsVisible = currentButtonNum + 1; GUILayout.EndArea(); // unity doesn't count gamepad presses as "clicks", so we need to fake it: if (Event.current.keyCode == KeyCode.Space) { buttonKeyDown = true; } else if (input1IsDown && buttonKeyDown == false) { if (currentButtonSelection == attackableTargets.Count) { // if the cancel button is selected targetingCancelled = true; turnState = BattleTurnState.Attacking; } else { chosenTarget = attackableTargets[currentButtonSelection]; } buttonKeyDown = true; currentButtonSelection = 0; } else { buttonKeyDown = false; } //now check for the escape key if (input2IsDown) { targetingCancelled = true; turnState = BattleTurnState.Attacking; currentButtonSelection = 0; } if (chosenTarget != null || targetingCancelled) { foreach (BattleCombatant t in availableTargets) { SpriteRenderer r = t.GetComponent <SpriteRenderer>(); if (r != null) { r.color = new Color(1, 1, 1, 1f); } } } return(chosenTarget); }
public override void OnGUI () { base.OnGUI(); // if the battle has started... if(battleEnabled) { // enforce 16:9 aspect ratio GUILayout.BeginArea(AspectUtility.screenRect); // draw the player combatants' data drawPlayerInfo(); if(isPlayerTurn()) { PlayerCombatant currentPlayer = (PlayerCombatant)PlayerCombatants[currentTurn]; switch(turnState) { case BattleTurnState.Attacking: selectedAttack = getSelectedAttack(); if(selectedAttack != null) { currentButtonSelection = 0; turnState = BattleTurnState.Targeting; } checkKeyControlFocus(); break; case BattleTurnState.Targeting: selectedTarget = getSelectedTarget(selectedAttack); if(selectedTarget != null) { currentButtonSelection = 0; currentPlayer.Attack (selectedAttack, selectedTarget); currentPlayer.IncrementTurnCounter(); turnState = BattleTurnState.WaitingForAnimation; } checkKeyControlFocus(); break; case BattleTurnState.WaitingForAnimation: // has the player's animation finished? if(!PlayerCombatants[currentTurn].AnimationInProgress) { turnState = BattleTurnState.TurnComplete; } break; } } else { // otherwise it is an enemy's turn EnemyCombatant currentEnemy = (EnemyCombatant)EnemyCombatants[currentTurn - PlayerCombatants.Count]; switch(turnState) { case BattleTurnState.Attacking: if(!currentEnemy.isSleeping) { currentEnemy.AutoAttack(PlayerCombatants); } currentEnemy.IncrementTurnCounter(); turnState = BattleTurnState.WaitingForAnimation; break; case BattleTurnState.WaitingForAnimation: // if the enemy attack has finished... if(Event.current.type == EventType.Repaint && !currentEnemy.AnimationInProgress) { turnState = BattleTurnState.TurnComplete; } break; } } if(turnState == BattleTurnState.TurnComplete) { // if the turn has completed, check if anyone won checkForVictory(); // reset turn state turnState = BattleTurnState.Attacking; //...and then increment the turn. incrementTurn(); // notify registered listeners of the turn change // note: this is not inside incrementTurn due to recursion if(OnBattleEvent != null) { OnBattleEvent(BattleEvent.TurnChange); } } GUILayout.EndArea(); } }
public override void Attack(PlayerAttack attack, BattleCombatant target) { currentAttack = attack; currentAttackTarget = target; if(attack.Name == "Slam Dunk") { AnimationInProgress = true; currentAnimation = AnimationSequence.PreparingToSlam; attackAnimationState = AttackAnimationState.NeedsToStart; } else if(attack.Name == "Gatorade\u2122 Sports Drink") { playSound(healSound); currentAttackTarget.Heal(); } }
/// <summary> /// Attack using the specified attack and target. /// Performs any needed animations and sounds, and also /// applies damage to target. /// </summary> /// <param name="attack">The attack to use</param> /// <param name="attack">The target</param> abstract public void Attack (PlayerAttack attack, BattleCombatant target);
/// <summary> /// Attack using the specified attack and target. /// Performs any needed animations and sounds, and also /// applies damage to target. /// </summary> /// <param name="attack">The attack to use</param> /// <param name="attack">The target</param> abstract public void Attack(PlayerAttack attack, BattleCombatant target);
public override void Attack(PlayerAttack attack, BattleCombatant target) { currentAttack = attack; currentAttackTarget = target; if(attack.Name == "Fried Chicken Smoothie") { anim.Play("Jumping"); playSound(healSound); currentAttackTarget.Heal(); } else if(attack.Name == "All-Purpose Slice") { initialPosition = transform.position; AnimationInProgress = true; currentAnimation = AnimationSequence.JumpForward; attackAnimationState = AttackAnimationState.NeedsToStart; } else if(attack.Name == "Sales Pitch") { initialPosition = transform.position; AnimationInProgress = true; currentAnimation = AnimationSequence.SalesPitch; attackAnimationState = AttackAnimationState.NeedsToStart; } }
public override void Attack(PlayerAttack attack, BattleCombatant target) { currentAttack = attack; currentAttackTarget = target; if(attack.Name == "Gas Blast") { initialPosition = transform.position; AnimationInProgress = true; currentAnimation = AnimationSequence.FlyingTowardsTarget; attackAnimationState = AttackAnimationState.NeedsToStart; } else if(attack.Name == "Can of Beans") { playSound(HealSound); currentAttackTarget.Heal(); } }