コード例 #1
0
ファイル: CharacterStats.cs プロジェクト: sjai013/RPG
    public float calculateATBIncrement(BattleState state)
    {
        if (state.getState() == BattleState.State.Idle)
            return (Time.deltaTime);

        return 0;
    }
コード例 #2
0
 public WinRenderer(BattleState battleState)
     : base(battleState)
 {
     whitePixelTextureData = ResourceManager.GetTextureData("white_pixel");
     minScale = Game1.MinScreenScaleFactor;
     visibleItemCount = (int)Math.Floor(10 * minScale.Y);
 }
コード例 #3
0
 // Update is called once per frame
 void Update()
 {
     var nextstate = _state.Update();
     if (nextstate != null) { // state transition requested
         _state.OnExit();
         _state = nextstate;
     }
 }
コード例 #4
0
 public void HandleTileClick(TerrainTile tile)
 {
     var nextstate = _state.HandleTileClick(tile);
     if (nextstate != null) { // state transition requested
         _state.OnExit();
         _state = nextstate;
     }
 }
コード例 #5
0
 public override void Resume(BattleState previousBattleState)
 {
     base.Resume(previousBattleState);
     if (previousBattleState is Attack || previousBattleState is UseItem)
         currentThinkActionFinished = true;
     else if (previousBattleState is HandleStatusEffects)
         statusEffectsCompleteForAction = true;
     removeDeadPartyMembers();
 }
コード例 #6
0
        /// <summary>
        /// Initialize the modify event.
        /// </summary>
        /// <param name="timeline">The timeline this event is part of.</param>
        /// <param name="start">The start of the event.</param>
        /// <param name="dependentOn">An optional event to be dependent upon, ie. wait for.</param>
        /// <param name="character">The character who health will be modified.</param>
        /// <param name="state">The state to change into.</param>
        protected virtual void Initialize(Timeline timeline, float start, TimelineEvent dependentOn, Creature character, BattleState state)
        {
            //Call the base method.
            base.Initialize(timeline, start, dependentOn);

            //Initialize the variables.
            _Character = character;
            _ChangeState = state;
        }
コード例 #7
0
	// Use this for initialization
	void Start () {
        currentState = BattleState.START;
        battleGenerator = new BattleGenerator();
        this.turnQueue = battleGenerator.generateBattle();
        this.alliedCharacters = battleGenerator.alliedCharacters;
        this.enemies = battleGenerator.enemies;
        currentState = BattleState.START;
        
    }
コード例 #8
0
        public BattleScreen(String filename, EnemyEntity starter, GameScreen previous)
        {
            TransitionOnTime = TimeSpan.Zero;
            TransitionOffTime = TimeSpan.Zero;

            currentBattleState = BattleState.Starting;
            previousScreen = previous;

            creator = starter;
            battleFile = filename;
        }
コード例 #9
0
ファイル: BattleNetwork.cs プロジェクト: hekk/sprint_workshop
    void ReceiveBattleState(int state)
    {
        Debug.Log ("BattleNetwork:ReceiveBattleState");
        this.state = (BattleState)state;

        if ((BattleState)state != BattleState.Standby) {
            if (StandbyView.instance.IsShow()) {
                StandbyView.instance.Hide();
           	}
        }
    }
コード例 #10
0
    // Use this for initialization
    void Start()
    {
        var stage = parameter.Stages [0];
        var left = new Team (toUnits(stage));
        var right = new Team (player.Units);
        battleState = new BattleState (left, right);
        LeftUnits = deploy (battleState.Left.Units, leftRoot, Side.Left);
        RightUnits = deploy (battleState.Right.Units, rightRoot, Side.Right);

        StartCoroutine (turnUpdate());
    }
コード例 #11
0
    void Update()
    {
        if (lastState != _state)
        {
            Debug.Log("BATTLE STATE is " + _state.ToString());
            lastState = _state;
        }

        StateMachine(_state);

        

    }
コード例 #12
0
ファイル: BattleController.cs プロジェクト: he305/JRPG
 private void changePlayer()
 {
     ClearGUI();
     if (currentPlayerTurn == players.Count - 1)
     {
         currentBattleState = BattleState.EnemyState;
         return;
     }
     currentPlayerTurn++;
     GameObject.Find("HeroName").GetComponent<Text>().text = players[currentPlayerTurn].name;
     currentPanelState = PanelState.Actions;
     currentMenuChoise = 0;
     foreach (var act in actions)
     {
         act.GetComponent<Text>().enabled = true;
     }
 }
コード例 #13
0
    void StateMachine(BattleState curState)
    {
        switch (curState)
        {
            case BattleState.START:
                // Start the battle by loading the necessary resources
                Debug.Log("Starting the Battle!");
                // Load the Player Characters
                if (Battle_Loader.Instance.isPlayerSquadLoaded == false)
                {
                    Battle_Loader.Instance.SpawnPlayerSquad();
                }
                else if (Battle_Loader.Instance.isEnemiesLoaded == false)
                {
                    // Load the Enemies
                    Battle_Loader.Instance.SpawnEnemies();
                }
                else
                {
                    _state = BattleState.PLAYER_TURN;
                    Battle_Controller.Instance.StartPlayerTurn();
                }
                

                break;
            case BattleState.PLAYER_TURN:
                // Start the player's turn with the first available Squad member selected
                break;
            case BattleState.ENEMY_TURN:
                // Start the enemy's turn with first available enemy, then continue with the rest of the enemy unit's until they have all taken an action
                break;
            case BattleState.LOSE:
                // Tell the player they have lost the battle and give them an option to restart the level
                break;
            case BattleState.WIN:
                // Tell the player they have won and go back to the ship level showing the results of the battle
                break;
            case BattleState.NEXT:
                // Reset all unit movement and action point values then go to Player's turn again

            default:
                // Default: do nothing
                break;

        }
    }
コード例 #14
0
    void ReceiveBattleState(int state)
    {
        Debug.Log ("BattleController:ReceiveBattleState");
        this.state = (BattleState)state;

        switch (this.state) {
        case BattleState.Standby:
            break;
        case BattleState.PrepareResult:
            if (WaitingView.instance.IsShow()) {
                WaitingView.instance.Hide();
            }
            break;
        default:
            if (StandbyView.instance.IsShow()) {
                StandbyView.instance.Hide();
           	}
            break;
        }
    }
コード例 #15
0
        public ThinkRenderer(BattleState battleState)
            : base(battleState)
        {
            menuOptions = new List<ThinkRendererOuterMenuOption>(Think.OuterMenuOptions.Length);
            sortedMenuOptions = new List<ThinkRendererOuterMenuOption>(Think.OuterMenuOptions.Length);
            for (int i = 0; i < Think.OuterMenuOptions.Length; ++i)
            {
                string optionName = Think.OuterMenuOptions[i].ToLower();
                ThinkRendererOuterMenuOption menuOption = new ThinkRendererOuterMenuOption(ResourceManager.GetTextureData("battle_ui/icons/" + optionName), menuOptionColors[optionName], i);
                menuOptions.Add(menuOption);
                sortedMenuOptions.Add(menuOption);
            }
            iconContainerTextureData = ResourceManager.GetTextureData("battle_ui/icons/container");
            iconContainerGlowTextureData = ResourceManager.GetTextureData("battle_ui/icons/container_glow");
            actionIconTextureData = new TextureData[actionIconNames.Length];
            for (int i = 0; i < actionIconNames.Length; ++i)
                actionIconTextureData[i] = ResourceManager.GetTextureData("battle_ui/icons/" + actionIconNames[i]);
            ResetOuterMenuTransitions();

            anglePerOption = MathHelper.TwoPi / Think.OuterMenuOptions.Length;
            halfOptionsLength = Think.OuterMenuOptions.Length / 2;

            whitePixelTextureData = ResourceManager.GetTextureData("white_pixel");
        }
コード例 #16
0
ファイル: Creature.cs プロジェクト: LaudableBauble/Insipidus
        /// <summary>
        /// Launch an attack on a creature with a move.
        /// </summary>
        /// <param name="move">The move to attack with.</param>
        /// <param name="target">The target to attack.</param>
        public void LaunchAttack(Move move, Creature target)
        {
            //Stop here if the move or target isn't valid, or if a move already has been set in motion.
            if (move == null || target == null || _BattleState != BattleState.Idle) { return; }

            //Prepare for the attack.
            _BattleState = BattleState.Waiting;
            //Create the activated form of the move.
            BattleMove active = new BattleMove(move, this, target);

            //Attack.
            BattleCoordinator.Instance.QueueMove(active);
        }
コード例 #17
0
 // Start is called before the first frame update
 void Start()
 {
     state = BattleState.START;
     StartCoroutine(SetupBattle());
 }
コード例 #18
0
ファイル: BattleSystem.cs プロジェクト: ofaura/GameDesign
    IEnumerator EnemyTurn()
    {
        dialogueText.text = enemyUnit.name + " attacks!";

        if (extracting_simulation_data)
        {
            yield return(new WaitForSeconds(0f));
        }

        else
        {
            yield return(new WaitForSeconds(1f));
        }

        float damage_taken = playerUnit.selected_minion.CalculateTakenDamage(enemyUnit.selected_minion);

        playerUnit.currentHP -= damage_taken;

        bool isDead = false;

        if (playerUnit.currentHP <= 0)
        {
            isDead = true;
        }
        else
        {
            isDead = false;
        }

        playerHUD.SetHP(playerUnit.currentHP);

        if (extracting_simulation_data)
        {
            yield return(new WaitForSeconds(0f));
        }

        else
        {
            yield return(new WaitForSeconds(1f));
        }

        if (isDead)
        {
            state = BattleState.LOST;
            EndBattle();
            yield break;
        }

        if (enemyUnit.selected_minion.speed > playerUnit.selected_minion.speed)
        {
            playerAttack = true;
            state        = BattleState.PLAYERTURN;
            StartCoroutine(PlayerAttack());
        }

        else
        {
            state = BattleState.ENDTURN;
            StartCoroutine(EndTurn());
        }
    }
コード例 #19
0
    public void EndPlayerTurn()
    {
        if (_state == BattleState.PLAYER_TURN)
        {
            Debug.Log("STATE: Ending Player turn");

            // Check if there are any enemies left!

            _state = BattleState.ENEMY_TURN;
            Battle_Controller.Instance.StartEnemyTurn();
        }
    }
コード例 #20
0
 private void checksIfDead(Entity[] entities, BattleState newState)
 {
     foreach (Entity e in entities)
     {
         if (!e.isDead())
         {
             return;
         }
     }
     currentState = newState;
 }
