Example #1
0
    /// [NEW FOR ASSESSMENT 4]
    /// <summary>
    /// Sets the attacker.
    ///	also handles actions that need to happen when the attacker changes
    /// </summary>
    void setAttacker(CombatCharacter character)
    {
        if (attacker == character)
        {
            return;
        }
        attacker = character;
        float val = Random.value;

        Debug.Log(val);
        if (val < attacker.attackFriendlyChance)
        {
            //select a random alive friendly character
            List <int> options = new List <int> ();
            for (int i = 0; i < frendlyChars.Count; i++)
            {
                if (frendlyChars [i].health > 0)
                {
                    options.Add(i);
                }
            }
            int toAttack = options [Random.Range(0, options.Count - 1)];
            //attack them
            attackTargets = new List <CombatCharacter> ();
            attackTargets.Add(frendlyChars [toAttack]);
            attack = attacker.basicAttack;
            attacker.updateEntityAnimation("move");
            currentStage = turnStages.moving;
        }
    }
Example #2
0
 //called in update() if the current stage is the selection stage
 void selectionStage()
 {
     if (!frendlyAttacking)
     {
         //TODO write better enemy combat logic
         int toAttack = CombatCharacter.getFirstAlive(defendChars);
         if (toAttack == -1)
         {
             lose();
         }
         else
         {
             attackTargets = new List <CombatCharacter> ();
             attackTargets.Add(defendChars [toAttack]);
             attack = attacker.basicAttack;
             attacker.updateEntityAnimation("move");
             currentStage = turnStages.moving;
         }
     }
     else
     {
         selectorRen.enabled            = true;
         selectorObj.transform.position = attacker.entity.transform.position;
     }
 }
Example #3
0
    //called in update() if the current stage is the target selection stage
    /// <summary>
    /// [EXTENSION Un-Two] Gorrila check added for target selection to allow randomisation for the gorilla
    void targetSelectionStage()
    {
        selectorRen.enabled = false;
        hideAbilities();
        if (attackTargets == null)
        {
            attackTargets = new List <CombatCharacter> ();
        }
        if (targetsRemaining == 0)
        {
            removeTargetSelectors();
            currentStage = turnStages.moving;
            attacker.updateEntityAnimation("move");
            return;
        }
        if (targetSelectorButtonObjs == null)
        {
            targetSelectorButtonObjs = new List <GameObject> ();
            List <CombatCharacter> selectableCharacters;
            if (attack.isAssist)
            {
                selectableCharacters = attackChars;
            }
            else if (attack.isGorrila)                 //[Un-Two] this statement detects if the attack is from the Gorrila and if it is will randomly select to target players or enemies
            {
                Debug.Log("Gorrila Attack");
                if (Random.Range(0, 10) <= 3)
                {
                    Debug.Log("Hit Players");
                    selectableCharacters = attackChars;
                }
                else
                {
                    Debug.Log("Hit Enemies");
                    selectableCharacters = defendChars;
                }
            }
            else
            {
                selectableCharacters = defendChars;
            }

            foreach (CombatCharacter character in selectableCharacters)
            {
                if (character.isAlive())
                {
                    GameObject newButtonObj = Instantiate(canvasObj.transform.Find("ReferenceTargetButton").gameObject, canvasObj.transform);
                    newButtonObj.transform.position = character.entity.transform.position;
                    newButtonObj.SetActive(true);
                    targetSelectorButtonObjs.Add(newButtonObj);
                    UnityEngine.UI.Button newButton = newButtonObj.GetComponent <UnityEngine.UI.Button> ();
                    CombatCharacter       tempValue = character;               // necessary to deal with weird scoping
                    newButton.onClick.AddListener(delegate {
                        selectTarget(tempValue);
                    });
                }
            }
        }
    }
Example #4
0
 // function called when an abililty button on abilities panel is pressed
 /// <summary>
 /// [changes] - check that character has sufficient mana before launching attack
 ///              - this fixes error from crashing due to no mana
 /// </summary>
 void selectAbility(CombatAbility ability)
 {
     if (attacker.energy >= ability.energyCost)
     {
         attack           = ability;
         currentStage     = turnStages.targetSelection;
         targetsRemaining = attack.maxTargets;
     }
 }
