Пример #1
0
 public override void CheckExitTransition()
 {
     if (forceExit)
     {
         CharacterStateController.EnqueueTransition <NormalMovement>();
     }
 }
Пример #2
0
    private void OnTriggerStay2D(Collider2D collision)
    {
        if (collision.isTrigger)
        {
            return;
        }

        if (!collision.attachedRigidbody)
        {
            return;
        }



        /// only marked objects can interact
        var _controller = collision.attachedRigidbody.GetComponent <CharacterStateController>();

        if (!_controller)
        {
            return;
        }

        if (controller && _controller.GetInput().IsInputUp(4) && tPull.IsReadyRestart())
        {
            controller = null;
        }
        else if (!controller && _controller.GetInput().IsInputDown(4) && tPull.IsReadyRestart())
        {
            controller = _controller;
        }
    }
Пример #3
0
 public PlayerState(Player player, CharacterStateController stateController, PlayerData playerData, string animBoolName)
 {
     this.player          = player;
     this.stateController = stateController;
     this.playerData      = playerData;
     this.animBoolName    = animBoolName;
 }
Пример #4
0
    public Character(CharacterPawn pawn, IInputSource inputSource, CharacterStatus status, CharacterStateController stateController, CharacterStateController weaponStateController, int teamId, CharacterInfo info)
    {
        Status                = status;
        Health                = new FloatReactiveProperty(Status.MaxHealth.Value);
        Pawn                  = pawn;
        InputSource           = inputSource;
        StateController       = stateController;
        WeaponStateController = weaponStateController;
        TeamId                = teamId;
        Info                  = info;
        Inventory             = new BasicInventory(this);

        pawn.SetCharacter(this);

        StateController.Initialize(this);
        WeaponStateController.Initialize(this);

        var inputSourceDisposable = inputSource as IDisposable;

        if (inputSourceDisposable != null)
        {
            _compositeDisposable.Add(inputSourceDisposable);
        }

        Observable.EveryUpdate().Subscribe(OnUpdate).AddTo(_compositeDisposable);
        status.MoveSpeed.Subscribe(UpdatePawnSpeed).AddTo(_compositeDisposable);
        Health.Subscribe(OnHealthChange);           //.AddTo( _compositeDisposable );

        Instances.Add(this);

        Status.ModifierCalculator.Changed += OnModifiersChange;
    }
Пример #5
0
    public override void CharacterMove(Vector2 movement)
    {
        float moveX = movement.x;
        float moveY = movement.y;

        if (Mathf.Abs(moveX) > 0 && Mathf.Abs(moveY) > 0)
        {
            if (GlobalVariables.IsHorizontalMovingFirst)
            {
                movement = new Vector3(moveX, 0, 0);
            }
            else
            {
                movement = new Vector3(0, moveY, 0);
            }
        }
        else if (Mathf.Abs(moveX) > 0)
        {
            movement = new Vector3(moveX, 0, 0);
        }
        else if (Mathf.Abs(moveY) > 0)
        {
            movement = new Vector3(0, moveY, 0);
        }
        else
        {
            Rb.velocity = Vector3.zero;
            CharacterStateController.SetParams(ISMOVING, false);
            return;
        }

        movement *= BasicMovingSpeed;
        Rb.AddForce(movement);
        CharacterStateController.SetParams(ISMOVING, true);
    }
Пример #6
0
    private void FixedUpdate()
    {
        if (!controller)
        {
            return;
        }

        var otherBody = controller.GetBody();

        Vector2 toOther = (Vector2)transform.position - otherBody.position;

        if (toOther.sqrMagnitude < distance * distance)
        {
            return;
        }

        if (toOther.sqrMagnitude > breakDistance * breakDistance)
        {
            controller = null;
            return;
        }

        body.AddForceAtPosition(toOther * -forceDistanceRatioMy, transform.position);
        otherBody.AddForce(toOther * forceDistanceRatioOther);
        otherBody.velocity = otherBody.velocity * otherSlow;
    }