コード例 #21
0
    // Update is called once per frame
    void Update()
    {
        switch (battleState)
        {
            case BattleState.waiting:
                if (characterSpeedManager.PlayerProcess())
                {
                    selectedPlayer = characterSpeedManager.selectedPlayer;
                    battleState = BattleState.playerChoosingCommand;
                    break;
                }
                characterSpeedManager.EnemyProcess();
                /*
                for (int i = 0; i < enemyList.Length; i++)
                {
                    if (enemyList[i].gameObject.activeSelf)
                    {
                        enemyList[i].Process();
                    }
                }

                for (int i = 0; i < playerList.Length; i++)
                {
                    if (playerList[i].gameObject.activeSelf)
                    {
                        playerList[i].Process();
                    }
                }
                */
                break;
            case BattleState.playerChoosingCommand:
                ChoosingCommandManagement();
                break;
        }
    }
コード例 #22
0
ファイル: BattleScene.cs プロジェクト: kingcoyote/armadillo
        /// <summary>
        /// Process a character that has been selected by the player, showing a radial menu of options.
        /// </summary>
        /// <param name="character">The character whose options are to be displayed.</param>
        public void SelectCharacter(Combatant character)
        {
            // if they clicked on the character already being shown, assume they want to close the menu
            if (character == _selectedCharacter)
            {
                DeselectCharacter();
                return;
            }

            // you can only click on your characters during your turn
            if (_state != BattleState.PlayerTurn)
            {
                return;
            }
            if (character.Faction != 0)
            {
                return;
            }

            if (_radialMenuControl != null)
            {
                Gui.Screen.Desktop.Children.Remove(_radialMenuControl);
                _radialMenuControl = null;
            }


            var menu = new RadialMenuControl(((IInputService)Game.Services.GetService(typeof(IInputService))).GetMouse())
            {
                CenterX = (int)character.Avatar.Sprite.X + character.Avatar.Sprite.Width / 2 - 10,
                CenterY = (int)character.Avatar.Sprite.Y + character.Avatar.Sprite.Height / 2,
                OnExit  = DeselectCharacter
            };

            // move icon, plus event handlers
            var icon = new RadialButtonControl {
                ImageFrame = "move", Bounds = new UniRectangle(0, 0, 64, 64)
            };

            if (character.CanMove)
            {
                icon.MouseOver += () =>
                {
                    if (!character.CanMove)
                    {
                        return;
                    }

                    _battleBoardLayer.SetTargettingGrid(
                        character.GetMovementGrid(BattleBoard.GetAccessibleGrid(character.Faction)),
                        new Grid(1, 1)
                        );
                };
                icon.MouseOut += () => { if (_aimAbility == null)
                                         {
                                             _battleBoardLayer.ResetGrid();
                                         }
                };
                icon.MouseClick += () => { SelectAbilityTarget(character, Ability.Factory(Game, "move"));
                                           _aimTime = DateTime.Now; };
            }
            else
            {
                // if they can't move, this icon does nothing
                icon.MouseOver    = () => { };
                icon.MouseOut     = () => { };
                icon.MouseClick   = () => { };
                icon.MouseRelease = () => { };
                icon.Enabled      = false;
            }

            menu.AddOption("move", icon);

            //// attack icon, plus handlers
            icon = new RadialButtonControl {
                ImageFrame = "attack", Bounds = new UniRectangle(0, 0, 64, 64)
            };
            if (character.CanAct)
            {
                var ability = Ability.Factory(Game, "attack");
                ability.Character = character;

                icon.MouseOver += () =>
                {
                    if (!character.CanAct)
                    {
                        return;
                    }

                    _battleBoardLayer.SetTargettingGrid(
                        ability.GenerateTargetGrid(BattleBoard.Sandbag.Clone()),
                        new Grid(1, 1)
                        );
                };
                icon.MouseOut += () => { if (_aimAbility == null)
                                         {
                                             _battleBoardLayer.ResetGrid();
                                         }
                };

                icon.MouseRelease += () => { SelectAbilityTarget(character, ability);
                                             _aimTime = DateTime.Now; };
            }
            else
            {
                // if they can't act, this icon does nothing
                icon.MouseOver    = () => { };
                icon.MouseOut     = () => { };
                icon.MouseClick   = () => { };
                icon.MouseRelease = () => { };
                icon.Enabled      = false;
            }

            menu.AddOption("attack", icon);

            //// special abilities icon, plus event handlers
            icon = new RadialButtonControl {
                ImageFrame = "special", Bounds = new UniRectangle(0, 0, 64, 64)
            };
            if (character.CanAct)
            {
                icon.MouseRelease += () => SelectSpecialAbility(character);
            }
            else
            {
                // if they can't act, this icon does nothing
                icon.MouseOver    = () => { };
                icon.MouseOut     = () => { };
                icon.MouseClick   = () => { };
                icon.MouseRelease = () => { };
                icon.Enabled      = false;
            }
            menu.AddOption("special", icon);

            icon = new RadialButtonControl
            {
                ImageFrame = "item", Bounds = new UniRectangle(0, 0, 64, 64), Enabled = false
            };
            menu.AddOption("item", icon);

            _radialMenuControl = menu;
            Gui.Screen.Desktop.Children.Add(_radialMenuControl);

            _selectedCharacter = character;
            _state             = BattleState.CharacterSelected;
        }
コード例 #23
0
ファイル: Hattori.cs プロジェクト: sjai013/RPG
    protected override IEnumerator doAttackAnimation(BattleState.State nextState)
    {
        coroutines.doAnimation = true;
        this.transform.LookAt(combatSettings.target.transform);
        anim.SetFloat(animHash.getHash("moveSpeedFloat"), 0.1f);

        Ability.AnimationSequence[] animSequence = null;
        switch (combatSettings.ability.getAbilityType())
        {
            case "Physical":
                animSequence = new Ability.AnimationSequence[1];

                if (damageDone.crit)
                {
                    animSequence[0].animState = animHash.getHash("criticalAttackState");
                    animSequence[0].animTrigger = animHash.getHash("criticalAttackTrigger");
                    animSequence[0].nextStateTime = 0.3f;
                }
                else
                {
                    animSequence[0].animState = animHash.getHash("attackState");
                    animSequence[0].animTrigger = animHash.getHash("attackTrigger");
                    animSequence[0].nextStateTime = 0.4f;
                }

                break;

            case "Magic":
                animSequence = new Ability.AnimationSequence[1];
                animSequence[0].animState = animHash.getHash("castState");
                animSequence[0].animTrigger = animHash.getHash("castTrigger");
                animSequence[0].nextStateTime = 0.8f;
                break;

            case "Wait":
                animSequence = new Ability.AnimationSequence[1];
                animSequence[0].animState = animHash.getHash("stockState");
                animSequence[0].animTrigger = animHash.getHash("stockTrigger");
                animSequence[0].nextStateTime = 0.5f;
                break;

            default:
                break;
        }

        while (!combatSettings.ability.doAnimation(this.gameObject, combatSettings.target, animSequence))
        {
            yield return null;
        }

        combatSettings.attack = false;
        state.setState(nextState);
        coroutines.doAnimation = false;
    }
コード例 #24
0
ファイル: BattleScene.cs プロジェクト: kingcoyote/armadillo
        /// <summary>
        /// Initialize a battle sequence by name. This call happens at the start of a battle and is required
        /// for this scene to not die a horrible death.
        /// </summary>
        /// <param name="battleName">Name of the battle to be initialized</param>
        public void SetBattle(string battleName)
        {
            // set up defaults

            BattleBoard = new BattleBoard();

            RoundNumber = 0;
            FactionTurn = 0;
            _state      = BattleState.PlayerTurn;
            var partyGrid = new List <Point>();

            _battleBoardLayer = new BattleBoardLayer(this, null);
            _battleBoardLayer.CharacterSelected += SelectCharacter;

            Components.Add(_battleBoardLayer);

            switch (battleName)
            {
            case "coliseum/halls":
                _battleBoardLayer.SetBackground("Zones/Coliseum/Halls/north");
                _battleBoardLayer.SetGrid("Zones/Coliseum/Halls/battle");
                BattleBoard.Sandbag = Grid.FromBitmap(Game.Services, "Zones/Coliseum/Halls/battle");
                _battleBoardLayer.AddImage(new ImageObject(Game, _battleBoardLayer, "Zones/Coliseum/Halls/north"));
                _battleBoardLayer.AddImage(new ImageObject(Game, _battleBoardLayer, "Zones/Coliseum/pillar")
                {
                    X = 393, Y = 190, DrawOrder = 248
                });
                _battleBoardLayer.AddImage(new ImageObject(Game, _battleBoardLayer, "Zones/Coliseum/pillar")
                {
                    X = 393, Y = 390, DrawOrder = 448
                });
                _battleBoardLayer.AddImage(new ImageObject(Game, _battleBoardLayer, "Zones/Coliseum/pillar")
                {
                    X = 393, Y = 590, DrawOrder = 648
                });
                _battleBoardLayer.AddImage(new ImageObject(Game, _battleBoardLayer, "Zones/Coliseum/pillar")
                {
                    X = 593, Y = 190, DrawOrder = 248
                });
                _battleBoardLayer.AddImage(new ImageObject(Game, _battleBoardLayer, "Zones/Coliseum/pillar")
                {
                    X = 593, Y = 390, DrawOrder = 448
                });
                _battleBoardLayer.AddImage(new ImageObject(Game, _battleBoardLayer, "Zones/Coliseum/pillar")
                {
                    X = 593, Y = 590, DrawOrder = 648
                });

                partyGrid.Add(new Point(10, 13));
                partyGrid.Add(new Point(11, 13));
                partyGrid.Add(new Point(9, 13));
                partyGrid.Add(new Point(10, 12));
                partyGrid.Add(new Point(11, 12));
                partyGrid.Add(new Point(9, 12));

                BattleBoard.Characters.Add(GenerateCombatant("Guard 1", "coliseum/guard", new Vector2(9, 3)));
                BattleBoard.Characters.Add(GenerateCombatant("Guard 2", "coliseum/guard", new Vector2(11, 3)));
                BattleBoard.Characters.Add(GenerateCombatant("Guard Captain", "coliseum/guard", new Vector2(10, 3)));

                BattleBoard.Characters.Add(GenerateCombatant("Guard 3", "coliseum/guard", new Vector2(9, 10)));
                BattleBoard.Characters.Add(GenerateCombatant("Guard 4", "coliseum/guard", new Vector2(11, 10)));
                BattleBoard.Characters.Add(GenerateCombatant("Guard 5", "coliseum/guard", new Vector2(10, 10)));

                _startingDialog = Dialog.Fetch("coliseum", "guards");

                break;

            default:
                throw new Exception("unknown battle " + battleName);
            }

            // add party to the party grid for this battle, in order
            for (var i = 0; i < ((SRPGGame)Game).Party.Count; i++)
            {
                var character = ((SRPGGame)Game).Party[i];
                character.Avatar.Location.X = partyGrid[i].X;
                character.Avatar.Location.Y = partyGrid[i].Y;
                BattleBoard.Characters.Add(character);
            }

            _battleBoardLayer.SetBoard(BattleBoard);
            _commander.BattleBoard = BattleBoard;

            // center camera on partyGrid[0]
            UpdateCamera(
                0 - partyGrid[0].X * 50 + Game.GraphicsDevice.Viewport.Width / 2,
                0 - partyGrid[0].Y * 50 + Game.GraphicsDevice.Viewport.Height / 2
                );

            ChangeFaction(0);
        }
