Пример #1
0
    // Use this for initialization
    void Awake()
    {
        frank = new MoveClass[] { new MoveClass("Light Attack", 2, new int[] { 1 }, 1, 1, 0, .5f, 5, .4f),
                                  new MoveClass("Medium Attack", 4, new int[] { 1, 2 }, 1, 0, 0, .8f, 7, .8f),
                                  new MoveClass("Heavy Attack", 7, new int[] { 3 }, 1, 0, 0, .4f, 9, .7f),
                                  new MoveClass("Fireball", 9, new int[] { 3 }, 0, -1, 0, .75f, 8, .75f),
                                  new MoveClass("Dino-Punch", 8, new int[] { 1, 2, 3 }, -1, -3, 1, .4f, 15, 0),
                                  new MoveClass("Throw", 5, new int[] { 1 }, 0, -10, 1, .6f, 12, 0),
                                  new MoveClass("Air Attack", 2, new int[] { 1, 2 }, 2, 3, -1, .4f, 8, 0),
                                  new MoveClass("Forward Dash", 3, new int[0], 0, 0, 0, 0, 0, 0),
                                  new MoveClass("Back Dash", 5, new int[1] {
                1
            }, 0, 0, 0, 0, 0, 0) };

        speedy = new MoveClass[] { new MoveClass("Light Attack", 2, new int[] { 1 }, 0, 1, 1, .6f, 4, .5f),
                                   new MoveClass("Medium Attack", 3, new int[] { 1 }, 1, 0, -1, .9f, 6, .7f),
                                   new MoveClass("Heavy Attack", 6, new int[] { 2 }, 0, -1, 0, 1.1f, 10, .3f),
                                   new MoveClass("Dash Peck", 9, new int[] { 3 }, 0, -1, 0, .4f, 8, .75f),
                                   new MoveClass("Divekick", 4, new int[] { 1, 2, 3, 4 }, 1, 1, 0, .3f, 7, 0),
                                   new MoveClass("Throw", 5, new int[] { 1 }, 0, -10, 1, .6f, 182, 0),
                                   new MoveClass("Air Attack", 3, new int[] { 2, 3 }, 2, 2, 0, .3f, 8, 0),
                                   new MoveClass("Forward Dash", 3, new int[] { 0 }, 0, 0, 0, 0, 0, 0),
                                   new MoveClass("Back Dash", 5, new int[] { 0 }, 0, 0, 0, 0, 0, 0) };

        king = new MoveClass[] { new MoveClass("Light Attack", 2, new int[] { 1 }, 1, 0, 0, .6f, 6, .5f),
                                 new MoveClass("Medium Attack", 3, new int[] { 2 }, 1, 1, 1, .9f, 6, .7f),
                                 new MoveClass("Heavy Attack", 5, new int[] { 2 }, -2, -1, 0, .8f, 10, -1),
                                 new MoveClass("Tyrant Smash", 6, new int[] { 2 }, 0, -2, 0, 1f, 12, 1),
                                 new MoveClass("SPD", 7, new int[] { 1 }, 0, 1, -10, .3f, 18, 0),
                                 new MoveClass("Throw", 5, new int[] { 1 }, 0, -10, 1, .6f, 12, 0),
                                 new MoveClass("Air Attack", 2, new int[] { 1, 2 }, 3, 3, 0, .6f, 12, 0),
                                 new MoveClass("Forward Dash", 3, new int[] { 0 }, 0, 0, 0, 0, 0, 0),
                                 new MoveClass("Back Dash", 5, new int[] { 0 }, 0, 0, 0, 0, 0, 0) };
    }
Пример #2
0
 public UseMoveAction(BattleState state, MoveClass move)
 {
     State         = state;
     Move          = move;
     AttackingDelt = IsPlayer ? state.PlayerState.DeltInBattle : state.OpponentState.DeltInBattle;
     DefendingDelt = IsPlayer ? state.OpponentState.DeltInBattle : state.PlayerState.DeltInBattle;
 }
Пример #3
0
        private MoveTypeE(MoveType move, string str)
        {
            Move = move;
            var s = str.Split('\t');

            //Lv7DChange			SpAtk	SpDef	Speed	2	2	2	0	0	0	0	0	0	0	0
            //AttackWithState	PAR	100								1	1	0	0	1	0	0
            Class = (MoveClass)Enum.Parse(typeof(MoveClass), s[0]);
            if (!string.IsNullOrEmpty(s[1]))
            {
                AttachedState       = (AttachedState)Enum.Parse(typeof(AttachedState), s[1]);
                AttachedProbability = int.Parse(s[2]);
            }
            if (!string.IsNullOrEmpty(s[3]))
            {
                var t1 = (StatType)Enum.Parse(typeof(StatType), s[3]);
                var t2 = string.IsNullOrEmpty(s[4]) ? StatType.Invalid : (StatType)Enum.Parse(typeof(StatType), s[4]);
                var t3 = string.IsNullOrEmpty(s[5]) ? StatType.Invalid : (StatType)Enum.Parse(typeof(StatType), s[5]);
                Lv7DChanges = new MoveLv7DChanges(t1, t2, t3, int.Parse(s[6]), string.IsNullOrEmpty(s[7]) ? 0 : int.Parse(s[7]), string.IsNullOrEmpty(s[8]) ? 0 : int.Parse(s[8]), int.Parse(s[9]));
            }
            NeedTouch        = s[10][0] == '1';
            Protectable      = s[11][0] == '1';
            MagicCoat        = s[12][0] == '1';
            Snatchable       = s[13][0] == '1';
            Mirrorable       = s[14][0] == '1';
            IsRemote         = s[15][0] == '1';
            IgnoreSubstitute = s[16][0] == '1';
        }
