Beispiel #1
0
 public void SetThrowBreak()
 {
     State       = GameplayEnums.CharacterState.ThrowBreak;
     StateFrames = 0;
     Hitboxes.RemoveAll(o => o.HitboxType == GameplayEnums.HitboxType.Hurtbox_Limb);
     Hitboxes.RemoveAll(o => o.HitboxType == GameplayEnums.HitboxType.Hitbox_Throw);
 }
Beispiel #2
0
 public CharacterState(bool _p1, Character _selectedCharacter)
 {
     Position          = 0;
     StateFrames       = 0;
     State             = GameplayEnums.CharacterState.Idle;
     Hitboxes          = new List <Hitbox_Gameplay>();
     Gauge             = 0;
     FacingRight       = _p1;
     SelectedCharacter = _selectedCharacter;
     Armor             = false;
     DisableThrowBreak = false;
     AttackConnected   = false;
 }
Beispiel #3
0
    public override void HandleInputs(CharacterState _cstate, SinglePlayerInputs _currentInputs, SinglePlayerInputs _previousInputs)
    {
        //can't block but can cancel into attack or throw
        GameplayEnums.CharacterState potentialCancelState = _cstate.GetCharacterAction(_currentInputs, _previousInputs);
        switch (potentialCancelState)
        {
        case GameplayEnums.CharacterState.AttackStartup:
        case GameplayEnums.CharacterState.ThrowStartup:
            _cstate.SetCharacterState(potentialCancelState);
            break;

        default:
            break;
        }
    }
Beispiel #4
0
 public CharacterState(CharacterState _toCopy)
 {
     Position    = _toCopy.Position;
     StateFrames = _toCopy.StateFrames;
     State       = _toCopy.State;
     Hitboxes    = new List <Hitbox_Gameplay>();
     foreach (Hitbox_Gameplay hbox in _toCopy.Hitboxes)
     {
         Hitboxes.Add(new Hitbox_Gameplay(hbox));
     }
     Gauge             = _toCopy.Gauge;
     FacingRight       = _toCopy.FacingRight;
     SelectedCharacter = _toCopy.SelectedCharacter.CopyCharacter();
     Armor             = _toCopy.Armor;
     DisableThrowBreak = _toCopy.DisableThrowBreak;
     AttackConnected   = _toCopy.AttackConnected;
 }
Beispiel #5
0
    public void SetCharacterState(GameplayEnums.CharacterState _state)
    {
        ResetAttributes();
        State       = _state;
        StateFrames = 0;
        switch (_state)
        {
        case GameplayEnums.CharacterState.AttackStartup:
            Hitboxes.Add(CreateHitbox(GameplayEnums.HitboxType.Hurtbox_Limb, GameplayConstants.HURTBOX_STARTUP));
            SetCharacterHurtboxStanding(Hitboxes);
            DisableThrowBreak = true;
            AttackConnected   = false;
            //play sfx
            GameManager.Instance.SoundManager.PlaySfx(SoundManager.SFX.Whiff);
            break;

        case GameplayEnums.CharacterState.ThrowStartup:
            Hitboxes.Add(CreateHitbox(GameplayEnums.HitboxType.Hurtbox_Limb, GameplayConstants.THROW_STARTUP_HURTBOX));
            SetCharacterHurtboxStanding(Hitboxes);

            //play sfx
            GameManager.Instance.SoundManager.PlaySfx(SoundManager.SFX.Whiff);
            break;

        case GameplayEnums.CharacterState.WalkBack:
        case GameplayEnums.CharacterState.WalkForward:
        case GameplayEnums.CharacterState.Idle:
            SetCharacterHurtboxStanding(Hitboxes);
            break;

        case GameplayEnums.CharacterState.Crouch:
            SetCharacterHurtboxCrouching(Hitboxes);
            break;

        case GameplayEnums.CharacterState.Special:
            if (SelectedCharacter.CanUseSpecial(this))
            {
                SelectedCharacter.SetSpecial(this);
            }
            else
            {
                State = GameplayEnums.CharacterState.Idle;
            }
            break;
        }
    }
    private void CreateNewHitbox(Hitbox_Gameplay _hbox_gameplay, bool _p1, GameState _gameState)
    {
        Hitbox_Render _renderBox = new Hitbox_Render();

        _renderBox.ReferenceBox = _hbox_gameplay;
        _renderBox.ObjectInGame = GameObject.CreatePrimitive(PrimitiveType.Cube);
        ModifyHitbox(_renderBox, _hbox_gameplay, _p1, _gameState);
        switch (_hbox_gameplay.HitboxType)
        {
        case GameplayEnums.HitboxType.Hitbox_Attack:
        case GameplayEnums.HitboxType.Hitbox_Throw:
            if (_p1)
            {
                _renderBox.ObjectInGame.GetComponent <Renderer>().material = P1_Active;
            }
            else
            {
                _renderBox.ObjectInGame.GetComponent <Renderer>().material = P2_Active;
            }
            break;

        case GameplayEnums.HitboxType.Hurtbox_Limb:
        case GameplayEnums.HitboxType.Hurtbox_Main:
            GameplayEnums.CharacterState currentCharacterState;
            if (_p1)
            {
                currentCharacterState = _gameState.P1_State;
            }
            else
            {
                currentCharacterState = _gameState.P2_State;
            }
            Material toSet;
            GameplayEnums.CharacterState cstate = currentCharacterState;
            if (cstate == GameplayEnums.CharacterState.Special)
            {
                if (_p1)
                {
                    cstate = _gameState.P1_CState.SelectedCharacter.GetEquivalentState();
                }
                else
                {
                    cstate = _gameState.P2_CState.SelectedCharacter.GetEquivalentState();
                }
            }
            switch (cstate)
            {
            case GameplayEnums.CharacterState.AttackActive:
            case GameplayEnums.CharacterState.AttackStartup:
            case GameplayEnums.CharacterState.ThrowActive:
            case GameplayEnums.CharacterState.ThrowStartup:
                if (_p1)
                {
                    toSet = P1_Startup;
                }
                else
                {
                    toSet = P2_Startup;
                }
                break;

            case GameplayEnums.CharacterState.AttackRecovery:
            case GameplayEnums.CharacterState.Blockstun:
            case GameplayEnums.CharacterState.Clash:
            case GameplayEnums.CharacterState.ThrowBreak:
            case GameplayEnums.CharacterState.ThrowRecovery:
                if (_p1)
                {
                    toSet = P1_Recovery;
                }
                else
                {
                    toSet = P2_Recovery;
                }
                break;

            default:
                if (_p1)
                {
                    toSet = P1_Character;
                }
                else
                {
                    toSet = P2_Character;
                }
                break;
            }
            _renderBox.ObjectInGame.GetComponent <Renderer>().material = toSet;
            break;
        }
        m_activeHitboxes.Add(_renderBox);
    }