コード例 #25
0
ファイル: BattleScene.cs プロジェクト: kingcoyote/armadillo
        /// <summary>
        /// Process a command given by either the AI or the player. These commands can be attacking, casting a spell,
        /// using an item or moving.
        /// </summary>
        /// <param name="command">The command to be executed.</param>
        public void ExecuteCommand(Command command)
        {
            _state = BattleState.ExecutingCommand;

            switch (command.Ability.Name)
            {
            case "Move":
            {
                // special case for movement
                var grid = BattleBoard.GetAccessibleGrid(command.Character.Faction);

                // run an A* pathfinding algorithm to get a route
                var coords = grid.Pathfind(new Point((int)command.Character.Avatar.Location.X, (int)command.Character.Avatar.Location.Y), command.Target);

                // remove any points on the path that don't require a direction change
                for (var i = coords.Count - 2; i > 0; i--)
                {
                    if (coords[i - 1].X == coords[i + 1].X || coords[i - 1].Y == coords[i + 1].Y)
                    {
                        coords.RemoveAt(i);
                    }
                }

                _movementCoords = coords;

                _state = BattleState.MovingCharacter;

                command.Character.CanMove = false;

                if (FactionTurn == 1)
                {
                    break;
                }

                // if this character has any queued commands, cancel them upon moving
                var queuedCommands = (from c in QueuedCommands where c.Character == command.Character select c).ToArray();

                if (queuedCommands.Length > 0)
                {
                    QueuedCommands.Remove(queuedCommands[0]);
                    command.Character.CanAct = true;
                }
            }
            break;

            default:
                var hits = command.Ability.GenerateHits(BattleBoard, command.Target);

                // remove any hits on characters that no longer exist
                for (var i = hits.Count - 1; i >= 0; i--)
                {
                    if (BattleBoard.GetCharacterAt(hits[i].Target) == null)
                    {
                        hits.RemoveAt(i);
                    }
                }

                _commander.RecordCommand(command, hits);

                // if this ability still has hits left, process them normally
                if (hits.Count > 0)
                {
                    command.Character.CanAct = false;
                    DisplayHits(hits);
                    command.Character.CurrentMana -= command.Ability.ManaCost;
                }

                break;
            }
        }
コード例 #26
0
ファイル: BattleScene.cs プロジェクト: kingcoyote/armadillo
 /// <summary>
 /// Receive a list of hits and change state to display those hits on screen, as well
 /// as process the damage.
 /// </summary>
 /// <param name="hits"></param>
 public void DisplayHits(List <Hit> hits)
 {
     _hits  = hits;
     _state = BattleState.DisplayingHits;
 }
コード例 #27
0
ファイル: BattleScene.cs プロジェクト: kingcoyote/armadillo
 /// <summary>
 /// Change state to execute commands
 /// </summary>
 public void ExecuteQueuedCommands()
 {
     _state = BattleState.ExecutingCommand;
 }
コード例 #28
0
    IEnumerator EnemyTurn()
    {
        yield return(new WaitForSeconds(1f));

        float randomNumber = Random.value; // pega numero aleatorio pra definir a acao do inimigo

        // A seguir a inteligencia artificial do inimigo
        if (randomNumber <= 0.5 || playerCarUnit.backWheelCurrentHP == 0 || playerCarUnit.frontWheelCurrentHP == 0) // aqui ele ataca o dano total do jogador
        {
            bool isTotalDead = playerCarUnit.TakeDamageTotalHP(enemyCarUnit.mainWeaponDamage);

            playerHUD.SetTotalHP(playerCarUnit);

            Instantiate(explosion, playerInitialPosition);

            if (isTotalDead)
            {
                state = BattleState.LOST;
                restartScreen.SetActive(true);
            }
            else
            {
                EnablePlayerActions();
                state = BattleState.PLAYERTURN;
            }
        }
        else if (randomNumber > 0.5 && randomNumber <= 0.75)   // aqui ele ataca as rodas da frente
        {
            bool isFrontWheelDead = playerCarUnit.TakeDamageFrontWheelHP(enemyCarUnit.mainWeaponDamage);

            playerHUD.SetFrontWheelHP(playerCarUnit);

            Instantiate(littleExplosion, playerInitialPosition);

            if (isFrontWheelDead)
            {
                StartCoroutine(PlayerWheelDestroyed());
                repairFrontWheelHPButton.gameObject.SetActive(false);

                if (playerCarUnit.ReturnCarCurrentHP(playerCarUnit.carCurrentHP))
                {
                    state = BattleState.LOST;
                    restartScreen.SetActive(true);
                }
                else
                {
                    EnablePlayerActions();
                    state = BattleState.PLAYERTURN;
                }
            }
            else
            {
                EnablePlayerActions();
                state = BattleState.PLAYERTURN;
            }
        }
        else   // aqui ele ataca as rodas de trás
        {
            bool isBackWheelDead = playerCarUnit.TakeDamageBackWheelHP(enemyCarUnit.mainWeaponDamage);

            playerHUD.SetBackWheelHP(playerCarUnit);

            Instantiate(littleExplosion, playerInitialPosition);

            if (isBackWheelDead)
            {
                StartCoroutine(PlayerWheelDestroyed());
                repairBackWheelHPButton.gameObject.SetActive(false);

                if (playerCarUnit.ReturnCarCurrentHP(playerCarUnit.carCurrentHP))
                {
                    state = BattleState.LOST;
                    restartScreen.SetActive(true);
                }
                else
                {
                    EnablePlayerActions();
                    state = BattleState.PLAYERTURN;
                }
            }
            else
            {
                EnablePlayerActions();
                state = BattleState.PLAYERTURN;
            }
        }
    }
コード例 #29
0
    IEnumerator FishTurn()
    {
        // pick a random action
        // if so, do the thing

        var fishAct = Random.Range(0, 2);

        if (fishAct == 0)
        {
            bool fishSwam = fishUnit.SwimAway();

            if (fishSwam)
            {
                fish_motion.SetTrigger("swim");
                mainText.text = "The fish struggles against the line.";
            }
            else
            {
                fish_motion.SetTrigger("rest");
                mainText.text = "The fish recovers its energy.";
            }
            UIman.updateUI(fishUnit);
        }

        if (fishAct == 1)
        {
            bool fishDove = fishUnit.DiveDeep();

            if (fishDove)
            {
                fish_motion.SetTrigger("dive");
                mainText.text = "The fish dives away from the boat.";
            }
            else
            {
                fish_motion.SetTrigger("rest");
                mainText.text = "The fish recovers its energy.";
            }
            UIman.updateUI(fishUnit);
        }

        if (fishAct == 2)
        {
            bool fishJuke = fishUnit.JukeSide();

            if (fishJuke)
            {
                fish_motion.SetTrigger("juke");
                mainText.text = "The fish flaisl wildly!";
            }
            else
            {
                fish_motion.SetTrigger("rest");
                mainText.text = "The fish recovers its energy.";
            }
            UIman.updateUI(fishUnit);
        }



        yield return(new WaitForSeconds(2f));

        bool caught  = fishUnit.caught;
        bool escaped = fishUnit.escaped;

        if (caught == true)
        {
            state = BattleState.WON;
            EndBattle();
        }

        if (escaped == true)
        {
            state = BattleState.LOST;
            EndBattle();
        }

        if (caught == false && escaped == false)
        {
            state = BattleState.PLAYERTURN;
            PlayerTurn();
        }
    }
コード例 #30
0
ファイル: MedicAI.cs プロジェクト: Alphadrake86/ProjectNeon
    public override IPlayedCard Play(int memberId, BattleState battleState, AIStrategy strategy)
    {
        var me            = battleState.Members[memberId];
        var playableCards = battleState.GetPlayableCards(memberId);
        var allies        = me.TeamType == TeamType.Enemies
            ? battleState.Enemies.Where(m => m.IsConscious())
            : battleState.Heroes.Where(m => m.IsConscious());

        var maybeCard = new Maybe <CardTypeData>();
        IEnumerable <CardTypeData> cardOptions = playableCards;
        // TODO: Dealing killing blow if possible with an attack card

        var attackCards = cardOptions.Where(c => c.Is(CardTag.Attack)).ToList();

        if (allies.Count() == 1 && attackCards.Any())
        {
            maybeCard = new Maybe <CardTypeData>(attackCards.MostExpensive());
        }

        // Don't play a heal if all allies are very healthy
        if (allies.All(a => a.CurrentHp() >= a.MaxHp() * 0.9))
        {
            cardOptions = cardOptions.Where(c => !c.Is(CardTag.Healing));
        }

        // Don't play a shield if all allies are already shielded
        if (allies.All(a => a.RemainingShieldCapacity() > a.MaxShield() * 0.7))
        {
            cardOptions = cardOptions.Where(x => !x.Is(CardTag.Defense, CardTag.Shield));
        }

        var card = maybeCard.IsPresent
            ? maybeCard.Value
            : cardOptions
                   .ToArray()
                   .Shuffled()
                   .OrderByDescending(c => c.Cost.Amount)
                   .ThenBy(c => CardTypePriority[c.Tags.First()]) // Maybe needs a better way to prioritze
                   .First();

        var targets = card.ActionSequences.Select(action =>
        {
            var possibleTargets = battleState.GetPossibleConsciousTargets(me, action.Group, action.Scope);
            if (card.Is(CardTag.Healing))
            {
                return(possibleTargets.MostDamaged());
            }
            if (card.Is(CardTag.Defense, CardTag.Shield))
            {
                if (possibleTargets.Any(x => !x.HasShield()))
                {
                    return(possibleTargets.Where(x => !x.HasShield())
                           .MostVulnerable());
                }
                // Or, use shield to whomever could use the most
                return(possibleTargets.OrderByDescending(x => x.TotalRemainingShieldCapacity()).First());
            }

            if (card.Is(CardTag.Attack))
            {
                return(strategy.AttackTargetFor(action));
            }
            return(possibleTargets.Random());
        });

        var cardInstance = card.CreateInstance(battleState.GetNextCardId(), me);

        return(new PlayedCardV2(me, targets.ToArray(), cardInstance));
    }