Example #5
0
 // function to be called when the "attack" button is hit
 public void doAttack()
 {
     if (currentStage == turnStages.selecting && frendlyAttacking)
     {
         attack           = attacker.basicAttack;
         currentStage     = turnStages.targetSelection;
         targetsRemaining = attack.maxTargets;
     }
 }
Example #6
0
 //called in update() if the current stage is the attacking stage
 void attackingStage()     // TODO add animations and delays to attack stage
 {
     if (timer > 1f)
     {
         attack.doAbility(attackTargets, attacker);
         attackTargets = null;
         currentStage  = turnStages.returning;
         attacker.updateEntityAnimation("return");
     }
 }
Example #7
0
 //called in update() if the current stage is the attacking stage
 void attackingStage()
 {
     if (timer > 1f)
     {
         attack.doAbility(attackTargets, attacker);
         attackTargets = null;
         currentStage  = turnStages.returning;
         attacker.updateEntityAnimation("return");
     }
 }
Example #8
0
 //called in update() if the current stage is the movement stage
 void movingStage()
 {
     hideAbilities();
     selectorRen.enabled = false;
     if (attacker.entity.moveAttack())
     {
         attacker.updateEntityAnimation("attack");
         timer        = 0f;
         currentStage = turnStages.attacking;
     }
 }
Example #9
0
    //called in update() if the current stage is the target selection stage
    void targetSelectionStage()
    {
        selectorRen.enabled = false;
        hideAbilities();
        if (attackTargets == null)
        {
            attackTargets = new List <CombatCharacter> ();
        }
        if (targetsRemaining == 0)
        {
            removeTargetSelectors();
            currentStage = turnStages.moving;
            attacker.updateEntityAnimation("move");
            return;
        }
        if (targetSelectorButtonObjs == null)
        {
            targetSelectorButtonObjs = new List <GameObject> ();
            List <CombatCharacter> selectableCharacters;
            if (attack.isAssist)
            {
                selectableCharacters = attackChars;
            }
            else
            {
                selectableCharacters = defendChars;
            }

            foreach (CombatCharacter character in selectableCharacters)
            {
                if (character.isAlive())
                {
                    GameObject newButtonObj = Instantiate(canvasObj.transform.Find("ReferenceTargetButton").gameObject, canvasObj.transform);
                    newButtonObj.transform.position = character.entity.transform.position;
                    newButtonObj.SetActive(true);
                    targetSelectorButtonObjs.Add(newButtonObj);
                    UnityEngine.UI.Button newButton = newButtonObj.GetComponent <UnityEngine.UI.Button> ();
                    CombatCharacter       tempValue = character;               // necessary to deal with weird scoping
                    newButton.onClick.AddListener(delegate {
                        selectTarget(tempValue);
                    });
                }
            }
        }
    }
Example #10
0
    //called in update() if the current stage is the returning stage
    void returningStage()
    {
        if (CombatCharacter.getFirstAlive(frendlyChars) == -1)
        {
            lose();
        }
        if (CombatCharacter.getFirstAlive(enemyChars) == -1)
        {
            win();
        }

        if (attacker.entity.moveRest())
        {
            attacker.updateEntityAnimation("base");
            do
            {
                attackerPos++;
                if (attackerPos >= attackChars.Count)
                {
                    break;
                }
                attacker = attackChars[attackerPos];
            } while (!attacker.isAlive());

            if (attackerPos >= attackChars.Count)
            {
                frendlyAttacking = !frendlyAttacking;
                foreach (CombatCharacter character in defendChars)
                {
                    character.doEffects();
                }
                attackerPos = CombatCharacter.getFirstAlive(defendChars);
            }
            if (attackerPos == -1)
            {
                Debug.Log("somethings wrong, there's no one left to take a turn");
            }
            currentStage = turnStages.selecting;
        }
    }