Пример #4
0
        void TryLearnNewMove(DeltemonClass delt)
        {
            // If Delt can learn a new move
            LevelUpMove newMove = delt.deltdex.levelUpMoves.Find(lum => lum.level == delt.level);

            if (newMove == null)
            {
                return;
            }

            // If the player doesn't have a full moveset yet
            if (delt.moveset.Count < 4)
            {
                // Instantiate and learn new move
                MoveClass move = BattleManager.Inst.InstantiateMove(newMove.move, delt.transform);
                delt.moveset.Add(move);

                BattleManager.AddToBattleQueue(string.Format("{0} has learned the move {1}!", delt.nickname, newMove.move.moveName));
            }
            // Player must choose to either switch a move or not learn new move
            else
            {
                BattleManager.Inst.BattleUI.PresentNewMoveUI(delt);
                BattleManager.AddToBattleQueue(string.Format("{0} can learn the move {1}!", delt.nickname, newMove.move.moveName));

                // Load new move into move overview
                // Note: This temporarily sets move as 5th move in Delt moveset
                UIManager.Inst.PosseUI.SetLevelUpMove(newMove.move, delt);

                // REFACTOR_TODO: Goal: Use 0 wait until/wait while/etc in this game
                //yield return new WaitUntil(() => finishNewMove);

                //finishNewMove = false;
            }
        }
Пример #5
0
        public void TryUseMove(MoveClass move)
        {
            BattleManager.Inst.BattleUI.HideMoveOptions();
            string errorMessage;

            if (ValidateUseMove(move, out errorMessage))
            {
                RegisterPlayerAction(new UseMoveAction(State, move));
                State.PlayerState.LastMove = move;

                /* REFACTOR_TODO: Do this in BattleTurnProcess
                 * tmpMove.PPLeft--;
                 *  MoveMenu.SetActive(false);
                 *  moveText[moveIndex].GetComponent<Text>().text = (tmpMove.moveName + System.Environment.NewLine + "PP: " + tmpMove.PPLeft + "/" + tmpMove.PP);
                 *
                 *  // Disable button if no uses left
                 *  if (tmpMove.PPLeft <= 0)
                 *  {
                 *      MoveOptions[moveIndex].interactable = false;
                 *  }
                 *
                 */
            }
            else
            {
                UIManager.Inst.StartMessage(errorMessage);
                BattleManager.Inst.BattleUI.PresentPlayerOptions();
            }
        }
Пример #6
0
        // Prepare MoveOneOverview with new move info
        public void SetLevelUpMove(MoveClass newMove, DeltemonClass curPlayerDelt)
        {
            overviewDeltIndex = GameManager.Inst.deltPosse.IndexOf(curPlayerDelt);

            // Temporarily add new move as 5th move
            curPlayerDelt.moveset.Add(newMove);

            MoveClick(4);
        }
Пример #7
0
    public void SetHitBox(MoveClass move)      //general setter}
    {
        thisMove                = new MoveClass(move);
        thisMove.playerID       = this.playerID;
        transform.localScale    = new Vector3(thisMove.range, .2f, .5f);
        transform.localPosition = (new Vector3(1 - (thisMove.range / 2), 0));
        armed = true;
        int rand = (int)Random.Range(0f, 2f);

        audioClips [rand].Play();
    }
Пример #8
0
 public void PresentNewMoveUI(DeltemonClass playerDelt)
 {
     for (int i = 0; i < 4; i++)
     {
         MoveClass tmp    = playerDelt.moveset[i];
         Transform button = NewMoveUI.transform.GetChild(i);
         button.GetComponent <Image>().color           = tmp.majorType.background;
         button.GetChild(0).GetComponent <Text>().text = (tmp.moveName + System.Environment.NewLine + "PP: " + tmp.PP);
     }
     NewMoveUI.SetActive(true);
 }
Пример #9
0
            public void Populate(MoveClass move)
            {
                Button.interactable = move.PPLeft > 0;

                // REFACTOR_TODO: Move this pork case somewhere?
                bool pork = GameManager.Inst.pork;

                Background.color = pork ? PorkManager.PorkColor : move.majorType.background;
                MoveText.text    = pork ? "What is pork?!" + System.Environment.NewLine + "Porks: " + move.PPLeft + "/ PORK" :
                                   move.moveName + System.Environment.NewLine + "PP: " + move.PPLeft + "/" + move.PP;
                Move = move;
            }
Пример #10
0
        // Called on button down press on move from Delt's moveset
        public void MoveClick(int index)
        {
            Transform MoveOverview;
            MoveClass move = GameManager.Inst.deltPosse[overviewDeltIndex].moveset[index];

            // If move is already displayed, remove it
            if (firstMoveLoaded == index)
            {
                MoveOneOverview.gameObject.SetActiveIfChanged(false);
                firstMoveLoaded = -1;
                return;
            }
            else if (secondMoveLoaded == index)
            {
                MoveTwoOverview.gameObject.SetActiveIfChanged(false);
                secondMoveLoaded = -1;
                return;
            }

            // If first move overview already loaded, load into 2nd move overview
            if (firstMoveLoaded != -1)
            {
                MoveOverview     = MoveTwoOverview;
                secondMoveLoaded = index;
            }
            else
            {
                MoveOverview    = MoveOneOverview;
                firstMoveLoaded = index;
            }

            MoveOverview.GetComponent <Image>().color = move.majorType.background;
            MoveOverview.GetChild(0).GetComponent <Image>().sprite = move.majorType.majorImage;

            if (move.statusType != statusType.None)
            {
                MoveOverview.GetChild(1).gameObject.SetActiveIfChanged(true);
                MoveOverview.GetChild(1).GetComponent <Image>().sprite = move.status;
            }
            else
            {
                MoveOverview.GetChild(1).gameObject.SetActiveIfChanged(false);
            }

            MoveOverview.GetChild(2).GetComponent <Text>().text = move.moveName;
            MoveOverview.GetChild(3).GetComponent <Text>().text = "" + move.movType;
            MoveOverview.GetChild(4).GetComponent <Text>().text = move.moveDescription;

            MoveOverview.GetChild(5).GetComponent <Text>().text = move.PP + System.Environment.NewLine + move.damage + System.Environment.NewLine +
                                                                  move.hitChance + System.Environment.NewLine + move.statusType + System.Environment.NewLine + move.statusChance;

            MoveOverview.gameObject.SetActiveIfChanged(true);
        }
Пример #11
0
 public bool triggerCheck(MoveClass hit)
 {
     if (trigger == true)
     {
         Debug.Log("Sending move");
         controlPanel.registerHit(hit);              // reports move to ControlPanel
         audioClips[2].Play();
         ClearBox();
         return(true);
     }
     return(false);
 }