コード例 #31
0
ファイル: Usable.cs プロジェクト: Ammybinks/RPG-Game
 public virtual bool Call(GameTime gameTime, BattleState battleState)
 {
     return(true);
 }
コード例 #32
0
    void Update()
    {
        switch (currentState)
        {
        case BattleState.STARTING:
            if (allSkills == null)
            {
                allSkills     = new Skill[15];
                allSkills[0]  = idols[0].skills[0];
                allSkills[1]  = idols[0].skills[1];
                allSkills[2]  = idols[0].skills[2];
                allSkills[3]  = idols[0].skills[3];
                allSkills[4]  = idols[0].skills[4];
                allSkills[5]  = idols[1].skills[0];
                allSkills[6]  = idols[1].skills[1];
                allSkills[7]  = idols[1].skills[2];
                allSkills[8]  = idols[1].skills[3];
                allSkills[9]  = idols[1].skills[4];
                allSkills[10] = idols[2].skills[0];
                allSkills[11] = idols[2].skills[1];
                allSkills[12] = idols[2].skills[2];
                allSkills[13] = idols[2].skills[3];
                allSkills[14] = idols[2].skills[4];
            }
            currentState = BattleState.WAITING;
            break;

        case BattleState.WAITING:
            int a, b, c, d, e;

            a = Random.Range(0, 14);
            b = Random.Range(0, 14);
            while (a == b)
            {
                b = Random.Range(0, 14);
            }
            c = Random.Range(0, 14);
            while (c == a || c == b)
            {
                c = Random.Range(0, 14);
            }
            d = Random.Range(0, 14);
            while (d == a || d == b || d == c)
            {
                d = Random.Range(0, 14);
            }
            e = Random.Range(0, 14);
            while (e == a || e == b || e == c || e == d)
            {
                e = Random.Range(0, 14);
            }

            skillCards[0].setSkill(allSkills[a]);
            skillCards[1].setSkill(allSkills[b]);
            skillCards[2].setSkill(allSkills[c]);
            skillCards[3].setSkill(allSkills[d]);
            skillCards[4].setSkill(allSkills[e]);

            selectedSkills.Clear();

            currentState = BattleState.PLAYER_SELECTING_ACTIONS;
            //skillHUDPanel.transform.localPosition = originalHUDPos;
            break;

        case BattleState.PLAYER_SELECTING_ACTIONS:
            //hudTimeTraveling = 0;
            if (hudTimeTraveling > 0)
            {
                hudTimeTraveling -= Time.deltaTime;
                float   t      = hudTimeTraveling / timeForUIOffscreen;
                Vector3 newPos = Vector3.Lerp(originalHUDPos, hudOffscreenPos, t);
                skillHUDPanel.transform.localPosition = newPos;
            }
            break;

        case BattleState.PERFORMING_ACTIONS:
            if (hudTimeTraveling < timeForUIOffscreen)
            {
                hudTimeTraveling += Time.deltaTime;
                float   t      = hudTimeTraveling / timeForUIOffscreen;
                Vector3 newPos = Vector3.Lerp(originalHUDPos, hudOffscreenPos, t);
                skillHUDPanel.transform.localPosition = newPos;
            }

            if (currentActor.currentState != IdolStateMachine.IdolState.ACTION)
            {
                if (nextActor < selectedSkills.Count)
                {
                    currentSkillCard.setSkill(selectedSkills[nextActor]);
                    currentActor = selectedSkills[nextActor++].readyPerformance();
                }
                else
                {
                    currentSkillPanel.SetActive(false);
                    // Idols finished their actions
                    currentState = BattleState.CROWD_ACTIONS;
                }
            }
            break;

        case BattleState.CROWD_ACTIONS:
            //CrowdStateMachine crowd = GameObject.Find("CrowdMember").GetComponent<CrowdStateMachine>();
            //crowd.startAction();
            crowdMan.update();

            break;
        }
    }
コード例 #33
0
    /* TODO: CHANGE THIS SO IT WORKS WITH ABILITIES

        return value indicates if action could have been carried out
    */
    public void performAction(PossibleAction posAc)
    {
        switch (posAc)
        {
            case PossibleAction.ATTACK:
                currentState = BattleState.CALCDAMAGE;
                break;
            case PossibleAction.CHARACTER_DIED:
                currentState = BattleState.WAITING;
                break;
            default:
                break;
        }
    }
コード例 #34
0
    void Start()
    {
        //positionHolders = new List<GameObject>(GameObject.FindGameObjectsWithTag("PositionPlaceholder"));

        idolHUDPanel   = GameObject.Find("IdolHUDs");
        skillHUDPanel  = GameObject.Find("SkillHUD");
        originalHUDPos = skillHUDPanel.transform.localPosition;
        RectTransform rt = skillHUDPanel.transform.GetComponent <RectTransform>();

        hudOffscreenPos = originalHUDPos;
        //hudOffscreenPos.x += rt.sizeDelta.x * rt.localScale.x;
        hudOffscreenPos.x = rt.rect.width;
        print(hudOffscreenPos.x + "");

        skillCards[0] = GameObject.Find("SkillCard (0)").GetComponent <SkillCardController>();
        skillCards[1] = GameObject.Find("SkillCard (1)").GetComponent <SkillCardController>();
        skillCards[2] = GameObject.Find("SkillCard (2)").GetComponent <SkillCardController>();
        skillCards[3] = GameObject.Find("SkillCard (3)").GetComponent <SkillCardController>();
        skillCards[4] = GameObject.Find("SkillCard (4)").GetComponent <SkillCardController>();

        currentSkillPanel = GameObject.Find("CurrentSkill");
        currentSkillPanel.SetActive(false);
        currentSkillCard = currentSkillPanel.GetComponentInChildren <SkillCardController>();

        position1 = GameObject.Find("position1");
        position1.gameObject.GetComponent <SpriteRenderer>().sortingLayerName = backgroundLayer;
        position2 = GameObject.Find("position2");
        position2.gameObject.GetComponent <SpriteRenderer>().sortingLayerName = backgroundLayer;
        position3 = GameObject.Find("position3");
        position3.gameObject.GetComponent <SpriteRenderer>().sortingLayerName = backgroundLayer;



        idols = new List <IdolStateMachine>();

        GameObject       idol  = (GameObject)UnityEditor.AssetDatabase.LoadAssetAtPath <Object>("Assets/Prefabs/Idol Achan.prefab");
        GameObject       clone = GameObject.Instantiate(idol, position1.transform.position, idol.transform.rotation);
        IdolStateMachine ism   = clone.GetComponent <IdolStateMachine>();

        ism.setHUD(GameObject.Find("IdolHUD (1)").transform);

        idols.Add(ism);


        idol  = (GameObject)UnityEditor.AssetDatabase.LoadAssetAtPath <Object>("Assets/Prefabs/Idol Bchan.prefab");
        clone = GameObject.Instantiate(idol, position2.transform.position, idol.transform.rotation);
        ism   = clone.GetComponent <IdolStateMachine>();
        ism.setHUD(GameObject.Find("IdolHUD (2)").transform);

        idols.Add(ism);


        idol  = (GameObject)UnityEditor.AssetDatabase.LoadAssetAtPath <Object>("Assets/Prefabs/Idol Cchan.prefab");
        clone = GameObject.Instantiate(idol, position3.transform.position, idol.transform.rotation);
        ism   = clone.GetComponent <IdolStateMachine>();
        ism.setHUD(GameObject.Find("IdolHUD (3)").transform);

        idols.Add(ism);

        currentState = BattleState.STARTING;

        crowdMan = new CrowdController();
    }
コード例 #35
0
	/* Update is called once per frame
       The function works like this:
            - The turnQueue is queried to see if someone's turn should begin
            - Depending on the state of the battle, a turn is executed, nothing happens...etc
            - Finally, the waiting times are updated according to Time.Delta
    */
	void Update () {
        //The current battle state determines what actions can be taken.
        checkForTurn();
        checkEndOfBattle();
	    switch(currentState)
        {
            case BattleState.START:
                // Start of the battle.
                UIStateController.Instance.enableMenu("waiting");
                UIStateController.Instance.updateCharacterAndEnemiesText();
                currentState = BattleState.WAITING;
                break;
            case BattleState.WAITING:
                // Idle phase, nothing happens.
                /* DIFFERENTS EFFECTS COUlD BE APPLIED:
                        - Check if buffs / debuffs end (speed up, poison...)
                        - Apply effects such as poison
                        - Regeneration (Perhaps armor fell off and is being regenerated)
                */
                break;
            case BattleState.PLAYERTURN:
                // Player turn starts and 
                // Start GUI showing the "initial" menu state.
                if (allyTurnReady == null)
                {
                    QueuedEntity allyqe = turnQueue.Dequeue();
                    allyTurnReady = (BaseCharacterClass)allyqe.entity;
                    UIStateController.Instance.enableMenu("initial");
                    UIStateController.Instance.personaliseMenuToCharacter(allyTurnReady);
                }
                
                currentState = BattleState.WAITING;
                break;
            case BattleState.ENEMYTURN:
                // Enemy's turn starts
                QueuedEntity enemyqe = turnQueue.Dequeue();
                BaseEnemy enemy = (BaseEnemy)enemyqe.entity;

                // To ensure that dead units are not targeted, filter them out.
                Entity target   = enemy.strategy(Array.FindAll(alliedCharacters, e => !e.isDead()),
                                                 Array.FindAll(enemies, e => !e.isDead()));


                Debug.Log(enemy.getName() + " Attacks " + target.getName() + " for " + enemy.attack + " damage");
                target.takeDamage(enemy.attack);

                turnQueue.Enqueue(new QueuedEntity(enemy), enemy.speed);
                UIStateController.Instance.updateCharacterAndEnemiesText();
                currentState = BattleState.WAITING;
                break;
            case BattleState.CALCDAMAGE:
                // Calculates dmg to target(s)
                BattleAbilityUseHandler abilityHandler = new BattleAbilityUseHandler(ref allyTurnReady, playerTargetIndex,
                                                                                      ref alliedCharacters, ref enemies);
                abilityHandler.calculateDamage();
                int castingTIme = abilityHandler.calculateCastingTime();
                this.playerTargetIndex = -1;

                turnQueue.Enqueue(new QueuedEntity(allyTurnReady), castingTIme);
                this.allyTurnReady = null;
                currentState = BattleState.WAITING;
                UIStateController.Instance.updateCharacterAndEnemiesText();
                break;
            case BattleState.ADDSTATUSEFFECT:
                // Adds special status such as poison.
                break;
            case BattleState.WIN:
                /* All enemies have been defeated, we store the relevant information in GameInformation
                   and we get back to the map */
                //GameInformation.alliedCharacters = alliedCharacters;
                Debug.Log("GAME WON");
                break;
            case BattleState.LOSE:
                // All allied characters have been defeated.
                Debug.Log("GAME LOST");
                break;
            default:
                break;
        }
        // If it's a character's turn, check if he / she has died
        checkIfAllyTurnReadyIsDead();



        // Update the turnque in order to reflect time passing.
        updateTurnQueue(Time.deltaTime);

    }
