Пример #1
0
    IEnumerator ResetNow(float waitTime)
    {
        state        = ForwardState.IDLE;
        nextKickTime = 0;

        yield return(new WaitForSeconds(waitTime));

        if (!gameEnded)
        {
            // move to start position
            mTransform.position = new Vector3(posX, 0, 0);
            // look forward (ball)
            var newRotation = Quaternion.LookRotation(ball.transform.position - mTransform.position).eulerAngles;
            newRotation.x              = newRotation.z = 0;
            mTransform.rotation        = Quaternion.Euler(newRotation);
            mRigidbody.velocity        = Vector3.zero;
            mRigidbody.angularVelocity = Vector3.zero;

            yield return(new WaitForSeconds(1));

            // move to start position - bug
            mTransform.position = new Vector3(posX, 0, 0);
            state        = ForwardState.DEFEND;
            goToKickArea = true;
        }
    }
Пример #2
0
    private void MakeFSM(Soldier soldier)
    {
        LookupState lookupState = new LookupState(soldier.gameObject);

        lookupState.AddTransition(Transition.FoundEnemy, StateID.ForwardEnemy);
        lookupState.AddTransition(Transition.HpEmpty, StateID.Dead);

        ForwardState forwardState = new ForwardState(soldier.gameObject);

        forwardState.AddTransition(Transition.LostEnemy, StateID.LookupEnemy);
        forwardState.AddTransition(Transition.CanAttackEnemy, StateID.AttackEnemy);
        forwardState.AddTransition(Transition.HpEmpty, StateID.Dead);

        AttackState attackState = new AttackState(soldier.gameObject);

        attackState.AddTransition(Transition.LostEnemy, StateID.LookupEnemy);
        attackState.AddTransition(Transition.HpEmpty, StateID.Dead);

        DeadState deadState = new DeadState(soldier.gameObject);

        deadState.AddTransition(Transition.HpRemain, StateID.LookupEnemy);

        fsm = new FSMSystem();
        fsm.AddState(lookupState);
        fsm.AddState(forwardState);
        fsm.AddState(attackState);
        fsm.AddState(deadState);
    }
Пример #3
0
        public TimeObject()
        {
            _forwardState  = new ForwardState(this);
            _backwardState = new BackwardState(this);
            _pauseState    = new PauseState(this);

            _currentState = _pauseState;
        }
Пример #4
0
    private void InitializeSwitchMachine()
    {
        ForwardState s_forward = new ForwardState(ref c_positionData);
        SwitchState  s_switch  = new SwitchState(ref c_positionData);

        sm_switch = new StateMachine(StateRef.FORWARD_STANCE);
        sm_switch.AddState(s_forward, StateRef.FORWARD_STANCE);
        sm_switch.AddState(s_switch, StateRef.SWITCH_STANCE);
    }
Пример #5
0
        public TimeController(string groupName)
        {
            _forwardState  = new ForwardState(this);
            _backwardState = new BackwardState(this);
            _pauseState    = new PauseState(this);

            _currentState = _pauseState;
            _groupName    = groupName;
            Register(_groupName, this);
        }
Пример #6
0
    public void Commemorate()
    {
        state = ForwardState.IDLE;

        // animation
        animator.SetBool("kick", false);
        animator.SetBool("commemorate", true);
        hasBall = false;

        // look camera
        var newRotation = Quaternion.LookRotation(Camera.main.transform.position - transform.position).eulerAngles;

        newRotation.x      = newRotation.z = 0;
        transform.rotation = Quaternion.Euler(newRotation);

        StartCoroutine(ResetNow(2.2f));
    }
Пример #7
0
    void Update()
    {
        if (gameEnded)
        {
            mRigidbody.velocity = Vector3.zero;
            state = ForwardState.IDLE;
        }
        rigidbodySpeed = mRigidbody.velocity.magnitude;
        direction      = target.position - mTransform.position;
        direction.y    = 0;
        direction.Normalize();

        Animate();

        if (state == ForwardState.LOOK)
        {
            // rotation
            movementDirection = Vector3.Lerp(mTransform.forward, direction, Time.deltaTime * rotationSpeed);
            var targetRotation = Quaternion.LookRotation(movementDirection);
            var deltaRot       = Quaternion.Lerp(mTransform.rotation, targetRotation, rotationSpeed);
            mRigidbody.MoveRotation(deltaRot);
            mRigidbody.angularVelocity = Vector3.zero;
            mRigidbody.velocity        = Vector3.zero;
            // look
            lookingAt = Vector3.Lerp(lookingAt, ball.position, Time.deltaTime * rotationSpeed);
            animator.SetLookAtPosition(lookingAt);
            animator.SetLookAtWeight(0.5f);
        }
        else if (state == ForwardState.IDLE)
        {
            mRigidbody.velocity        = Vector3.zero;
            mRigidbody.angularVelocity = Vector3.zero;
        }
        else
        {
            if (hasBall)
            {
                if (goToKickArea)
                {
                    target = kickArea;                     // goal;
                }
                else
                {
                    mRigidbody.velocity = Vector3.zero;                     // stop ?
                    int range = Random.Range(1, 3);
                    if (range == 1)
                    {
                        target = goal1;
                    }
                    else
                    {
                        target = goal2;
                    }

                    if (Physics.Raycast(transform.position, transform.forward, out hit))
                    {
                        if (hit.transform.name == "GoalColliderLeft1" ||
                            hit.transform.name == "GoalColliderLeft2" ||
                            hit.transform.name == "GoalKeeperPlayer")
                        {
                            TryKick();
                        }
                    }
                }

                HandleBall();
            }
            else
            {
                target = ball;
            }
        }
    }