public void PlayAnimatin(Character.CharacterState state) { if (_characterAnimator == null) { return; } _characterAnimator.SetBool("Walk", state == Character.CharacterState.Move); switch (state) { case Character.CharacterState.Jump: JumpAnimation(); break; case Character.CharacterState.Damage: DamageAnimation(false); break; case Character.CharacterState.Down: DamageAnimation(true); break; case Character.CharacterState.Attack1: AttackComboAnimation(1); break; case Character.CharacterState.Attack2: AttackComboAnimation(2); break; case Character.CharacterState.Attack3: AttackComboAnimation(3); break; case Character.CharacterState.Appeal: _characterAnimator.SetTrigger("AppealNormal"); break; } }
public static bool IsInputBlocked(this Character.CharacterState characterState) { for (int i = 0; i < INPUT_BLOCKED.Length; ++i) { if (INPUT_BLOCKED[i] == characterState) { return(true); } } return(false); }
public virtual void OnChangeState(Character.CharacterState State) { }
public override void OnChangeState(Character.CharacterState State) { if (_TargetObject == null) return; if (_OldTargetDist.X == -1) { _OldTargetDist = _TargetObject.Position - Position; _OldState = State; return; } switch (State) { case RolePlayingGameData.Character.CharacterState.Idle: if (_OldState == RolePlayingGameData.Character.CharacterState.Idle) return; UpdateAIState(WindowsGame2.AI.OUTPUT.STAND); break; case RolePlayingGameData.Character.CharacterState.Walking: Vector2 dist = _TargetObject.Position - Position; //dist -= _OldTargetDist; float fDist = dist.Length() - _OldTargetDist.Length(); if (fDist < -10) {//������� UpdateAIState(WindowsGame2.AI.OUTPUT.NEAR); } else if (10 < fDist) {// ���� UpdateAIState(WindowsGame2.AI.OUTPUT.FAR); } else {// return; } _OldTargetDist = _TargetObject.Position - Position; break; case RolePlayingGameData.Character.CharacterState.Attack: if (_OldState == State) return; UpdateAIState(OUTPUT.ATTACK); break; case RolePlayingGameData.Character.CharacterState.Dodging: if (_OldState == State) return; UpdateAIState(OUTPUT.DODGE); break; default: //UpdateAIState() break; } _OldState = State; }
public static Character.CharacterState From(this Character.CharacterState ctor, int rank) { return((Character.CharacterState)rank); }
public static int Rank(this Character.CharacterState characterState) { return((int)characterState); }
/// <summary> /// Draws a border around the <see cref="Square"/> a <see cref="Character"/> may move to /// </summary> /// <param name="diceResult">The result of a dice throw</param> /// <param name="character">The <see cref="Character"/> the <see cref="Player"/> wishes to move</param> /// <param name="silent"> /// If true, no borders will be added to <see cref="Square">squares</see> that you may move to. /// This is useful for when you only need to check if a <see cref="Player"/> can actually make a move. /// </param> /// <returns>True if there was a possible move</returns> public static bool DrawMovementLine(int diceResult, Character character, bool silent = false) { int charPos = character.Position; Color charColour = character.Colour; Character.CharacterState charState = character.State; // The character cannot move if he has already entered the goal if (charState == Character.CharacterState.WON) { return(false); } // Check if the character is home and if he may be moved outside if (charState == Character.CharacterState.HOME) { if (diceResult == 1 || diceResult == 6) { if (charColour.Equals(Color.Green)) { int index = diceResult == 1 ? GREEN_HOME : (GREEN_HOME + 5); if (CheckIfPossible(Game.Squares[index], character)) { Game.Squares[index].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } } else if (charColour.Equals(Color.Yellow)) { int index = diceResult == 1 ? YELLOW_HOME : (YELLOW_HOME + 5); if (CheckIfPossible(Game.Squares[index], character)) { Game.Squares[index].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } } else if (charColour.Equals(Color.Red)) { int index = diceResult == 1 ? RED_HOME : (RED_HOME + 5); if (CheckIfPossible(Game.Squares[index], character)) { Game.Squares[index].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } } else if (charColour.Equals(Color.Blue)) { int index = diceResult == 1 ? BLUE_HOME : (BLUE_HOME + 5); if (CheckIfPossible(Game.Squares[index], character)) { Game.Squares[index].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } } } else { return(false); } } // The green character is just outside the final stretch else if (charColour.Equals(Color.Green) && (charPos == 39 || (charPos == 38 && diceResult == 6))) { if (diceResult == 6) { if (charPos == 38) { Game.Squares[GOAL].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } else { return(false); } } else if (diceResult == 5) { if (charPos == 39) { Game.Squares[GOAL].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } else { return(false); } } else { if (CheckIfPossible(Game.Squares[FIRST_GREEN_FINAL + (diceResult - 1)], character)) { Game.Squares[FIRST_GREEN_FINAL + (diceResult - 1)].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } } } // The yellow character is just outside the final stretch else if (charColour.Equals(Color.Yellow) && (charPos == 9 || (charPos == 8 && diceResult == 6))) { if (diceResult == 6) { if (charPos == 8) { Game.Squares[GOAL].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } else { return(false); } } else if (diceResult == 5) { if (charPos == 9) { Game.Squares[GOAL].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } else { return(false); } } else { if (CheckIfPossible(Game.Squares[FIRST_YELLOW_FINAL + (diceResult - 1)], character)) { Game.Squares[FIRST_YELLOW_FINAL + (diceResult - 1)].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } } } // The red character is just outside the final stretch else if (charColour.Equals(Color.Red) && (charPos == 19 || (charPos == 18 && diceResult == 6))) { if (diceResult == 6) { if (charPos == 18) { Game.Squares[GOAL].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } else { return(false); } } else if (diceResult == 5) { if (charPos == 19) { Game.Squares[GOAL].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } else { return(false); } } else { if (CheckIfPossible(Game.Squares[FIRST_RED_FINAL + (diceResult - 1)], character)) { Game.Squares[FIRST_RED_FINAL + (diceResult - 1)].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } } } // The blue character is just outside the final stretch else if (charColour.Equals(Color.Blue) && (charPos == 29 || (charPos == 28 && diceResult == 6))) { if (diceResult == 6) { if (charPos == 28) { Game.Squares[GOAL].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } else { return(false); } } else if (diceResult == 5) { if (charPos == 29) { Game.Squares[GOAL].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } else { return(false); } } else { if (CheckIfPossible(Game.Squares[FIRST_BLUE_FINAL + (diceResult - 1)], character)) { Game.Squares[FIRST_BLUE_FINAL + (diceResult - 1)].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } } } else if (charColour.Equals(Color.Green) && Game.Squares[charPos].Path == Square.PathType.FINAL) // The green character is somewhere in his final stretch { // The indexes for the final stretch for green are 40, 41, 42, 43 switch (charPos) { case 40: if (diceResult > 4) { return(false); } else if (diceResult == 4) { Game.Squares[GOAL].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } else { if (CheckIfPossible(Game.Squares[charPos + diceResult], character)) { Game.Squares[charPos + diceResult].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } } break; case 41: if (diceResult > 3) { return(false); } else if (diceResult == 3) { Game.Squares[GOAL].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } else { if (CheckIfPossible(Game.Squares[charPos + diceResult], character)) { Game.Squares[charPos + diceResult].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } } break; case 42: if (diceResult > 2) { return(false); } else if (diceResult == 2) { Game.Squares[GOAL].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } else { if (CheckIfPossible(Game.Squares[charPos + diceResult], character)) { Game.Squares[charPos + diceResult].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } } break; case 43: if (diceResult > 1) { return(false); } else { Game.Squares[GOAL].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } } return(false); } else if (charColour.Equals(Color.Yellow) && Game.Squares[charPos].Path == Square.PathType.FINAL) // The yellow character is somewhere in his final stretch { // The indexes for the final stretch for yellow are 44, 45, 46, 47 switch (charPos) { case 44: if (diceResult > 4) { return(false); } else if (diceResult == 4) { Game.Squares[GOAL].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } else { if (CheckIfPossible(Game.Squares[charPos + diceResult], character)) { Game.Squares[charPos + diceResult].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } } break; case 45: if (diceResult > 3) { return(false); } else if (diceResult == 3) { Game.Squares[GOAL].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } else { if (CheckIfPossible(Game.Squares[charPos + diceResult], character)) { Game.Squares[charPos + diceResult].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } } break; case 46: if (diceResult > 2) { return(false); } else if (diceResult == 2) { Game.Squares[GOAL].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } else { if (CheckIfPossible(Game.Squares[charPos + diceResult], character)) { Game.Squares[charPos + diceResult].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } } break; case 47: if (diceResult > 1) { return(false); } else { Game.Squares[GOAL].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } } return(false); } else if (charColour.Equals(Color.Red) && Game.Squares[charPos].Path == Square.PathType.FINAL) // The red character is somewhere in his final stretch { // The indexes for the final stretch for red are 48, 49, 50, 51 switch (charPos) { case 48: if (diceResult > 4) { return(false); } else if (diceResult == 4) { Game.Squares[GOAL].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } else { if (CheckIfPossible(Game.Squares[charPos + diceResult], character)) { Game.Squares[charPos + diceResult].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } } break; case 49: if (diceResult > 3) { return(false); } else if (diceResult == 3) { Game.Squares[GOAL].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } else { if (CheckIfPossible(Game.Squares[charPos + diceResult], character)) { Game.Squares[charPos + diceResult].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } } break; case 50: if (diceResult > 2) { return(false); } else if (diceResult == 2) { Game.Squares[GOAL].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } else { if (CheckIfPossible(Game.Squares[charPos + diceResult], character)) { Game.Squares[charPos + diceResult].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } } break; case 51: if (diceResult > 1) { return(false); } else { Game.Squares[GOAL].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } } return(false); } else if (charColour.Equals(Color.Blue) && Game.Squares[charPos].Path == Square.PathType.FINAL) // The blue character is somewhere in his final stretch { // The indexes for the final stretch for blue are 52, 53, 54, 55 switch (charPos) { case 52: if (diceResult > 4) { return(false); } else if (diceResult == 4) { Game.Squares[GOAL].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } else { if (CheckIfPossible(Game.Squares[charPos + diceResult], character)) { Game.Squares[charPos + diceResult].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } } break; case 53: if (diceResult > 3) { return(false); } else if (diceResult == 3) { Game.Squares[GOAL].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } else { if (CheckIfPossible(Game.Squares[charPos + diceResult], character)) { Game.Squares[charPos + diceResult].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } } break; case 54: if (diceResult > 2) { return(false); } else if (diceResult == 2) { Game.Squares[GOAL].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } else { if (CheckIfPossible(Game.Squares[charPos + diceResult], character)) { Game.Squares[charPos + diceResult].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } } break; case 55: if (diceResult > 1) { return(false); } else { Game.Squares[GOAL].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } } return(false); } else // The character is not home nor on the final stretch, see where he may move to { // Check if the current character IS NOT green and if this character is able to move past square #39 // If he can, make sure the counting gets reset and begins from 0 as not to enter green's final stretch if (!charColour.Equals(Color.Green) && (charPos + diceResult) > 39) { int stepsTo39 = 39 - charPos; int stepsLeftOnDice = diceResult - stepsTo39; if (CheckIfPossible(Game.Squares[-1 + stepsLeftOnDice], character)) { Game.Squares[-1 + stepsLeftOnDice].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } } // Look if the characters are able to enter their final stretch else if (charColour.Equals(Color.Green) && (charPos + diceResult) > 39 && charPos < 39) { if ((charPos + diceResult) <= 56) // Make sure he wont accidentally try to move past the goal { if (CheckIfPossible(Game.Squares[charPos + diceResult], character)) { Game.Squares[charPos + diceResult].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } } } else if (charColour.Equals(Color.Yellow) && (charPos + diceResult) > 9 && charPos < 9) { int stepsTo9 = 9 - charPos; int stepsLeftOnDice = diceResult - stepsTo9; if (CheckIfPossible(Game.Squares[FIRST_YELLOW_FINAL + (stepsLeftOnDice - 1)], character)) { Game.Squares[FIRST_YELLOW_FINAL + (stepsLeftOnDice - 1)].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } } else if (charColour.Equals(Color.Red) && (charPos + diceResult) > 19 && charPos < 19) { int stepsTo19 = 19 - charPos; int stepsLeftOnDice = diceResult - stepsTo19; if (CheckIfPossible(Game.Squares[FIRST_RED_FINAL + (stepsLeftOnDice - 1)], character)) { Game.Squares[FIRST_RED_FINAL + (stepsLeftOnDice - 1)].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } } else if (charColour.Equals(Color.Blue) && (charPos + diceResult) > 29 && charPos < 29) { int stepsTo29 = 29 - charPos; int stepsLeftOnDice = diceResult - stepsTo29; if (CheckIfPossible(Game.Squares[FIRST_BLUE_FINAL + (stepsLeftOnDice - 1)], character)) { Game.Squares[FIRST_BLUE_FINAL + (stepsLeftOnDice - 1)].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } } else if ((charPos + diceResult) <= 56) // Make sure they cannot move past the goal { if (CheckIfPossible(Game.Squares[charPos + diceResult], character)) { Game.Squares[charPos + diceResult].Border = !silent ? Square.SquareBorder.BORDER : Square.SquareBorder.BORDERLESS; return(true); } } else { return(false); } } return(false); }
public override void OnChangeState(Character.CharacterState State) { if (_TargetObject == null) { return; } if (_OldTargetDist.X == -1) { _OldTargetDist = _TargetObject.Position - Position; _OldState = State; return; } switch (State) { case RolePlayingGameData.Character.CharacterState.Idle: if (_OldState == RolePlayingGameData.Character.CharacterState.Idle) { return; } UpdateAIState(WindowsGame2.AI.OUTPUT.STAND); break; case RolePlayingGameData.Character.CharacterState.Walking: Vector2 dist = _TargetObject.Position - Position; //dist -= _OldTargetDist; float fDist = dist.Length() - _OldTargetDist.Length(); if (fDist < -10) { //°¡±î¿öÁü UpdateAIState(WindowsGame2.AI.OUTPUT.NEAR); } else if (10 < fDist) { // ¸ØÃã UpdateAIState(WindowsGame2.AI.OUTPUT.FAR); } else { // return; } _OldTargetDist = _TargetObject.Position - Position; break; case RolePlayingGameData.Character.CharacterState.Attack: if (_OldState == State) { return; } UpdateAIState(OUTPUT.ATTACK); break; case RolePlayingGameData.Character.CharacterState.Dodging: if (_OldState == State) { return; } UpdateAIState(OUTPUT.DODGE); break; default: //UpdateAIState() break; } _OldState = State; }