コード例 #36
0
 private void SendMessageToManager(ICharactersManager manager, BattleState _state)
 {
     manager.RecieveMessage(_state);
 }
コード例 #37
0
ファイル: BattleField.cs プロジェクト: yening520/SLG_Warriors
        //开始战斗
        private void Fight()
        {
            battleState = BattleState.Fighting;

            BattleUnit actionUnit = null;

            do
            {
                //连接渲染器,则一步一更新
                //没有连接渲染器,则一直计算直到结束
                actionUnit = actionQueue.Peek();
                if (firstFight)
                {
                    firstFight = false;
                }
                else
                {
                    if (actionUnit.BPStage)
                    {
                        UtilityHelper.Log("We are in BP stage, continue to fight");
                        actionUnit.battleUnitAttribute.BPUsed();
                    }
                    else
                    {
                        UtilityHelper.Log("change queue order");
                        if (actionUnit.battleUnitAttribute.BPUsingStage())
                        {
                            actionUnit.battleUnitAttribute.OutOfBPAction();
                        }
                        actionQueue.Dequeue();
                        CalculateNextAction(actionUnit);
                        actionUnit = actionQueue.Peek();
                    }
                }

                //增加BP值
                if (actionUnit.battleUnitAttribute.manualOperation &&
                    actionUnit.battleUnitAttribute.BPUsingStage() == false)
                {
                    if (actionUnit.battleUnitAttribute.BP < EGameConstL.BPMax)
                    {
                        actionUnit.battleUnitAttribute.BP++;
                    }
                }

                if (actionUnit == null)
                {
                    battleState = BattleState.End;
                    break;
                }

                if (actionUnit.CanAction)
                {
                    HeroActionState state = actionUnit.BattleAction();

                    switch (state)
                    {
                    case HeroActionState.Normal:
                        battleState = BattleState.Fighting;
                        break;

                    case HeroActionState.WaitForPlayerChoose:
                        battleState = BattleState.WaitForPlayer;
                        break;

                    case HeroActionState.Error:
                        battleState = BattleState.Exception;
                        break;

                    case HeroActionState.Warn:
                        battleState = BattleState.Exception;
                        UtilityHelper.LogWarning(string.Format("Warning: battle action state warning -> {0}", actionUnit.ToString()));
                        break;

                    default:
                        break;
                    }
                }

                if (battleFieldEvents.Count > EGameConstL.BattleFieldMaxActions)
                {
                    UtilityHelper.LogError("Battle actions overflow max limit.");
                    battleState = BattleState.Exception;
                }
                else
                {
                    //只在这种情况下做战斗结束的判断
                    if (!actionUnit.CanAction ||
                        actionUnit.targetBattleUnit == null ||
                        !actionUnit.targetBattleUnit.CanAction)
                    {
                        CheckBattleEnd();
                    }
                }
            } while (battleFieldRenderer == null &&
                     battleState != BattleState.End &&
                     battleState != BattleState.Exception);

            //连接了渲染器,一步一表现
            if (battleFieldRenderer != null)
            {
                if (battleState == BattleState.WaitForPlayer)
                {
                    battleFieldRenderer.PlayBattle(null);
                }

                else
                {
                    battleFieldRenderer.PlayBattle(Run);
                }
            }
            else
            {
                Run();
            }
        }
コード例 #38
0
    IEnumerator glassCannonAttacks()
    {
        //glass cannon has the chance to 'hold an attack' by lighting its fuse. we need to make sure not to do typical
        //attack sequence if it needs to use this other attack.

        System.Random getRandom = new System.Random();

        if (isLoading)
        {
            isLoading = false;
            int totalDamage = (enemyUnit.stats [2] * 2) - playerLevel.stats [3];
            int randomNum   = getRandom.Next(0, 11);
            if (randomNum != 1)
            {
                dialogueText.text = "Glass Cannon fires.";
                bool isDead = playerUnit.TakeDamage(totalDamage);

                playerHUD.SetHP(playerUnit.currentHP);

                yield return(new WaitForSeconds(2f));

                if (isDead)
                {
                    state = BattleState.LOST;
                    StartCoroutine(EndBattle());
                    yield break;
                }
                else
                {
                    state = BattleState.PLAYERTURN;
                    PlayerTurn();
                    yield break;
                }
            }
            else
            {
                dialogueText.text = "Glass Cannon misfires.";
                bool isDead = enemyUnit.TakeDamage(totalDamage);

                enemyHUD.SetHP(enemyUnit.currentHP);
                yield return(new WaitForSeconds(2f));

                if (isDead)
                {
                    state = BattleState.WON;
                    StartCoroutine(EndBattle());
                    yield break;
                }
                else
                {
                    state = BattleState.PLAYERTURN;
                    PlayerTurn();
                    yield break;
                }
            }
        }
        else if (!isLoading)
        {
            int randomNum = getRandom.Next(1, 5);

            //IDLE
            if (randomNum == 1)
            {
                dialogueText.text = "Glass Cannon loosens up.";
                yield return(new WaitForSeconds(2f));

                state = BattleState.PLAYERTURN;
                PlayerTurn();
                //ATTACK
            }
            else if (randomNum == 2)
            {
                //Flavor text
                dialogueText.text = "Glass Cannon cuts you with its sharp edges.";
            }
            else
            {
                dialogueText.text = "Glass Cannon lights its fuse.";
                isLoading         = true;
                yield return(new WaitForSeconds(2f));

                Debug.Log("lit fuse");
                state = BattleState.PLAYERTURN;
                PlayerTurn();
                yield break;
            }

            if (randomNum == 2)
            {
                //Determine hit chance
                System.Random hitRandom = new System.Random();
                randomNum = hitRandom.Next(0, 101);

                int hitChance = 95 - (playerLevel.stats [4] - enemyUnit.stats [4]);

                if (hitChance < 50)
                {
                    hitChance = 50;
                }

                //Determine if attack hits
                bool doesHit;
                if (randomNum < hitChance)
                {
                    Debug.Log("Glass Cannon hits!");
                    doesHit = true;
                }
                else
                {
                    Debug.Log("Glass Cannon misses :(");
                    doesHit = false;
                }

                //If attack does not hit, inform player and then switch back to PLAYERTURN
                if (!doesHit)
                {
                    yield return(new WaitForSeconds(2f));

                    dialogueText.text = "The attack missed!";
                    state             = BattleState.PLAYERTURN;
                    PlayerTurn();
                    yield break;
                }

                //If attack does hit, calculate damage
                //For Glass cannon, it only does standard attack damage except for inside of its firing section
                int totalDamage = (enemyUnit.stats [2] * 2) - playerLevel.stats [3];


                if (totalDamage < 1)
                {
                    totalDamage = 1;
                }

                Debug.Log("Total Enemy Damage by Glass Cannon: " + totalDamage);

                //Use this TakeDamage() function to deal the proper amount of damage to player
                bool isDead = playerUnit.TakeDamage(totalDamage);

                playerHUD.SetHP(playerUnit.currentHP);

                yield return(new WaitForSeconds(2f));

                if (isDead)
                {
                    state = BattleState.LOST;
                    StartCoroutine(EndBattle());
                    yield break;
                }
                else
                {
                    state = BattleState.PLAYERTURN;
                    PlayerTurn();
                    yield break;
                }
            }
        }
    }
コード例 #39
0
ファイル: BattleSystem.cs プロジェクト: ofaura/GameDesign
    IEnumerator PlayerAttack()
    {
        if (bot_vs_bot && !playerAttack) //If the combat is simulated or spected by the player
        {
            enemyUnit.ChooseMinion();
            playerUnit.ChooseMinion(true);
        }

        if (playerUnit.selected_minion.speed >= enemyUnit.selected_minion.speed || playerAttack)
        {
            float damage_taken = enemyUnit.selected_minion.CalculateTakenDamage(playerUnit.selected_minion);
            enemyUnit.currentHP -= damage_taken;

            bool isDead = false;
            if (enemyUnit.currentHP <= 0)
            {
                isDead = true;
            }
            else
            {
                isDead = false;
            }

            enemyHUD.SetHP(enemyUnit.currentHP);
            dialogueText.text = playerUnit.selected_minion.name + ", attack!";


            if (extracting_simulation_data)
            {
                yield return(new WaitForSeconds(0f));
            }

            else
            {
                yield return(new WaitForSeconds(2f));
            }

            if (isDead)
            {
                state = BattleState.WON;
                enemyUnit.RestMinion();

                EndBattle();
                yield break;
            }

            if (playerAttack)
            {
                state = BattleState.ENDTURN;
                StartCoroutine(EndTurn());
            }

            else
            {
                state = BattleState.ENEMYTURN;
                StartCoroutine(EnemyTurn());
            }

            playerAttack = false;
        }

        else
        {
            state = BattleState.ENEMYTURN;
            StartCoroutine(EnemyTurn());
        }
    }