Пример #12
0
 public MoveClass(MoveClass copy)
 {
     this.name         = copy.name;
     this.framesLeft   = this.initialFrames = copy.initialFrames;
     this.activeFrames = copy.activeFrames;
     hitStun           = copy.hitStun;
     bStun             = copy.bStun;
     this.priority     = copy.priority;
     dmg           = copy.dmg;
     kB            = copy.kB;
     this.range    = copy.range;
     this.recovery = copy.recovery;
 }
Пример #13
0
        void TryToSetStatus(MoveClass move)
        {
            // If move has a status affliction and chance is met
            if ((move.statusType != statusType.None) && (Random.Range(0, 100) <= move.statusChance) && (DefendingDelt.curStatus != move.statusType))
            {
                BattleManager.AddToBattleQueue(enumerator: BattleManager.Inst.Animator.ChangeDeltStatus(!IsPlayer, move.statusType));

                // Update defender status
                BattleManager.Inst.StatusChange(!IsPlayer, move.statusType);

                BattleManager.AddToBattleQueue(message: string.Format("{0} is now {1}!", DefendingDelt.nickname, DefendingDelt.curStatus));
            }
        }
Пример #14
0
        // Trainer AI chooses Action for battle. Actions include using item, using move, or switching Delts
        public override BattleAction GetNextAction()
        {
            ItemClass     chosenItem         = ChooseTrainerItem();
            DeltemonClass playerDeltInBattle = State.PlayerState.DeltInBattle;

            // If item was chosen, use it
            if (chosenItem != null)
            {
                // REFACTOR_TODO: Determine if AI wants to use item on another Delt instead
                return(new UseItemAction(State, chosenItem, playerDeltInBattle));
            }

            // Choose best move for Delt
            MoveClass chosenMove = CalculateBestMove(playerDeltInBattle);

            float stayInScore = 100;

            if (chosenMove != null)
            {
                stayInScore = CalculateStayScore(chosenMove, playerDeltInBattle);
            }

            int           bestSwitchScore;
            DeltemonClass switchIn = FindSwitchIn(out bestSwitchScore);

            if (switchIn == null && chosenMove == null)
            {
                ForceOppLoss();
            }
            if (switchIn != null && chosenMove != null)
            {
                // AI Determines if switch in is appropriate
                if (stayInScore >= bestSwitchScore)
                {
                    return(new UseMoveAction(State, chosenMove));
                }
                else
                {
                    return(new SwitchDeltAction(State, switchIn));
                }
            }
            if (switchIn == null)
            {
                return(new UseMoveAction(State, chosenMove));
            }
            if (chosenMove == null)
            {
                return(new SwitchDeltAction(State, switchIn));
            }
            throw new System.Exception("Battle AI reached no possible battle actions!");
        }
Пример #15
0
    private void playHits()
    {
        adam.ClearStates();
        eve.ClearStates();

        while (HitQueue.Count > 0)
        {
            MoveClass hit = (MoveClass)HitQueue.Dequeue();
            print(hit.name);
            print((hit.recovery) + " is the length of recovery.");
            if ((hit.playerID + 1) % 2 == 0)
            {
                adam.takeHit(hit);
            }
            if ((hit.playerID + 1) % 2 == 1)
            {
                eve.takeHit(hit);
            }

/*			tutorialpanel.e="hit";
 *                      tutorialpanel.showPanel();
 *                      tutorialpanel.firstHit=false;*/

            /*	Debug.Log (victim.playerID + " was hit");
             *      if (victim.blocking && hit.bStun != -10) { // block chunk
             *              float instantKnockback = hit.kB*(hit.recovery / (hit.recovery + hit.bStun));
             *              victim.takeHit (instantKnockback, hit);
             *              victim.addMove(new MoveClass("Defend", hit.bStun, new int[0], 0, 0, 0, 0, 0, 0));
             *                      Debug.Log("Defend queued");
             *      }
             *
             *      if (!victim.blocking || hit.bStun == -10) { //hit chunk - if not blocking or if thrown
             *              Debug.Log("Hit reported");
             *              float instantKnockback = hit.kB*(hit.recovery / (hit.recovery + hit.hitStun));
             *              victim.takeHit (hit, instantKnockback); //deal damage to victim
             *              if (hit.kB == -1) { //if a character is knocked down
             *                      victim.addMove(new MoveClass("Knocked Down", 6, new int[0], 0, 0, 0, 0, 0, 0)); //queue knockdown
             *                      Debug.Log("KD queued");
             *              }
             *
             *              if(hit.kB >= 0) {	//queue hit turns
             *                              victim.addMove (new MoveClass("Hit", hit.hitStun, new int[0], 0,0,0,0,0,0));
             *                              Debug.Log("Hit queued.");
             *                      }
             *      } //hit chunk ends */
        }
        executionPhase = false;
        print("Player one health: " + adam.getHealth() + " || Player two health: " + eve.getHealth());
    }
Пример #16
0
 bool ValidateUseMove(MoveClass move, out string errorMessage)
 {
     errorMessage = null;
     if (move.PP <= 0)
     {
         errorMessage = "You don't have any more uses for this move!";
         return(false);
     }
     if (move.movType == moveType.Block && State.PlayerState.LastMove.movType == moveType.Block)
     {
         errorMessage = "You cannot block twice in a row!";
         return(false);
     }
     return(true);
 }
