Beispiel #1
0
    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;
        }
    }
Beispiel #2
0
    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();
        }
    }
Beispiel #3
0
    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();
        }
    }
Beispiel #4
0
    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();
        }
    }
Beispiel #5
0
    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);
    }
Beispiel #6
0
	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();
		}
	}
Beispiel #7
0
	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();
		}

		
	}
Beispiel #8
0
	/// <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);
Beispiel #9
0
 /// <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);
Beispiel #10
0
	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;
		}

	}
Beispiel #11
0
	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();
			
		}

		
	}