コード例 #40
0
    IEnumerator caplingAttacks()
    {
        //There is a lot of randomness in enemy attacks, so it needs to start with randomly picking between x enemy attacks
        System.Random getRandom = new System.Random();

        int  randomNum        = getRandom.Next(1, 5);
        bool causesBubblebutt = false;

        //IDLE
        if (randomNum == 1)
        {
            dialogueText.text = "Capling tries to hoist a flag that is no longer there.";
            yield return(new WaitForSeconds(2f));

            state = BattleState.PLAYERTURN;
            PlayerTurn();
            yield break;
            //ATTACK
        }
        else
        {
            if (randomNum == 2)
            {
                //Flavor text
                dialogueText.text = "Capling jumps down your throat.";
                randomNum         = getRandom.Next(1, 5);
                if (randomNum == 4)
                {
                    Debug.Log("bubblebutt :P");
                    causesBubblebutt = true;
                }
            }
            else
            {
                dialogueText.text = "Capling scratches you with its hook hand.";
            }
            //Determine hit chance
            System.Random hitRandom = new System.Random();
            randomNum = hitRandom.Next(0, 101);

            int hitChance = 95 - (playerLevel.stats [4] - enemyUnit.stats [4]);

            if (hitChance < 50)
            {
                hitChance = 50;
            }

            //Determine if attack hits
            bool doesHit;
            if (randomNum < hitChance)
            {
                Debug.Log("Capling hits!");
                doesHit = true;
            }
            else
            {
                Debug.Log("Capling misses :(");
                doesHit = false;
            }

            //If attack does not hit, inform player and then switch back to PLAYERTURN
            if (!doesHit)
            {
                yield return(new WaitForSeconds(2f));

                dialogueText.text = "The attack missed!";
                yield return(new WaitForSeconds(2f));

                state = BattleState.PLAYERTURN;
                PlayerTurn();
                yield break;
            }

            //If attack does hit, calculate damage
            //For Capling, damage changes depending on which of its two attacks it uses. If the randomNum generated is 2, it needs
            //to do skill damage and check for bubblebutt. 50% of the time is regular attack damage (randomNums 3 and 4)

            int totalDamage = 1;

            if (randomNum == 2)
            {
                Debug.Log(" a throat jump");
                totalDamage = (enemyUnit.stats [2] * 2) - playerLevel.stats [3];
            }
            else
            {
                totalDamage = (enemyUnit.stats [0] * 2) - playerLevel.stats [1];
            }

            if (totalDamage < 1)
            {
                totalDamage = 1;
            }

            Debug.Log("Total Enemy Damage by Capling: " + totalDamage);

            //Use this TakeDamage() function to deal the proper amount of damage to player
            bool isDead = playerUnit.TakeDamage(totalDamage);

            playerHUD.SetHP(playerUnit.currentHP);

            yield return(new WaitForSeconds(2f));

            if (causesBubblebutt)
            {
                dialogueText.text     = "You have been inflicted with Bubblebutt. Gases built up inside of you cause you to float! Your mobility is reduced to 0.";
                playerLevel.stats [4] = 0;
                hasBubbleButt         = true;
                yield return(new WaitForSeconds(2f));
            }

            if (isDead)
            {
                state = BattleState.LOST;
                StartCoroutine(EndBattle());
                yield break;
            }
            else
            {
                state = BattleState.PLAYERTURN;
                PlayerTurn();
                yield break;
            }
        }
    }
コード例 #41
0
    public override void BattleStateChanged(BattleState bState) {
		
		//Debug.Log (this.Identifier + "BattleState: " + bState);
		
		if(bState == BattleState.CONFUSING)
		{
			panelText.text = this.Entity.Identifier + " is confusing and hit himself";
		}
		ExecuteChangeBattleState();
    }
コード例 #42
0
    IEnumerator PlayerAttack(Button button)
    {
        //damage the enemy
        bool   isDead;
        Attack thisAttack = button.GetComponent <Attack>();

        //if the character uses a 'skill' attack vs an 'attack' attack, we need to remove SP so it's important to have a variable let
        //us know.
        //After the character selects a skill, we stop displaying them and instead display dialogue
        skills.SetActive(false);
        dialogueBox.SetActive(true);

        //Hit chance: 95% - (Opponent Mobility - Your Mobility) to a minimum of 50%
        bool doesHit;

        //need to check for hit before we can determine damage
        System.Random getRandom = new System.Random();
        int           randomNum = getRandom.Next(0, 101);

        dialogueText.text = "You attack the enemy!";

        int hitChance = 95 - (enemyUnit.stats [4] - playerLevel.stats [4]);

        if (hitChance < 50)
        {
            hitChance = 50;
        }

        if (randomNum < hitChance)
        {
            Debug.Log("Player hits!");
            doesHit = true;
        }
        else
        {
            Debug.Log("Player misses :(");
            doesHit = false;
        }

        //If the player's attack misses, all we need to do is let them know and then proceed with the enemy's turn
        if (!doesHit)
        {
            yield return(new WaitForSeconds(2f));

            dialogueText.text = "The attack missed!";
            yield return(new WaitForSeconds(2f));

            state = BattleState.ENEMYTURN;
            StartCoroutine(EnemyTurn());
        }

        int totalDamage = 1;

        //On a hit, we need to start with calculating base damage for the attack
        if (doesHit)
        {
            //Uses this formula: (Your Attack * 2) - (Opponent Defense) to a minimum of 1.
            if (!thisAttack.isSkill)
            {
                totalDamage = (playerLevel.stats [0] * 2) - enemyUnit.stats [1];
            }
            else
            {
                totalDamage = (playerLevel.stats [2] * 2) - enemyUnit.stats [3];
            }

            if (totalDamage < 1)
            {
                totalDamage = 1;
            }

            Debug.Log("Total Damage " + totalDamage);

            if (enemyUnit.type == "trash")
            {
                if (thisAttack.type == "trash")
                {
                    isDead            = enemyUnit.TakeDamage(totalDamage * 2 * thisAttack.damage);
                    dialogueText.text = "You deal extra damage with the correct waste disposal method!";
                }
                else
                {
                    isDead            = enemyUnit.TakeDamage(totalDamage * thisAttack.damage);
                    dialogueText.text = "There may be a more proper way to handle this enemy";
                }
            }
            else if (enemyUnit.type == "recycle")
            {
                print(thisAttack.type);
                if (thisAttack.type == "recycle")
                {
                    isDead            = enemyUnit.TakeDamage(totalDamage * 2 * thisAttack.damage);
                    dialogueText.text = "You deal extra damage with the correct waste disposal method!";
                }
                else
                {
                    isDead            = enemyUnit.TakeDamage(totalDamage * thisAttack.damage);
                    dialogueText.text = "There may be a more proper way to handle this enemy";
                }
            }
            else
            {
                if (thisAttack.type == "compost")
                {
                    isDead            = enemyUnit.TakeDamage(totalDamage * 2 * thisAttack.damage);
                    dialogueText.text = "You deal extra damage with the correct waste disposal method!";
                }
                else
                {
                    isDead            = enemyUnit.TakeDamage(totalDamage * thisAttack.damage);
                    dialogueText.text = "There may be a more proper way to handle this enemy";
                }
            }

            //We need to reset enemy HP after they take damage
            enemyHUD.SetHP(enemyUnit.currentHP);

            yield return(new WaitForSeconds(2f));

            //check if the enemy is dead
            //change state based on result
            if (isDead)
            {
                //End the battle
                state = BattleState.WON;
                StartCoroutine(EndBattle());
            }
            else
            {
                //Enemy Turn
                state = BattleState.ENEMYTURN;
                StartCoroutine(EnemyTurn());
            }
        }
    }
コード例 #43
0
ファイル: Creature.cs プロジェクト: LaudableBauble/Insipidus
 /// <summary>
 /// Initialize the creature.
 /// </summary>
 private void Initialize()
 {
     //Initialize the class.
     _Gender = Gender.Male;
     _Types = new List<PokemonType>();
     _Moves = new List<Move>();
     _Sprite = new SpriteManager();
     _MaxEnergy = 100;
     _CurrentEnergy = _MaxEnergy;
     _Position = Vector2.Zero;
     _Velocity = Vector2.Zero;
     _TimeBetweenMoving = .01f;
     _ElapsedMovementTime = 0;
     _ElapsedEnergyTime = 0;
     _EnergyRecoverySpeed = .1f;
     _BattleState = BattleState.Idle;
     _FacingDirection = Direction.Down;
     _MovementSpeed = InsipidusEngine.SpeedType.Still;
 }
コード例 #44
0
 public MoveActorRenderer(BattleState battleState, ThinkRenderer thinkRenderer)
     : base(battleState)
 {
     tintOtherPartyMembers(new Color(Color.White.ToVector3() * 0.7f));
     this.thinkRenderer = thinkRenderer;
 }
コード例 #45
0
 /// <summary>
 /// Constructor for a modify event.
 /// </summary>
 /// <param name="timeline">The timeline this event is part of.</param>
 /// <param name="start">The start of the event.</param>
 /// <param name="dependentOn">An optional event to be dependent upon, ie. wait for.</param>
 /// <param name="character">The character who health will be modified.</param>
 /// <param name="state">The state to change into.</param>
 public ModifyStateEvent(Timeline timeline, float start, TimelineEvent dependentOn, Creature character, BattleState state)
 {
     Initialize(timeline, start, dependentOn, character, state);
 }
コード例 #46
0
 public void OnBackSelected()
 {
     state = BattleState.PLAYERTURN;
     PlayerTurn();
 }
コード例 #47
0
ファイル: EnemySelect.cs プロジェクト: 9volt/pm_test
 // Update is called once per frame
 public override void Reset()
 {
     bs = GameObject.FindGameObjectWithTag("battlestate").GetComponent<BattleState>();
 }