Beispiel #7
0
    //updates this character's state by one frame
    public MatchOutcome UpdateCharacterState()
    {
        int positionOffset = 0;

        ++StateFrames;
        switch (State)
        {
        case GameplayEnums.CharacterState.AttackActive:
            if (StateFrames > GameplayConstants.ATTACK_ACTIVE)
            {
                State       = GameplayEnums.CharacterState.AttackRecovery;
                StateFrames = 0;
                Hitboxes.RemoveAll(o => o.HitboxType == GameplayEnums.HitboxType.Hitbox_Attack);
                ModifyHitbox(Hitboxes, GameplayConstants.HURTBOX_WHIFF_EARLY);
                DisableThrowBreak = false;
            }
            if (StateFrames == GameplayConstants.ATTACK_FULL_EXTEND)
            {
                ModifyHitbox(Hitboxes, GameplayConstants.HITBOX_ACTIVE_LATE, GameplayEnums.HitboxType.Hitbox_Attack);
            }
            break;

        case GameplayEnums.CharacterState.AttackRecovery:
            if (StateFrames > GameplayConstants.ATTACK_RECOVERY_TOTAL)
            {
                State       = GameplayEnums.CharacterState.Idle;
                StateFrames = 0;
                Hitboxes.RemoveAll(o => o.HitboxType == GameplayEnums.HitboxType.Hurtbox_Limb);
            }
            if (StateFrames == GameplayConstants.ATTACK_RECOVERY_SHORTEN)
            {
                ModifyHitbox(Hitboxes, GameplayConstants.HURTBOX_WHIFF_LATE);
            }
            break;

        case GameplayEnums.CharacterState.AttackStartup:
            if (StateFrames > GameplayConstants.ATTACK_STARTUP)
            {
                State       = GameplayEnums.CharacterState.AttackActive;
                StateFrames = 0;
                Hitboxes.Add(CreateHitbox(GameplayEnums.HitboxType.Hitbox_Attack, GameplayConstants.HITBOX_ACTIVE_EARLY));
                ModifyHitbox(Hitboxes, GameplayConstants.HURTBOX_ACTIVE);
            }
            break;

        case GameplayEnums.CharacterState.BeingThrown:
            SetCharacterHurtboxStanding(Hitboxes);
            if (StateFrames > GameplayConstants.THROW_BREAK_WINDOW)
            {
                if (P1)
                {
                    return(new MatchOutcome(false, true, GameplayEnums.Outcome.Throw));
                }
                else
                {
                    return(new MatchOutcome(true, false, GameplayEnums.Outcome.Throw));
                }
            }
            break;    //this is handled in checking if a player wins

        case GameplayEnums.CharacterState.Blockstun:
            SetCharacterHurtboxStanding(Hitboxes);
            if (StateFrames < GameplayConstants.ATTACK_PUSHBACK_DURATION)
            {
                positionOffset = GameplayConstants.ATTACK_PUSHBACK_SPEED;
            }
            if (StateFrames > GameplayConstants.ATTACK_BLOCKSTUN)
            {
                State       = GameplayEnums.CharacterState.Idle;
                StateFrames = 0;
            }
            break;

        case GameplayEnums.CharacterState.Clash:
            if (StateFrames > GameplayConstants.CLASH_PUSHBACK_DURATION)
            {
                State       = GameplayEnums.CharacterState.Idle;
                StateFrames = 0;
            }
            positionOffset = GameplayConstants.CLASH_PUSHBACK_SPEED;
            break;

        case GameplayEnums.CharacterState.Crouch:
            SetCharacterHurtboxCrouching(Hitboxes);
            break;

        case GameplayEnums.CharacterState.Idle:
            SetCharacterHurtboxStanding(Hitboxes);
            break;

        case GameplayEnums.CharacterState.Inactive:
            throw new System.Exception("character state was inactive. not supposed to happen???");

        case GameplayEnums.CharacterState.Special:
            MatchOutcome specialOutcome = SelectedCharacter.UpdateSpecial(this, ref positionOffset);
            if (specialOutcome.IsEnd())
            {
                return(specialOutcome);
            }
            break;

        case GameplayEnums.CharacterState.ThrowActive:
            if (StateFrames > GameplayConstants.THROW_ACTIVE)
            {
                State       = GameplayEnums.CharacterState.ThrowRecovery;
                StateFrames = 0;
                Hitboxes.RemoveAll(o => o.HitboxType == GameplayEnums.HitboxType.Hitbox_Throw);
                ModifyHitbox(Hitboxes, GameplayConstants.THROW_RECOVERY_HURTBOX);
            }
            break;

        case GameplayEnums.CharacterState.ThrowBreak:
            if (StateFrames > GameplayConstants.BREAK_DURATION)
            {
                State       = GameplayEnums.CharacterState.Idle;
                StateFrames = 0;
            }
            positionOffset = GameplayConstants.BREAK_PUSHBACK;
            break;

        case GameplayEnums.CharacterState.ThrowingOpponent:
            if (StateFrames > GameplayConstants.THROW_BREAK_WINDOW)
            {
                if (P1)
                {
                    return(new MatchOutcome(true, false, GameplayEnums.Outcome.Throw));
                }
                else
                {
                    return(new MatchOutcome(false, true, GameplayEnums.Outcome.Throw));
                }
            }
            break;    //this is handled in checking if a player wins

        case GameplayEnums.CharacterState.ThrowRecovery:
            if (StateFrames > GameplayConstants.THROW_RECOVERY)
            {
                State       = GameplayEnums.CharacterState.Idle;
                StateFrames = 0;
                Hitboxes.RemoveAll(o => o.HitboxType == GameplayEnums.HitboxType.Hurtbox_Limb);
            }
            break;

        case GameplayEnums.CharacterState.ThrowStartup:
            SetCharacterHurtboxStanding(Hitboxes);
            if (StateFrames > GameplayConstants.THROW_STARTUP)
            {
                State       = GameplayEnums.CharacterState.ThrowActive;
                StateFrames = 0;
                Hitboxes.Add(CreateHitbox(GameplayEnums.HitboxType.Hitbox_Throw, GameplayConstants.THROW_ACTIVE_RANGE));
                ModifyHitbox(Hitboxes, GameplayConstants.THROW_STARTUP_HURTBOX);
            }
            break;

        case GameplayEnums.CharacterState.WalkBack:
            SetCharacterHurtboxStanding(Hitboxes);
            positionOffset = GameplayConstants.WALK_B_SPEED;
            break;

        case GameplayEnums.CharacterState.WalkForward:
            SetCharacterHurtboxStanding(Hitboxes);
            positionOffset = GameplayConstants.WALK_F_SPEED;
            break;

        default:
            throw new System.Exception("Ooops looks like I forgot to handle state : " + State.ToString());
        }

        if (FacingRight)
        {
            Position += positionOffset;
        }
        else
        {
            Position -= positionOffset;
        }


        return(new MatchOutcome());
    }