Пример #17
0
    public void takeHit(MoveClass move)
    {
        print("KB is " + move.kB);
        print("Recovery is" + move.recovery);
        print("Hitstun is" + (move.recovery + move.hitStun));
        print("Instant Knockback is " + move.kB * move.recovery / (move.recovery + move.hitStun));

        Debug.Log("hit taken: " + move.dmg);

        if (blocking && move.bStun != -10)           // block chunk
        {
            float instantKnockback = move.kB * move.recovery / (move.recovery + move.hitStun);
            transform.position += transform.right * -instantKnockback;             //Instant Knockback applied

            print(instantKnockback);
            addMove(new MoveClass("Defend", move.bStun, new int[0], 0, 0, 0, 0, 0, move.kB - instantKnockback));
            Debug.Log("Defend queued");
        }
        else if (!blocking || move.bStun == -10)                                         //hit chunk - if not blocking or if thrown
        {
            if (move.kB == -1)                                                           //if a character is knocked down
            {
                addMove(new MoveClass("Knocked Down", 6, new int[0], 0, 0, 0, 0, 0, 0)); //queue knockdown
                Debug.Log("KD queued");
            }

            else                //queue hit turns
            {
                float instantKnockback = move.kB * move.recovery / (move.recovery + move.hitStun);
                transform.position += -transform.right * instantKnockback;                 //Instant Knockback applied

                print(instantKnockback);
                addMove(new MoveClass("Hit", move.hitStun, new int[0], 0, 0, 0, 0, 0, move.kB - instantKnockback));
                Debug.Log("Hit queued.");
            }
        }         //hit chunk ends

        health = health - move.dmg;
        healthBar.HealthUpdate(health);

        //Game Over check
        if (health <= 0)
        {
            iP2.endGame();
        }
    }
Пример #18
0
 public void registerHit(MoveClass hit)
 {
     if (hit.playerID == 0)
     {
         if (eve.wasHit())
         {
             HitQueue.Enqueue(hit);
         }
     }
     if (hit.playerID == 1)
     {
         if (eve.wasHit())
         {
             HitQueue.Enqueue(hit);
         }
     }
 }
Пример #19
0
    // Could add stat and damage moves?
    // Could add multi-turn moves?

    public void duplicateValues(MoveClass recipient)
    {
        recipient.moveName        = moveName;
        recipient.moveDescription = moveDescription;
        recipient.majorType       = majorType;
        recipient.status          = status;
        recipient.movType         = movType;
        recipient.moveIndex       = moveIndex;
        recipient.PP           = PP;
        recipient.PPLeft       = PPLeft;
        recipient.damage       = damage;
        recipient.hitChance    = hitChance;
        recipient.statusType   = statusType;
        recipient.buffs        = buffs;
        recipient.statusChance = statusChance;
        recipient.critChance   = critChance;
    }
Пример #20
0
    public void setBox(int index, MoveClass move)
    {
        ImageSwitch(index, move.name);
        if (move.name == "Air Attack")
        {
            MoveClass temp = moveArray [index];
            moveArray [index] = new MoveClass(temp.name + " AA", temp.initialFrames + 1, new int[2] {
                (temp.initialFrames - temp.framesLeft + 1), (temp.initialFrames - temp.framesLeft + 2)
            },
                                              move.hitStun, move.bStun, move.priority, move.range, move.dmg, move.kB, temp.framesLeft + 1);
            print("Current frame is " + (temp.initialFrames - temp.framesLeft) + " of " + (temp.initialFrames + 1) + " initial and " + (temp.framesLeft + 1) + " current.");
        }
        else
        {
            moveArray [index] = move;
        }

        // sets buttons to occupied by a move's name if applic, sets those to null in move array
        for (int i = index + 1; i < 3; i++)
        {
            if (moveArray [index].framesLeft > i - index)
            {
                moveArray[i] = null;
                ImageSwitch(i, move.name);
                buttonArray[i].interactable = false;
            }
            else                //Clears buttons and makes interactable if applic
            {
                if (!buttonArray[i].IsInteractable())
                {
                    buttonArray[i].interactable = true;
                    ImageClear(i);
                }
                else                 //Breaks if an interactable button is found
                {
                    i = 3;
                }
            }
        }

        //The submit button is only accessable if all buttons are set
        takeTurnButton.interactable = (buttonArrayText [0].text != "_" &&
                                       buttonArrayText [1].text != "_" &&
                                       buttonArrayText [2].text != "_");
    }
Пример #21
0
    public static void Main(string[] args)
    {
        if (args.Length != 2)
        {
            Console.WriteLine("Unexpected # of arguments to Main(): {0} ", args.Length);

            throw new System.ArgumentException("Call with from and to paths");
        }

        else
        {
            string fromPath = args[0];
            string toPath   = args[1];

            Console.WriteLine("Rename from: {0} to {1}", fromPath, toPath);

            MoveClass.RenamePath(fromPath, toPath);
        }
    }
Пример #22
0
    public void takeHit(MoveClass move)
    {
        Debug.Log("hit taken: " + move.dmg);

        if (blocking && move.bStun != -10)   // block chunk
        {
            float instantKnockback = move.kB * move.recovery / (move.recovery + move.hitStun);
            transform.position += transform.right * -instantKnockback;     //Instant Knockback applied

            addMove(new MoveClass("Defend", move.bStun, new int[0], 0, 0, 0, 0, 0, move.kB - instantKnockback));
            Debug.Log("Defend queued");
        }
        else if (!blocking || move.bStun == -10)                                         //hit chunk - if not blocking or if thrown
        {
            if (move.kB == -1)                                                           //if a character is knocked down
            {
                addMove(new MoveClass("Knocked Down", 6, new int[0], 0, 0, 0, 0, 0, 0)); //queue knockdown
                Debug.Log("KD queued");
            }

            else        //queue hit turns
            {
                float instantKnockback = move.kB * move.recovery / (move.recovery + move.hitStun);
                transform.position += -transform.right * instantKnockback;         //Instant Knockback applied

                addMove(new MoveClass("Hit", move.hitStun, new int[0], 0, 0, 0, 0, 0, move.kB - instantKnockback));
                Debug.Log("Hit queued.");
            }
        } //hit chunk ends

        health = health - move.dmg;
        healthBar.HealthUpdate(health);

        //Game Over check
        if (health <= 0)
        {
            die.Play();
            iP2.endGame();

            myDino.GetComponent <Animation>().PlayQueued("Lose", QueueMode.PlayNow);
        }
    }
Пример #23
0
        // Wild Delt move = random move from moveset
        public override BattleAction GetNextAction()
        {
            List <MoveClass> movesWithUses = new List <MoveClass>();

            foreach (MoveClass move in State.OpponentState.DeltInBattle.moveset)
            {
                if (move.PPLeft > 0)
                {
                    movesWithUses.Add(move);
                }
            }
            if (movesWithUses.Count == 0)
            {
                // REFACTOR_TODO: Loss condition
                return(null);
            }
            else
            {
                MoveClass randomMove = movesWithUses.GetRandom();
                return(new UseMoveAction(State, randomMove));
            }
        }