コード例 #48
0
    IEnumerator SetupBattle()
    {
        //Instantiate both player and enemy into the battle
        global    = GameObject.Find("GlobalObject");
        isLoading = false;

        GameObject    player       = Instantiate(playerPrefab, playerBattleStation);
        GlobalControl globalObject = global.GetComponent <GlobalControl> ();
        GameObject    enemy        = (GameObject)Instantiate(Resources.Load(globalObject.nextFight), enemyBattleStation);

        //Get the information about the enemy and player
        playerUnit = player.GetComponent <Player> ();
        enemyUnit  = enemy.GetComponent <Enemy> ();

        playerLevel = player.GetComponent <PlayerLevel> ();

        LoadPlayerData();
        //playerStats = player.GetComponent<PlayerStats> ();
        playerHUD.SetPlayerHUD(playerUnit);

        storeMobility = playerLevel.stats [4];

        Debug.Log("Current player level: " + playerLevel.Level);
        Debug.Log("Player's HP when level is set: " + playerUnit.currentHP);
        playerUnit.attackList = new List <Attack> ();

        Attack trash = gameObject.AddComponent <Attack>();

        trash.damage  = 1;
        trash.type    = "trash";
        trash.name    = "Dump";
        trash.spCost  = 3;
        trash.isSkill = true;

        Attack recycle = gameObject.AddComponent <Attack>();

        recycle.damage  = 1;
        recycle.type    = "recycle";
        recycle.name    = "Shred";
        recycle.spCost  = 3;
        recycle.isSkill = true;

        Attack compost = gameObject.AddComponent <Attack>();

        compost.damage  = 1;
        compost.type    = "compost";
        compost.name    = "Worm Strike";
        compost.spCost  = 3;
        compost.isSkill = true;

        playerUnit.addAttack(trash);
        playerUnit.addAttack(recycle);
        playerUnit.addAttack(compost);

        Debug.Log(playerUnit.attackList.Count);

        for (int i = 0; i < playerUnit.attackList.Count; i++)
        {
            GameObject newButton  = Instantiate(skillPrefab, skillContent);
            Attack     thisAttack = newButton.GetComponent <Attack>();
            thisAttack.SetValue(playerUnit.attackList [i].damage, playerUnit.attackList [i].type,
                                playerUnit.attackList [i].name, playerUnit.attackList [i].isSkill, playerUnit.attackList[i].spCost);
            newButton.GetComponentInChildren <Text> ().text = thisAttack.name;
            newButton.SetActive(true);
            print(thisAttack.type);
        }

        print(playerUnit.attackList.Count);

        dialogueText.text = enemyUnit.unitName + " is here to fight!";

        playerUnit.unitLevel = playerLevel.Level;
        //passes in the information about player and enemy unit to set their hud displays
        playerHUD.SetPlayerHUD(playerUnit);
        enemyHUD.SetEnemyHUD(enemyUnit);

        //This waits a small amount of time before giving the dialogue to the player that they should choose an action
        yield return(new WaitForSeconds(2f));

        //Attack: 0
        //Defense: 1
        //Skill: 2
        //Technique: 3
        //Mobility: 4
        Debug.Log("Current Attack stat: " + playerLevel.stats[0]);
        Debug.Log("Current Defense stat: " + playerLevel.stats[1]);
        Debug.Log("Current Skill stat: " + playerLevel.stats[2]);
        Debug.Log("Current Technique stat: " + playerLevel.stats[3]);
        Debug.Log("Current Mobility stat: " + playerLevel.stats[4]);


        //Now the state is set to player's turn, and we move on to the PlayerTurn function
        if (playerLevel.stats [4] >= enemyUnit.stats [4])
        {
            Debug.Log("Player attacks first");
            state = BattleState.PLAYERTURN;
            PlayerTurn();
        }
        else
        {
            state = BattleState.ENEMYTURN;
            StartCoroutine(EnemyTurn());
            Debug.Log("Enemy attacks first");
        }
    }
コード例 #49
0
 void ReceiveChangingTurn(int stoneType)
 {
     Debug.Log ("BattleController:ReceiveChangingTurn");
     BattleManager.instance.turn = (StoneType)stoneType;
     this.state = BattleState.PrepareShowTurn;
 }
コード例 #50
0
    //Methods for each enemy's attacks
    IEnumerator wrapuchinAttacks()
    {
        //There is a lot of randomness in enemy attacks, so it needs to start with randomly picking between x enemy attacks
        System.Random getRandom = new System.Random();

        //Wrapuchin has 2 attacks, so we will pick between those.
        int randomNum = getRandom.Next(1, 3);

        //IDLE
        if (randomNum == 1)
        {
            dialogueText.text = "Wrapuchin thinks about what it did";
            yield return(new WaitForSeconds(2f));

            state = BattleState.PLAYERTURN;
            PlayerTurn();
            yield break;
            //ATTACK
        }
        else
        {
            //Flavor text
            dialogueText.text = "Wrapuchin swings towards you!";

            //Determine hit chance
            System.Random hitRandom = new System.Random();
            randomNum = hitRandom.Next(0, 101);

            int hitChance = 95 - (playerLevel.stats [4] - enemyUnit.stats [4]);

            if (hitChance < 50)
            {
                hitChance = 50;
            }

            //Determine if attack hits
            bool doesHit;
            if (randomNum < hitChance)
            {
                Debug.Log("Player hits!");
                doesHit = true;
            }
            else
            {
                Debug.Log("Player misses :(");
                doesHit = false;
            }

            //If attack does not hit, inform player and then switch back to PLAYERTURN
            if (!doesHit)
            {
                yield return(new WaitForSeconds(2f));

                dialogueText.text = "The attack missed!";
                state             = BattleState.PLAYERTURN;
                PlayerTurn();
                yield break;
            }

            int totalDamage = (enemyUnit.stats [0] * 2) - playerLevel.stats [1];

            //If attack does hit, calculate damage
            if (totalDamage < 1 && isGuarding)
            {
                totalDamage = 0;
            }
            else if (isGuarding)
            {
                totalDamage = totalDamage / 2;
                Debug.Log("player is guarding");
            }

            if (totalDamage < 1 & isGuarding == false)
            {
                totalDamage = 1;
                Debug.Log("Player is not guarding");
            }

            Debug.Log("Total Enemy Damage by Wrapuchin: " + totalDamage);

            //Use this TakeDamage() function to deal the proper amount of damage to player
            bool isDead = playerUnit.TakeDamage(totalDamage);

            playerHUD.SetHP(playerUnit.currentHP);

            yield return(new WaitForSeconds(2f));

            if (isDead)
            {
                state = BattleState.LOST;
                StartCoroutine(EndBattle());
                yield break;
            }
            else
            {
                state = BattleState.PLAYERTURN;
                PlayerTurn();
                yield break;
            }
        }
    }
コード例 #51
0
ファイル: Hattori.cs プロジェクト: sjai013/RPG
    protected override IEnumerator moveToTarget(Vector3 target, BattleState.State nextState, IAbility ability, float optionalDelay = 0, float stopDist = 1.5F)
    {
        coroutines.moveToTarget = true;
        agent.ResetPath();

        if (optionalDelay > 0)
            yield return new WaitForSeconds(optionalDelay);

        while (anim.GetCurrentAnimatorStateInfo(0).fullPathHash != animHash.getHash("idleState"))
            yield return null;

        while (!ability.moveToTarget(this.gameObject, target, stopDist))
        {
            float moveSpeed = agent.velocity.magnitude;

            anim.SetFloat(animHash.getHash("moveSpeedFloat"), moveSpeed);

            yield return null;
        }

        agent.Stop();
        agent.ResetPath();
        anim.SetFloat(animHash.getHash("moveSpeedFloat"), 0.1f);
        state.setState(nextState);
        coroutines.moveToTarget = false;
    }
コード例 #52
0
    IEnumerator twocanAttacks()
    {
        //There is a lot of randomness in enemy attacks, so it needs to start with randomly picking between x enemy attacks
        System.Random getRandom = new System.Random();

        int randomNum = getRandom.Next(1, 4);

        //IDLE: Jokes (:
        if (randomNum == 1)
        {
            randomNum = getRandom.Next(1, 11);
            String dialogue = "The twocan says, ";
            switch (randomNum)
            {
            case (1):
                dialogue += "'Hey calm down. There's no need to get emoceanal'";
                break;

            case (2):
                dialogue += "'You need to work on getting out of your shell.'";
                break;

            case (3):
                dialogue += "'It’s cool to get out of can school and meet all the alumni.'";
                break;

            case (4):
                dialogue += "'Water you doing? I can’t sea how this helps you.'";
                break;

            case (5):
                dialogue += "'Hey, I can see Seattle from here. We should sail further out.'";
                break;

            case (6):
                dialogue += "'I can not believe I have two fight you.'";
                break;

            case (7):
                dialogue += "'I’m gonna beach ya.'";
                break;

            case (8):
                dialogue += "'This place is as big a dump as your mom’s house.'";
                break;

            case (9):
                dialogue += "'It’s a good thing my material’s recyclable.'";
                break;

            case (10):
                dialogue += "'I’ve seen better turtling playing Risk.'";
                break;

            default:
                break;
            }
            dialogueText.text = dialogue;
            yield return(new WaitForSeconds(2f));

            state = BattleState.PLAYERTURN;
            PlayerTurn();
            yield break;
            //ATTACK
        }
        else if (randomNum == 2)
        {
            //Flavor text
            dialogueText.text = "The Twocan scratches off part of its label.";
            yield return(new WaitForSeconds(1f));

            randomNum = getRandom.Next(1, 4);
            if (randomNum == 3)
            {
                dialogueText.text = "Something has made you sick. Every turn, you take damage equal to 5% of your max health, rounded down.";
                yield return(new WaitForSeconds(2f));

                state = BattleState.PLAYERTURN;
                PlayerTurn();
                yield break;
            }
            state = BattleState.PLAYERTURN;
            PlayerTurn();
            yield break;
        }
        else
        {
            dialogueText.text = "The Twocan punches down at you.";

            //Determine hit chance
            System.Random hitRandom = new System.Random();
            randomNum = hitRandom.Next(0, 101);

            int hitChance = 95 - (playerLevel.stats [4] - enemyUnit.stats [4]);

            if (hitChance < 50)
            {
                hitChance = 50;
            }

            //Determine if attack hits
            bool doesHit;
            if (randomNum < hitChance)
            {
                Debug.Log("Twocan hits!");
                doesHit = true;
            }
            else
            {
                Debug.Log("Twocan misses :(");
                doesHit = false;
            }

            //If attack does not hit, inform player and then switch back to PLAYERTURN
            if (!doesHit)
            {
                yield return(new WaitForSeconds(2f));

                dialogueText.text = "The attack missed!";
                state             = BattleState.PLAYERTURN;
                PlayerTurn();
                yield break;
            }

            //If attack does hit, calculate damage
            int totalDamage = (enemyUnit.stats [0] * 2) - playerLevel.stats [1];

            if (totalDamage < 1 && !isGuarding)
            {
                totalDamage = 1;
            }

            Debug.Log("Total Enemy Damage by Twocan: " + totalDamage);

            //Use this TakeDamage() function to deal the proper amount of damage to player
            bool isDead = playerUnit.TakeDamage(totalDamage);

            playerHUD.SetHP(playerUnit.currentHP);

            yield return(new WaitForSeconds(2f));

            if (isDead)
            {
                state = BattleState.LOST;
                StartCoroutine(EndBattle());
                yield break;
            }
            else
            {
                state = BattleState.PLAYERTURN;
                PlayerTurn();
                yield break;
            }
        }
    }