Example #11
0
    float timer = 0f;     //timer used to time animations

    /// <summary>
    /// [EXTENSION] - Start playing battle music
    ///             - Explicity set character sprites and canvas to "Player" level
    /// </summary>
    void Start()
    {
        SoundManager.instance.playBGM("battle");
        canvasObj      = this.transform.parent.gameObject;
        WinPanel       = this.transform.parent.Find("WinPanel").gameObject;
        LosePanel      = this.transform.parent.Find("LosePanel").gameObject;
        abilitiesPanel = canvasObj.transform.Find("AbilitiesPanel").gameObject;
        state          = GameStateManager.getGameStateManager();

        //hide non combat objects in the scene
        sceneObjects = new List <GameObject> ();
        foreach (GameObject obj in GameObject.FindObjectsOfType <GameObject>())
        {
            if (obj.tag == "MainCamera")
            {
                canvasObj.GetComponent <Canvas> ().worldCamera      = obj.GetComponent <Camera> ();
                canvasObj.GetComponent <Canvas> ().sortingLayerName = "Player";
                startingCameraPosition = obj.transform.position;
                sceneCamera            = obj;
                obj.transform.position = new Vector3(0f, 0f, -10f);
            }
            else if (!obj.transform.IsChildOf(this.transform.parent) && obj.name != "AudioManager")
            {
                sceneObjects.Add(obj);
                obj.SetActive(false);
            }
        }
        List <GameObject> gameObjectsToLeaveActive = new List <GameObject> ();

        foreach (GameObject obj in sceneObjects)
        {
            if (obj.transform.IsChildOf(sceneCamera.transform))
            {
                gameObjectsToLeaveActive.Add(obj);
            }
            if (obj.tag == "GameStateManager")
            {
                gameObjectsToLeaveActive.Add(obj);
            }
        }
        foreach (GameObject obj in gameObjectsToLeaveActive)
        {
            sceneObjects.Remove(obj);
            obj.SetActive(true);
        }


        frendlyAttacking = true;
        attackerPos      = 0;
        currentStage     = turnStages.selecting;

        selectorObj         = new GameObject("Selector");
        selectorRen         = selectorObj.AddComponent(typeof(SpriteRenderer)) as SpriteRenderer;
        selectorRen.sprite  = Resources.Load <Sprite> ("Selector");
        selectorRen.enabled = false;

        GameObject combatEntityPrefab = Resources.Load <GameObject> ("CombatEntity");

        // create objects representing combatants
        Vector3 pos    = new Vector3(-4, 3);       // arbitrary start position
        Vector3 offset = new Vector3(0, -2);       // arbitrary offset

        foreach (CombatCharacter c in frendlyChars)
        {
            GameObject obj = GameObject.Instantiate(combatEntityPrefab, pos, new Quaternion());
            obj.GetComponent <SpriteRenderer> ().sortingLayerName = "Player";
            c.entity = obj.GetComponent <CombatEntity> ();
            c.entity.setupBars(false, true);
            c.updateEntityBars();
            c.updateEntityAnimation("base");
            pos += offset;
        }
        pos = new Vector3(4, 3);          // arbitrary start position
        foreach (CombatCharacter c in enemyChars)
        {
            GameObject obj = GameObject.Instantiate(combatEntityPrefab, pos, new Quaternion());
            obj.GetComponent <SpriteRenderer> ().sortingLayerName = "Player";
            c.entity = obj.GetComponent <CombatEntity> ();
            c.entity.setupBars(true, false);
            c.updateEntityBars();
            c.updateEntityAnimation("base");
            pos += offset;
        }
        attacker = frendlyChars [attackerPos];
    }
Example #12
0
 // called when a winning state is detected
 void win()
 {
     currentStage = turnStages.win;
 }
Example #13
0
 //called when a losing state is detected
 void lose()
 {
     currentStage = turnStages.lose;
     Debug.Log("You Lose! Now implement losing.");
 }
Example #14
0
 // function called when an abililty button on abilities panel is pressed
 void selectAbility(CombatAbility ability)
 {
     attack           = ability;
     currentStage     = turnStages.targetSelection;
     targetsRemaining = attack.maxTargets;
 }