Пример #7
0
    // NOTE: This function is called at runtime and edit time.  Keep that in mind when setting the values of properties.
    public override void ProcessFrame(Playable playable, FrameData info, object playerData)
    {
        CharacterStateController trackBinding = playerData as CharacterStateController;

        if (!trackBinding)
        {
            return;
        }

        int inputCount = playable.GetInputCount();

        for (int i = 0; i < inputCount; i++)
        {
            float inputWeight = playable.GetInputWeight(i);
            ScriptPlayable <ResetEnemyRadarBehaviour> inputPlayable = (ScriptPlayable <ResetEnemyRadarBehaviour>)playable.GetInput(i);
            ResetEnemyRadarBehaviour input = inputPlayable.GetBehaviour();

            if (inputWeight > 0.5f && !input.radarReset)
            {
                GameObject enemyClose;
                enemyClose = trackBinding.m_CharacterController.CharacterTransform.Find("EnemyClose").gameObject;

                for (int j = 0; j < enemyClose.GetComponent <EnemyClose>().pointers.Count; j++)
                {
                    GameObject.Destroy(enemyClose.GetComponent <EnemyClose>().pointers[j]);
                }

                enemyClose.GetComponent <EnemyClose>().pointers.Clear();
                enemyClose.SetActive(false);
                input.radarReset = true;
            }

            // Use the above variables to process each frame of this playable.
        }
    }
Пример #8
0
        public override void CheckExitTransition()
        {
            if (CharacterActions.jetPack.value)
            {
                CharacterStateController.EnqueueTransition <JetPack>();
            }
            else if (CharacterActions.dash.Started)
            {
                CharacterStateController.EnqueueTransition <Dash>();
            }
            else if (CharacterActor.Triggers.Count != 0)
            {
                CharacterStateController.EnqueueTransition <LadderClimbing>();
                CharacterStateController.EnqueueTransition <RopeClimbing>();
            }
            else if (!CharacterActor.IsGrounded)
            {
                if (!CharacterActions.crouch.value)
                {
                    CharacterStateController.EnqueueTransition <WallSlide>();
                }

                CharacterStateController.EnqueueTransition <LedgeHanging>();
            }
        }
Пример #9
0
        public void Move(CharacterStateController controller)
        {
            // Move inputs
            controller.m_CharacterController.moveInput = Input.GetAxis(controller.m_CharacterController.inputMapping.LeftHorizontal);

            // Movements
            if (controller.m_CharacterController.moveInput >= controller.m_CharacterController.m_CharStats.joypadDeathZone)// Move right if "x" axis is over 0.2
            {
                controller.m_CharacterController.rb.velocity = new Vector2(controller.m_CharacterController.m_CharStats.speed, controller.m_CharacterController.rb.velocity.y);
            }
            else if (controller.m_CharacterController.moveInput <= -controller.m_CharacterController.m_CharStats.joypadDeathZone) // Move left if "x" axis is lower -0.2
            {
                controller.m_CharacterController.rb.velocity = new Vector2(-controller.m_CharacterController.m_CharStats.speed, controller.m_CharacterController.rb.velocity.y);
            }
            else
            {
                controller.m_CharacterController.rb.velocity = new Vector2(0, controller.m_CharacterController.rb.velocity.y);
            }

            // Flip the player direction
            if (!controller.m_CharacterController.facingRight && controller.m_CharacterController.moveInput < 0)
            {
                controller.m_CharacterController.PlayerFlip();
            }
            else if (controller.m_CharacterController.facingRight && controller.m_CharacterController.moveInput > 0)
            {
                controller.m_CharacterController.PlayerFlip();
            }
        }
Пример #10
0
    public Character( StatExpressionsInfo statExpressions, CharacterPlanetPawn pawn, IInputSource inputSource, CharacterStatus status, CharacterStateController stateController, CharacterStateController weaponStateController, int teamId, CharacterInfo info )
    {
        this.statExpressions = statExpressions;
        this.status = status;
        this.health = new IntReactiveProperty( this.status.maxHealth.Value );
        this.pawn = pawn;
        this.inputSource = inputSource;
        this.stateController = stateController;
        this.weaponStateController = weaponStateController;
        this.teamId = teamId;
        this.info = info;
        this.inventory = new BasicInventory( this );

        pawn.SetCharacter( this );

        this.stateController.Initialize( this );
        this.weaponStateController.Initialize( this );

        var inputSourceDisposable = inputSource as IDisposable;
        if ( inputSourceDisposable != null ) {

            _compositeDisposable.Add( inputSourceDisposable );
        }

        Observable.EveryUpdate().Subscribe( OnUpdate ).AddTo( _compositeDisposable );
        status.moveSpeed.Subscribe( UpdatePawnSpeed ).AddTo( _compositeDisposable );
        health.Subscribe( OnHealthChange );//.AddTo( _compositeDisposable );

        instances.Add( this );
    }