コード例 #53
0
 /*
     Checks if any Entity is ready to play a tudrn
     and changes the battle state accordingly.
     NOTE: makes use of the property that the queue
           contains either characters or enemies.
     
 */
 private void checkForTurn()
 {
     QueuedEntity head = turnQueue.peek();
     if (head.Priority <= 0 && !(currentState == BattleState.CALCDAMAGE ||
                                 currentState == BattleState.ENEMYTURN)) 
     {
         /* 
             Taking out an entity from the queue happens in checking turn. This reduces
             code cluttering and slightly increases speed, as we don't have to traverse all the
             turn queue list (this could change, as the list is very small (only 8 elements)
         */
         if (head.entity.isDead())
         {
             turnQueue.Dequeue();
         }
         else {
             currentState = (head.entity is BaseCharacterClass) ? BattleState.PLAYERTURN : BattleState.ENEMYTURN;
         }
     }
 }
コード例 #54
0
ファイル: Patrollable.cs プロジェクト: xxzoltanxx/NewGame
    public PatrolStatus TickMovement(float dt)
    {
        Vector2  currentPos = transform.position;
        PathNode node       = grid.NodeFromWorldPoint(currentPos);

        if (node != currentTile)
        {
            node.entitiesCurrentlyOnTile.Add(gameObject);
            if (node.entitiesCurrentlyOnTile.Count > 1)
            {
                foreach (GameObject obj in node.entitiesCurrentlyOnTile)
                {
                    if (obj.GetComponent <Entity>().isPlayer&& !node.battling)
                    {
                        BattleState state = new BattleState(obj.GetComponent <Entity>(), boundEntity, gameManager, node);
                        battleEntryScreen.Open(transform.position, boundEntity.soldierAmount, obj.GetComponent <Entity>().soldierAmount, state);
                        gameManager.currentBattleState = state;
                        gameManager.openMenuLockActions(transform.position);
                        node.battling = true;
                    }
                }
            }
            if (currentTile != null)
            {
                currentTile.entitiesCurrentlyOnTile.Remove(gameObject);
            }
            currentTile = node;
        }
        if (!usingPathfinding)
        {
            Vector2 sameZcheckpoint = currentCheckpoint;
            Vector2 sameZ           = transform.position;
            if (Vector2.Distance(sameZ, sameZcheckpoint) > distanceToEnablePathfinding)
            {
                pathNodes = grid.FindPath(sameZ, sameZcheckpoint, boundEntity);
                pathNodes[pathNodes.Count - 1] = sameZcheckpoint;
                currentPathNodeIndex           = 0;
                usingPathfinding = true;
                return(PatrolStatus.Ongoing);
            }
            else if (!sameZ.FuzzyEquals(sameZcheckpoint, 0.01f))
            {
                Vector3 direction = sameZcheckpoint - sameZ;
                direction.z = 0;
                direction.Normalize();

                GameWorld.Terrain currentTerrain = grid.NodeFromWorldPoint(transform.position).weight;
                if (currentTerrain == GameWorld.Terrain.Forest)
                {
                    GetComponent <Entity>().SetHidden(true);
                }
                else
                {
                    GetComponent <Entity>().SetHidden(false);
                }
                float movementModifier = boundEntity.terrainModifiers[currentTerrain] * boundEntity.pace * boundEntity.speed;

                Vector3 newPosition = transform.position + direction * movementModifier * gameManager.timeMultiplier * Time.deltaTime;
                transform.position = newPosition;
                return(PatrolStatus.Ongoing);
            }
            else
            {
                //REACHED THE DESTINATION
                return(PatrolStatus.Finished);
            }
        }
        else if (usingPathfinding)
        {
            Vector3 checkpointPosition = pathNodes[currentPathNodeIndex];
            Vector2 sameZEnd           = currentCheckpoint;
            Vector2 sameZCheckpoint    = checkpointPosition;
            Vector2 sameZPlayer        = transform.position;
            if (!sameZCheckpoint.FuzzyEquals(sameZPlayer, 0.025f))
            {
                Vector2 direction2D = sameZCheckpoint - sameZPlayer;
                Vector3 direction   = direction2D;
                direction.Normalize();

                GameWorld.Terrain currentTerrain = grid.NodeFromWorldPoint(transform.position).weight;
                if (currentTerrain == GameWorld.Terrain.Forest)
                {
                    GetComponent <Entity>().SetHidden(true);
                }
                else
                {
                    GetComponent <Entity>().SetHidden(false);
                }
                float movementModifier = boundEntity.terrainModifiers[currentTerrain] * boundEntity.pace * boundEntity.speed;

                Vector3 newPosition = transform.position + direction * movementModifier * gameManager.timeMultiplier * Time.deltaTime;
                transform.position = newPosition;
            }
            else
            {
                transform.position = new Vector3(sameZCheckpoint.x, sameZCheckpoint.y, transform.position.z);
                if (currentPathNodeIndex + 1 <= pathNodes.Count - 1)
                {
                    ++currentPathNodeIndex;
                }
                else
                {
                    usingPathfinding = false;
                }
            }
        }
        return(PatrolStatus.Ongoing);
    }
コード例 #55
0
ファイル: Usable.cs プロジェクト: Ammybinks/RPG-Game
 internal virtual List <SpriteBase> GetTargets(BattleState battleState)
 {
     return(new List <SpriteBase>());
 }
コード例 #56
0
ファイル: BattleManager.cs プロジェクト: FlygonC/Pokemon-like
 public void AddEvent(BattleEvent _event)
 {
     eventQueue.Add(_event);
     battleState = BattleState.DoingActions;
 }
コード例 #57
0
 void CommandValidationManagement(BattleCommandAction.commandActionType actionType)
 {
     switch(actionType)
     {
         case BattleCommandAction.commandActionType.attack:
             if (enemyList.Length > 0)
                 selectedTarget = enemyList[0];
             else
                 selectedTarget = playerList[0];
             battleState = BattleState.playerChoosingAtkTarget;
             break;
         case BattleCommandAction.commandActionType.skill:
             //Activer le menu skills
             SkillSelect();
             break;
         case BattleCommandAction.commandActionType.summon:
             //Invoque les Gardiens en combat!
             break;
         case BattleCommandAction.commandActionType.defend:
             Debug.Log("DEFENSE!");
             //Creer un defend factor pour le tour -> force*defendFactor pendant l'attaque, 0.5 ou 1, réinitialiser au début de chaque tour pour chaque perso, ennemi comme allié
             selectedPlayer.defending = true;
             break;
         case BattleCommandAction.commandActionType.escape:
             //Mettre fin au combat en fonction d'on ne sait pas encore quoi
             break;
     }
 }
コード例 #58
0
ファイル: BattleManager.cs プロジェクト: FlygonC/Pokemon-like
    void IdleUpdate()
    {
        if (eventQueue.Count > 0)
        {
            battleState = BattleState.DoingActions;
            return;
        }

        foreach (Battler i in activeBattlers)
        {
            // Check fainted
            if (i.isTargetable)
            {
                if (i.creature.currentHP <= 0)
                {
                    AddEvent(new BE_Fainted(this, i));
                    return;
                }



                if (i.coolDown <= 0 && i.actionTime <= 0)
                {
                    if (i.preparingAction == true && i.creature.currentEnergy >= Calc.EnergyCost(i, i.commandedAttack))
                    {
                        BattlerTakeAction(i);
                        battleState       = BattleState.DoingActions;//CHANGE BATTLE STATE
                        i.preparingAction = false;
                        return;
                    }
                }
                //
                // hp regen
                while (i.HPRestore >= 60)
                {
                    i.creature.currentHP += 1;
                    i.HPRestore          -= 60;
                }
                // regen energy
                if (i.creature.currentEnergy < i.FinalStats.Energy && i.coolDown <= 0)
                {
                    i.energyRestore += (i.creature.Stats.Energy * 0.05f) * 1;
                }
                while (i.energyRestore >= 60)
                {
                    i.creature.currentEnergy += 1;
                    i.energyRestore          -= 60;
                }
                // action time
                if (i.actionTime > 0 && i.notOnCooldown)
                {
                    i.actionTime -= 1;
                }
                // cooldown
                if (i.coolDown > 0)
                {
                    i.coolDown -= 1;
                }
            }
            TotalBattleTime += 1;
        }

        foreach (BattleEffector i in BattleEffectors)
        {
            i.OnIdle(this);
        }
    }
コード例 #59
0
    IEnumerator Hit()
    {
        state = BattleState.PLAYERACTION;
        bool doesHit;

        //need to check for hit before we can determine damage
        System.Random getRandom = new System.Random();
        int           randomNum = getRandom.Next(0, 101);

        dialogueText.text = "You attack the enemy!";

        int hitChance = 95 - (enemyUnit.stats [4] - playerLevel.stats [4]);

        if (hitChance < 50)
        {
            hitChance = 50;
        }

        if (randomNum < hitChance)
        {
            Debug.Log("Player hits!");
            doesHit = true;
        }
        else
        {
            Debug.Log("Player misses :(");
            doesHit = false;
        }

        //If the player's attack misses, all we need to do is let them know and then proceed with the enemy's turn
        if (!doesHit)
        {
            yield return(new WaitForSeconds(2f));

            dialogueText.text = "The attack missed!";
            state             = BattleState.ENEMYTURN;
            StartCoroutine(EnemyTurn());
        }

        //On a hit, we need to start with calculating base damage for the attack
        //Uses this formula: (Your Attack * 2) - (Opponent Defense) to a minimum of 1.
        int totalDamage = (playerLevel.stats [0] * 2) - enemyUnit.stats [1];

        if (totalDamage < 1)
        {
            totalDamage = 1;
        }

        bool isDead = enemyUnit.TakeDamage(totalDamage);

        enemyHUD.SetHP(enemyUnit.currentHP);

        //dialogueText.text = "You hit the enemy!";
        yield return(new WaitForSeconds(2f));

        //check if the enemy is dead
        //change state based on result
        if (isDead)
        {
            //End the battle
            state = BattleState.WON;
            StartCoroutine(EndBattle());
        }
        else
        {
            //Enemy Turn
            state = BattleState.ENEMYTURN;
            StartCoroutine(EnemyTurn());
        }
    }
コード例 #60
0
 static void Main()
 {
     //var MainGame = new MAAGame();
     using (var games = new BattleState())
         games.Run();
 }