Пример #24
0
        // Calculates how effective it would be to keep Delt in
        float CalculateStayScore(MoveClass chosenMove, DeltemonClass curPlayerDelt)
        {
            bool oppGoesFirst = State.PlayerState.GetDeltBattleStat(DeltStat.ChillToPull) >
                                State.OpponentState.GetDeltBattleStat(DeltStat.ChillToPull);
            float         stayChance   = 100;
            DeltemonClass deltInBattle = State.OpponentState.DeltInBattle;

            // If opponent has a status
            if (deltInBattle.curStatus != statusType.None)
            {
                // If move doesn't heal
                if (!chosenMove.buffs.Exists(b => b.BuffType == buffType.Heal))
                {
                    // Lower health == lower stayChance
                    if (deltInBattle.health < 0.35 * deltInBattle.GPA)
                    {
                        stayChance = 80;
                    }
                    // Slightly higher GPA means higher stayChance
                    else if (deltInBattle.health < 0.6 * deltInBattle.GPA)
                    {
                        stayChance = 90;
                    }
                }
            }
            // If player goes first, and opp is hurt, lower stay chance
            if (!oppGoesFirst)
            {
                if (deltInBattle.health < deltInBattle.GPA * 0.1f)
                {
                    stayChance *= 0.8f;
                }
                else if (deltInBattle.health < deltInBattle.GPA * 0.3f)
                {
                    stayChance *= 0.9f;
                }
            }
            return(stayChance);
        }
Пример #25
0
    public void setBox(int index, MoveClass move, bool isFirstBlockofNewTurn)
    {
        ImageSwitch(index, move.name);
        moveArray [index] = move;
        if (isFirstBlockofNewTurn)
        {
            buttonArray[index].interactable = false;
        }

        // sets buttons to occupied by a move's name if applic, sets those to null in move array
        for (int i = index + 1; i < 3; i++)
        {
            if (move.framesLeft > i - index)
            {
                moveArray[i] = null;
                ImageSwitch(i, move.name);
                buttonArray[i].interactable = false;
            }
            else                //Clears buttons and makes interactable if applic
            {
                if (!buttonArray[i].IsInteractable())
                {
                    buttonArray[i].interactable = true;
                    ImageClear(i);
                }
                else                 //Breaks if an interactable button is found
                {
                    i = 3;
                }
            }
        }

        //The submit button is only accessable if all buttons are set
        takeTurnButton.interactable = (buttonArrayText [0].text != "_" &&
                                       buttonArrayText [1].text != "_" &&
                                       buttonArrayText [2].text != "_");
    }
Пример #26
0
    public void takeMove()
    {
        //print (moveQueue.Count + "for player " + GetPlayerID());
        if (!hasJumped || moveQueue.Count > 0)
        {
            if (opponent.transform.position.x < transform.position.x && transform.localRotation.y != 180)             //block checks if a player needs to spin around
            {
                transform.localEulerAngles = new Vector3(0, 180, 0);
            }
            if (opponent.transform.position.x > transform.position.x && transform.localRotation.y != 0)
            {
                transform.localEulerAngles = Vector3.zero;
            }
        }                                                                                                                                                               //block ends

        moveQueue [0].framesLeft -= 1;
        MoveClass thisMove           = moveQueue [0];
        int       currentFrameNumber = thisMove.initialFrames - thisMove.framesLeft;

        if (thisMove.name != "Defend")                          //If the player has continued blocking since last turn,
        {
            blocking = false;                                   //then there is no gap where they are not blocking
        }
        //Debug.Log("Player " + playerID + ": " + nextMove);

        switch (thisMove.name)
        {
        case "Knocked Down":
            if (currentFrameNumber == 0)
            {
                invuln = true;
            }
            if (currentFrameNumber == moveQueue[0].initialFrames)
            {
                moveCount = 0;
                invuln    = false;
            }
            break;

        case "Light Attack":
        case "Medium Attack":
            if (thisMove.activeFrames[0] == currentFrameNumber)
            {
                myLimb.SetHitBox(thisMove);
            }
            if (thisMove.activeFrames[0] + thisMove.activeFrames.Length - 1 < currentFrameNumber)
            {
                myLimb.ClearBox();
            }
            break;


        case "Hit":
            transform.position += transform.right * -thisMove.kB;
            break;


        case "Heavy Attack":
            if (currentFrameNumber < 3)
            {
                transform.Translate(Vector3.right * .3f);
            }
            if (currentFrameNumber == 2)
            {
                myLimb.SetHitBox(moveQueue [0]);
            }
            if (currentFrameNumber == 3)
            {
                myLimb.ClearBox();
            }
            if (currentFrameNumber == moveQueue[0].initialFrames)
            {
                moveCount = 0;
            }
            break;

        case "Defend":
            blocking = true;
            break;

        case "Walk Forward":
            gameObject.transform.Translate(Vector3.right * walkSpeed);
            //	myDino.animation.Play ("walk");
            break;

        case "Walk Back":
            gameObject.transform.Translate(-Vector3.right * walkSpeed);
            //	myDino.animation.Play ("walk");
            break;

        case "Forward Dash":
            gameObject.transform.Translate(Vector3.right * forwardDash / 3);
            break;

        case "Back Dash":
            if (currentFrameNumber == 0)
            {
                invuln = true;
            }
            if (moveCount == 1)
            {
                invuln = false;
            }
            gameObject.transform.Translate(-Vector3.right * backDash / 5);
            moveCount++;
            if (moveCount == 5)
            {
                moveCount = 0;
            }
            break;

        case "Jump":
            if (currentFrameNumber <= 3)
            {
                transform.Translate(Vector3.up * jumpFactor);
            }
            if (currentFrameNumber > 3)
            {
                transform.Translate(Vector3.down * jumpFactor);
            }

            /*if (jumpFrames == 0) {
             *      hasJumped = false;
             *      iP2.setAirAttack (playerID);
             * }*/
            break;

        case "Jump Right":

            if (currentFrameNumber <= 3)
            {
                transform.Translate(Vector3.up * jumpFactor);
            }
            if (currentFrameNumber > 3)
            {
                transform.Translate(Vector3.down * jumpFactor);
            }
            gameObject.transform.Translate(Vector3.right * forwardDash / 3);

            /*if (jumpFrames == 0) {
             *      hasJumped = false;
             *      iP2.setAirAttack (playerID);
             * }*/
            break;

        case "Jump Left":
            if (currentFrameNumber <= 3)
            {
                transform.Translate(Vector3.up * jumpFactor);
            }
            if (currentFrameNumber > 3)
            {
                transform.Translate(Vector3.down * jumpFactor);
            }
            gameObject.transform.Translate(-Vector3.right * forwardDash / 3);

            /*if (jumpFrames == 0) {
             *      hasJumped = false;
             *      iP2.setAirAttack (playerID);
             * }*/
            break;


        case "Air Attack":
        case "Jump AA":
        case "Jump Left AA":
        case "Jump Right AA":
            if (thisMove.activeFrames[0] == currentFrameNumber)
            {
                myLimb.SetHitBox(thisMove);
            }
            if (thisMove.activeFrames[0] + 1 < currentFrameNumber)
            {
                myLimb.ClearBox();
            }

            if (currentFrameNumber <= 3)
            {
                transform.Translate(Vector3.up * jumpFactor);
            }
            if (currentFrameNumber > 3 && currentFrameNumber < 7)
            {
                transform.Translate(Vector3.down * jumpFactor);
            }

            if (thisMove.name == "Jump Left AA" && currentFrameNumber < 7)
            {
                gameObject.transform.Translate(-Vector3.right * jumpFactor);
            }
            if (jumpDirection == "Jump Right AA" && currentFrameNumber < 7)
            {
                gameObject.transform.Translate(Vector3.right * jumpFactor);
            }

            break;

        case "Fireball":
            if (moveCount == 2)
            {
                GameObject temp = (GameObject)Instantiate(fireball, transform.position, transform.localRotation);
                myBall = temp.GetComponent <FireballController> ();
                myBall.myTarget(opponent);
            }
            moveCount++;
            if (moveCount == 9)
            {
                moveCount = 0;
            }
            break;


        case "Dino-Punch":
            if (moveCount == 0)
            {
                invuln = true;
                myLimb.SetHitBox(moveQueue [0]);
            }
            if (moveCount == 3)
            {
                invuln = false;
                myLimb.ClearBox();
            }
            moveCount++;
            if (moveCount == 8)
            {
                moveCount = 0;
            }
            break;

        case "Throw":
            if (moveCount == 0)
            {
                myLimb.SetHitBox(moveQueue [0]);
                hasThrown = true;
            }
            if (moveCount == 1)
            {
                myLimb.ClearBox();
            }
            if (moveCount == 2)
            {
                hasThrown = false;
            }
            moveCount++;
            if (moveCount == 5)
            {
                moveCount = 0;
            }
            break;


        default:
            break;
        }

        if (myBall != null)
        {
            myBall.nextMove();
        }
        transform.position = new Vector3(Mathf.Clamp(transform.localPosition.x, -5.874f, 5.874f),
                                         Mathf.Clamp(transform.localPosition.y, 1.04f, 4f), transform.localPosition.z);
        if (moveQueue [0].framesLeft == 0)
        {
            moveQueue.RemoveAt(0);
        }
    }