Пример #11
0
 public override void CheckExitTransition()
 {
     if (!currentRope.IsInRange(ReferencePosition) || CharacterActions.jump.Started)
     {
         CharacterStateController.EnqueueTransition <NormalMovement>();
     }
 }
Пример #12
0
        public override void CheckExitTransition()
        {
            if (CharacterActions.jetPack.value)
            {
                CharacterStateController.EnqueueTransition <JetPack>();
            }
            else if (CharacterActions.dash.Started)
            {
                CharacterStateController.EnqueueTransition <Dash>();
            }
            else if (CharacterActor.Triggers.Count != 0)
            {
                if (CharacterActions.interact.Started)
                {
                    CharacterStateController.EnqueueTransition <LadderClimbing>();
                }
                // else
                // {
                //     //  WIP
                //     // CharacterStateController.EnqueueTransition<RopeClimbing>();
                //     // CharacterStateController.EnqueueTransition<Swimming>();

                // }
            }
            else if (!CharacterActor.IsGrounded)
            {
                CharacterStateController.EnqueueTransition <LedgeHanging>();
            }
        }
Пример #13
0
        public override void Initialize(CharacterStateController stateController)
        {
            base.Initialize(stateController);

            stateController.character.Health
            .Where(_ => _ / (float)stateController.character.Status.MaxHealth.Value <= typedInfo.threshold)
            .Subscribe(OnHealthBelowThreshold);
        }
Пример #14
0
 public void Death(CharacterStateController controller)
 {
     if (GMController.instance.gameStart)
     {
         //Call the Respawn method
         controller.m_CharacterController.PlayerRespawn(GMController.instance.playerInfo[controller.m_CharacterController.playerNumber].PlayerSpawnPoint);
     }
 }
Пример #15
0
    private void Awake()
    {
        StateController = new CharacterStateController();

        PlayerIdle = new PlayerIdleState(this, StateController, playerData, "idle");
        PlayerMove = new PlayerMoveState(this, StateController, playerData, "moving");
        PlayerHide = new PlayerHideState(this, StateController, playerData, "hiding");
    }
Пример #16
0
        public override void Initialize(CharacterStateController stateController)
        {
            base.Initialize(stateController);

            var emCharacter = character as EMCharacter;

            emCharacter.DestinationSet += OnDestinationSet;
        }
    private void Start()
    {
        if (!particle)
        {
            particle = ParticleTypeController.instance.particles[particleId];
        }

        character = GetComponentInParent <CharacterStateController>();
    }
Пример #18
0
        protected override void Awake()
        {
            base.Awake();

            navMeshPath = new NavMeshPath();

            stateController = this.GetComponentInBranch <CharacterActor, CharacterStateController>();
            stateController.MovementReferenceMode = MovementReferenceMode.World;
        }
Пример #19
0
 // OnStateEnter is called when a transition starts and the state machine starts to evaluate this state
 override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
 {
     controller = animator.GetComponent <CharacterStateController>();
     if (controller)
     {
         controller.SetCurrentAnimatorBehaviour(this);
         controller.GetState(skillId).OnAnimationBeggin(stateInfo);
     }
 }
Пример #20
0
        public override void Initialize( CharacterStateController stateController )
        {
            base.Initialize( stateController );

            this.approachState = stateController.states.OfType<ApproachTargetStateInfo.State>().First();
            this.attackState = stateController.states.OfType<AttackStateInfo.State>().First();

            stateController.character.inputSource.targets.OfType<object, Character>().Subscribe( OnCharacterClicked );
        }
Пример #21
0
    void Awake()
    {
        refrence = this;

        timer_healthRegen = new Timer(1f);
        InitStatsDictionary();
        respawning = false;
        health     = 20;
        coins      = 10000000;
    }
