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; } }
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); }
public TimeObject() { _forwardState = new ForwardState(this); _backwardState = new BackwardState(this); _pauseState = new PauseState(this); _currentState = _pauseState; }
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); }
public TimeController(string groupName) { _forwardState = new ForwardState(this); _backwardState = new BackwardState(this); _pauseState = new PauseState(this); _currentState = _pauseState; _groupName = groupName; Register(_groupName, this); }
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)); }
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; } } }