Пример #27
0
        // REFACTOR_TODO: Is this necessary?
        // New move button press starts coroutine
        //public void NewMoveButton(bool isLearn)
        //{
        //    StartCoroutine(NewMoveButtonCoroutine(isLearn));
        //}


        // User clicks Learn New Move or Don't Learn
        public void NewMoveButtonPress(bool isLearn, System.Action OnFinish)
        {
            // REFACTOR_TODO: Make references
            Text          cancelText = NewMoveUI.transform.GetChild(5).GetChild(0).GetComponent <Text>();
            Text          learnText  = NewMoveUI.transform.GetChild(4).GetChild(0).GetComponent <Text>();
            DeltemonClass delt       = State.PlayerState.DeltInBattle;

            // Presses the cancel button
            if (!isLearn)
            {
                // Player affirms not learning new move
                if (cancelText.text == "Sure?")
                {
                    BattleManager.AddToBattleQueue(string.Format("{0} didn't learn the move {1}!", delt.nickname, delt.moveset[4].moveName));

                    // Remove tmp 5th new move
                    delt.moveset.RemoveAt(4);
                    NewMoveUI.SetActive(false);
                    UIManager.Inst.PosseUI.CloseMoveOverviews();
                    OnFinish();
                }
                // Cancel button must be pressed again to confirm
                else
                {
                    cancelText.text = "Sure?";
                    learnText.text  = "Switch" + System.Environment.NewLine + "Moves";
                }
            }
            // Presses learn new move button without selecting an old move first
            else if (!UIManager.Inst.PosseUI.MoveTwoOverview.gameObject.activeInHierarchy)
            {
                BattleManager.AddToBattleQueue("You must select a move to switch out first!");
            }
            // User tries to forget a move
            else
            {
                // Player affirms learning new move
                if (learnText.text == "Sure?")
                {
                    // Save index of move being forgotten
                    int forgetMoveIndex = UIManager.Inst.secondMoveLoaded;

                    // Set move overviews and new move ui to inactive
                    NewMoveUI.SetActive(false);
                    UIManager.Inst.PosseUI.CloseMoveOverviews();

                    BattleManager.AddToBattleQueue(string.Format("{0} forgot the move {1}!", delt.nickname, delt.moveset[forgetMoveIndex].moveName));

                    // Instantiate and learn new move
                    MoveClass newMove = Instantiate(delt.moveset[4], delt.transform);
                    delt.moveset[forgetMoveIndex] = newMove;

                    // Remove 5th move
                    delt.moveset.RemoveAt(4);

                    BattleManager.AddToBattleQueue(string.Format("{0} learned the move {1}!", delt.nickname, newMove.moveName));

                    OnFinish();
                }
                // Cancel button must be pressed again to confirm
                else
                {
                    learnText.text  = "Sure?";
                    cancelText.text = "Don't" + System.Environment.NewLine + "Learn";
                }
            }
        }