Пример #22
0
 public override bool Decide(CharacterStateController controller)
 {
     if (Input.GetButtonDown(controller.m_CharacterController.inputMapping.dodgeInput) && !controller.m_CharacterController.isInDash)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
 public void DoubleJump(CharacterStateController controller)
 {
     // Jump Input
     if (Input.GetButtonDown(controller.m_CharacterController.inputMapping.jumpInput) &&
         controller.m_CharacterController.extraJumps > 0)
     {
         controller.m_CharacterController.extraJumps--;
         controller.m_CharacterController.rb.velocity = Vector2.up * controller.m_CharacterController.m_CharStats.jump;
         GMController.instance.TensionThresholdCheck(GMController.instance.tensionStats.actionsPoints); // add tension points for action
     }
 }
Пример #24
0
 public void Jump(CharacterStateController controller)
 {
     controller.m_CharacterController.extraJumps = controller.m_CharacterController.m_CharStats.extraJumpValue;
     // Jump Input
     if (Input.GetButtonDown(controller.m_CharacterController.inputMapping.jumpInput))
     {
         //Debug.Log(GMController.instance.playerInfo[controller.m_CharacterController.playerNumber].ControllerIndex);
         controller.m_CharacterController.rb.velocity = Vector2.up * controller.m_CharacterController.m_CharStats.jump;
         GMController.instance.TensionThresholdCheck(GMController.instance.tensionStats.actionsPoints);     // add tension points for action
     }
 }
Пример #25
0
 public void OpenDoor(CharacterStateController controller)
 {
     if (Input.GetButtonDown(controller.m_CharacterController.inputMapping.interactInput) &&
         controller.m_CharacterController.canExit)
     {
         GMController.instance.gameEnded   = true;
         GMController.instance.gameStart   = false;
         GMController.instance.canResultCR = false;
         Time.timeScale = 0;
     }
 }
 public override bool Decide(CharacterStateController controller)
 {
     if (!controller.m_CharacterController.isInDash)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
Пример #27
0
 public override bool Decide(CharacterStateController controller)
 {
     if (GMController.instance.GetGameStatus() && GMController.instance.gameStart)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
Пример #28
0
 public override bool Decide(CharacterStateController controller)
 {
     if (controller.m_CharacterController.isGrounded && controller.m_CharacterController.isAlive)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
Пример #29
0
    void Start()
    {
        controller = GetComponentInParent <CharacterStateController>();
        renders    = GetComponentsInChildren <SpriteRenderer>();

        if (viewfinder)
        {
            distanceViewfinder = (viewfinder.transform.position - transform.position).magnitude;
            rendersViewFinder  = viewfinder.GetComponentsInChildren <SpriteRenderer>();
        }
    }
Пример #30
0
 private void OnCollisionEnter(Collision other)
 {
     if (other.gameObject.tag.Equals(GlobalVariables.TagEnemy))
     {
         if (!CharacterStateController.GetCurrentStateName().Equals("BonusMoving"))
         {
             CharacterStateController.SetParams(ISDEAD, true);
             CharacterStateController.SetParams(ISMOVING, false);
             CharacterDead();
         }
     }
 }
Пример #31
0
        public override void ExitBehaviour(float dt, CharacterState toState)
        {
            forceExit = false;
            CharacterActor.IsKinematic             = false;
            CharacterStateController.UseRootMotion = false;
            CharacterActor.AlwaysNotGrounded       = false;
            currentLadder = null;

            CharacterStateController.ResetIKWeights();

            CharacterActor.Velocity = Vector3.zero;
        }
Пример #32
0
        public override void CheckExitTransition()
        {
            if (isDone)
            {
                if (OnDashEnd != null)
                {
                    OnDashEnd(dashDirection);
                }

                CharacterStateController.EnqueueTransition <NormalMovement>();
            }
        }
Пример #33
0
        public override void Initialize( CharacterStateController stateController )
        {
            base.Initialize( stateController );

            states = stateController.states.Where( where => where.info == info ).ToArray();

            //foreach ( var each in states ) {

            //	each.Initialize( stateController );
            //}

            stateController.character.inputSource.targets.Subscribe( OnTargetChange );
        }
    public CharacterStateController GetStateController()
    {
        var result = new CharacterStateController {

            debug = isDebug,
            updateAnimation = updateAnimation,
            states = entries.Select( _ => _.stateInfo.GetState() ).ToArray(),
        };

        foreach ( var each in result.states ) {

            var transitionEntry = entries[result.states.IndexOf( each )];

            each.SetTransitionStates( result.states
                .EquiZip( transitionEntry.transitionMask, ( a, b ) => new { item1 = a, item2 = b } )
                .Where( _ => _.item2 && _.item1 != each )
                .Select( _ => _.item1 ) );
        }

        return result;
    }
Пример #35
0
        public override void Initialize( CharacterStateController stateController )
        {
            base.Initialize( stateController );

            stateController.character.inputSource.targets.OfType<object, ItemView>().Subscribe( SetTarget );
        }
Пример #36
0
 public virtual void Initialize( CharacterStateController stateController )
 {
     this.stateController = stateController;
 }