Пример #28
0
 public void setButtonMove(MoveClass newMove)
 {
     move = newMove;
 }
Пример #29
0
 // REFACTOR_TODO: Temporary until moveclass is no longer a Monobehavior
 public MoveClass InstantiateMove(MoveClass move, Transform parent)
 {
     return(Instantiate(move, parent));
 }
Пример #30
0
    public void takeMove()
    {
        if (moveQueue.Count > 0)
        {
            //print (moveQueue.Count + "for player " + GetPlayerID());
            if (!hasJumped || moveQueue.Count > 0)
            {
                if (opponent.transform.position.x < transform.position.x && transform.localRotation.y != 180)                 //block checks if a player needs to spin around
                {
                    transform.localEulerAngles = new Vector3(0, 180, 0);
                }
                if (opponent.transform.position.x > transform.position.x && transform.localRotation.y != 0)
                {
                    transform.localEulerAngles = Vector3.zero;
                }
            }                                                                                                           //block ends

            moveQueue [0].framesLeft -= 1;
            MoveClass thisMove           = moveQueue [0];
            int       currentFrameNumber = thisMove.initialFrames - thisMove.framesLeft;
            if (thisMove.name != "Defend")              //If the player has continued blocking since last turn,
            {
                blocking = false;                       //then there is no gap where they are not blocking
            }
            if (!myDino.GetComponent <Animation>().isPlaying)
            {
                myDino.GetComponent <Animation>().CrossFade("Idle", 0.2f, PlayMode.StopSameLayer);
            }
            //Debug.Log("Player " + playerID + ": " + nextMove);

            switch (thisMove.name)
            {
            case "Knocked Down":
                if (currentFrameNumber == 0)
                {
                    myDino.GetComponent <Animation>().PlayQueued("Lose", QueueMode.PlayNow);
                    invuln = true;
                }
                if (currentFrameNumber == moveQueue [0].initialFrames)
                {
                    invuln = false;
                    myDino.GetComponent <Animation>().PlayQueued("Idle", QueueMode.PlayNow);
                }
                break;

            case "Light Attack":
                if (thisMove.activeFrames [0] == currentFrameNumber)
                {
                    myLimb.SetHitBox(thisMove);
                    myDino.GetComponent <Animation>().PlayQueued("Light", QueueMode.PlayNow);
                }
                if (thisMove.activeFrames [0] + thisMove.activeFrames.Length - 1 < currentFrameNumber)
                {
                    myLimb.ClearBox();
                }
                break;

            case "Medium Attack":
                if (thisMove.activeFrames [0] == currentFrameNumber)
                {
                    myLimb.SetHitBox(thisMove);
                    myDino.GetComponent <Animation>().PlayQueued("Medium", QueueMode.PlayNow);
                }
                if (thisMove.activeFrames [0] + thisMove.activeFrames.Length - 1 < currentFrameNumber)
                {
                    myLimb.ClearBox();
                }
                break;


            case "Hit":
                if (currentFrameNumber == 1)
                {
                    myDino.GetComponent <Animation>().PlayQueued("Hit", QueueMode.PlayNow).speed = 20f / 12f;
                }
                transform.position += transform.right * -thisMove.kB;
                break;


            case "Heavy Attack":
                if (currentFrameNumber == 1)
                {
                    myDino.GetComponent <Animation>().PlayQueued("Heavy", QueueMode.PlayNow).speed = 1.4f;
                }
                if (currentFrameNumber == 2)
                {
                    myLimb.SetHitBox(moveQueue [0]);
                    myDino.transform.localPosition += (Vector3.right * .5f);
                }
                if (currentFrameNumber == 3)
                {
                    myLimb.ClearBox();
                    myDino.transform.localPosition += (-Vector3.right * .5f);
                    gameObject.transform.Translate(Vector3.right * .5f);
                }
                break;

            case "Defend":
                if (!blocking)
                {
                    myDino.GetComponent <Animation>().PlayQueued("DefendStart", QueueMode.PlayNow);
                    myDino.GetComponent <Animation>().PlayQueued("DefendFreeze", QueueMode.CompleteOthers);
                    blocking = true;
                }
                break;

            case "Walk Forward":
                myDino.GetComponent <Animation>().PlayQueued("Dash", QueueMode.PlayNow);
                gameObject.transform.Translate(Vector3.right * walkSpeed);
                move.Play();
                //	myDino.animation.Play ("walk");
                break;

            case "Walk Back":
                myDino.transform.localEulerAngles = new Vector3(0, 90, 0);
                myDino.GetComponent <Animation>().PlayQueued("Dash", QueueMode.PlayNow);
                gameObject.transform.Translate(-Vector3.right * walkSpeed);
                move.Play();
                break;

            case "Forward Dash":
                move.Play();
                if (currentFrameNumber == 1)
                {
                    myDino.GetComponent <Animation>().PlayQueued("DashStart", QueueMode.PlayNow);
                    //if(currentFrameNumber == 2)
                    myDino.GetComponent <Animation>().PlayQueued("Dash", QueueMode.CompleteOthers);
                    myDino.GetComponent <Animation>().PlayQueued("Dash", QueueMode.CompleteOthers);
                    //if(currentFrameNumber == 3)
                    myDino.GetComponent <Animation>().PlayQueued("DashEnd", QueueMode.CompleteOthers);

                    //StartCoroutine(dinoLerp(Vector3.right * forwardDash));
                }
                gameObject.transform.Translate(Vector3.right * forwardDash / 3);

                break;

            case "Back Dash":
                move.Play();
                if (currentFrameNumber == 1)
                {
                    myDino.transform.localEulerAngles = new Vector3(0, 90, 0);
                    invuln = true;
                    myDino.GetComponent <Animation>().PlayQueued("DashStart", QueueMode.PlayNow);
                    myDino.GetComponent <Animation>().PlayQueued("Dash", QueueMode.CompleteOthers);
                    myDino.GetComponent <Animation>().PlayQueued("Dash", QueueMode.CompleteOthers);
                    myDino.GetComponent <Animation>().PlayQueued("Dash", QueueMode.CompleteOthers);
                    myDino.GetComponent <Animation>().PlayQueued("Dash", QueueMode.CompleteOthers);
                    myDino.GetComponent <Animation>().PlayQueued("DashEnd", QueueMode.CompleteOthers);
                }
                if (currentFrameNumber == 2)
                {
                    invuln = false;
                }
                gameObject.transform.Translate(-Vector3.right * backDash / 5);
                break;

            case "Jump":
                if (currentFrameNumber == 1)
                {
                    myDino.GetComponent <Animation>().PlayQueued("JumpStart", QueueMode.PlayNow).speed         = 1.5f;
                    myDino.GetComponent <Animation>().PlayQueued("JumpMiddle", QueueMode.CompleteOthers).speed = 0.21f;
                    myDino.GetComponent <Animation>().PlayQueued("JumpEnd", QueueMode.CompleteOthers);
                }
                if (currentFrameNumber <= 3 && currentFrameNumber > 1)
                {
                    transform.Translate(Vector3.up * jumpFactor);
                }
                if (currentFrameNumber > 3)
                {
                    transform.Translate(Vector3.down * jumpFactor);
                }
                break;

            case "Jump Right":
                if (currentFrameNumber == 1)
                {
                    myDino.GetComponent <Animation>().PlayQueued("JumpStart", QueueMode.PlayNow).speed         = 1.5f;
                    myDino.GetComponent <Animation>().PlayQueued("JumpMiddle", QueueMode.CompleteOthers).speed = 0.21f;
                    myDino.GetComponent <Animation>().PlayQueued("JumpEnd", QueueMode.CompleteOthers);
                }
                if (currentFrameNumber <= 3 && currentFrameNumber > 1)
                {
                    transform.Translate(Vector3.up * jumpFactor);
                }
                if (currentFrameNumber > 3)
                {
                    transform.Translate(Vector3.down * jumpFactor);
                }
                gameObject.transform.Translate(Vector3.right * forwardDash / 3);

                /*if (jumpFrames == 0) {
                 *              hasJumped = false;
                 *              iP2.setAirAttack (playerID);
                 *      }*/
                break;

            case "Jump Left":
                if (currentFrameNumber == 1)
                {
                    myDino.GetComponent <Animation>().PlayQueued("JumpStart", QueueMode.PlayNow).speed         = 1.5f;
                    myDino.GetComponent <Animation>().PlayQueued("JumpMiddle", QueueMode.CompleteOthers).speed = 0.21f;
                    myDino.GetComponent <Animation>().PlayQueued("JumpEnd", QueueMode.CompleteOthers);
                }
                if (currentFrameNumber <= 3 && currentFrameNumber > 1)
                {
                    transform.Translate(Vector3.up * jumpFactor);
                }
                if (currentFrameNumber > 3)
                {
                    transform.Translate(Vector3.down * jumpFactor);
                }
                gameObject.transform.Translate(-Vector3.right * forwardDash / 3);

                /*if (jumpFrames == 0) {
                 *              hasJumped = false;
                 *              iP2.setAirAttack (playerID);
                 *      }*/
                break;


            case "Air Attack":
            case "Jump AA":
            case "Jump Left AA":
            case "Jump Right AA":
                if (thisMove.activeFrames [0] == currentFrameNumber)
                {
                    myLimb.SetHitBox(thisMove);
                }
                if (thisMove.activeFrames [0] + 1 < currentFrameNumber)
                {
                    myLimb.ClearBox();
                }

                if (currentFrameNumber <= 3)
                {
                    transform.Translate(Vector3.up * jumpFactor);
                }
                if (currentFrameNumber > 3 && currentFrameNumber < 7)
                {
                    transform.Translate(Vector3.down * jumpFactor);
                }

                if (thisMove.name == "Jump Left AA" && currentFrameNumber < 7)
                {
                    gameObject.transform.Translate(-Vector3.right * jumpFactor);
                }
                if (jumpDirection == "Jump Right AA" && currentFrameNumber < 7)
                {
                    gameObject.transform.Translate(Vector3.right * jumpFactor);
                }

                break;

            case "Divekick":
                if (currentFrameNumber == 1)
                {
                    transform.localEulerAngles = new Vector3(transform.rotation.x, transform.rotation.y, -45f);
                    myLimb.SetHitBox(thisMove);
                    myDino.GetComponent <Animation>().PlayQueued("DivePeck", QueueMode.PlayNow);
                }
                gameObject.transform.Translate(Vector3.right * 0.3f);
                gameObject.transform.Translate(Vector3.down * 0.6f);
                if (transform.localPosition.z <= 1.04)
                {
                    thisMove.framesLeft = 0;
                }
                if (thisMove.framesLeft == 0)
                {
                    myLimb.ClearBox();
                }
                break;


            case "Dash Peck":
                if (currentFrameNumber == 1)
                {
                    myDino.GetComponent <Animation>().PlayQueued("DashAttackOnly", QueueMode.PlayNow);
                }
                if (currentFrameNumber < 4)
                {
                    move.Play();
                    gameObject.transform.Translate(Vector3.right * 0.4f);
                }
                if (currentFrameNumber == 3)
                {
                    myLimb.SetHitBox(thisMove);
                }
                if (currentFrameNumber == 4)
                {
                    myLimb.ClearBox();
                }
                break;

            case "Throw":
                if (moveCount == 0)
                {
                    myLimb.SetHitBox(moveQueue [0]);
                    myDino.GetComponent <Animation>().PlayQueued("GuardBreak", QueueMode.PlayNow);
                    hasThrown = true;
                }
                if (moveCount == 1)
                {
                    myLimb.ClearBox();
                }
                if (moveCount == 2)
                {
                    hasThrown = false;
                }
                break;


            default:
                break;
            }
            transform.position = new Vector3(Mathf.Clamp(transform.localPosition.x, -5.874f, 5.874f),
                                             Mathf.Clamp(transform.localPosition.y, 1.04f, 4f), transform.localPosition.z);
            if (moveQueue [0].framesLeft == 0)
            {
                moveQueue.RemoveAt(0);
                myDino.transform.localEulerAngles = new Vector3(0, -90, 0);
            }
        }
    }
Пример #31
0
 public void addMove(MoveClass move)
 {
     moveQueue.Insert(moveQueue.Count, move);
 }