示例#1
0
    public override CharacterState UpdataState(Character character, InputOrder input)
    {
        CharacterState tempState = this;

        if (character.OnGround())
        {
            //Debug.Log("On Ground Now.");
            switch (input)
            {
            case InputOrder.stand:
                tempState = new IdleState();
                break;

            case InputOrder.walk:
                tempState = new WalkState();
                break;

            case InputOrder.squat:
                tempState = new SquatState();
                break;

            default:
                tempState = new IdleState();
                break;
            }
        }

        return(tempState);
    }
示例#2
0
    private void MakeFSM()
    {
        IdleState idle = new IdleState();

        idle.AddTransition(Transition.Walk, StateID.Walk);
        idle.AddTransition(Transition.Jump, StateID.Jump);
        idle.AddTransition(Transition.Die, StateID.Die);

        WalkState walk = new WalkState(path);

        walk.AddTransition(Transition.Idle, StateID.Idle);
        walk.AddTransition(Transition.Jump, StateID.Jump);
        walk.AddTransition(Transition.Die, StateID.Die);

        JumpState jump = new JumpState();

        jump.AddTransition(Transition.Idle, StateID.Idle);
        jump.AddTransition(Transition.Die, StateID.Die);
        DeadState die = new DeadState();

        fsm = new FSMSystem();
        fsm.AddState(idle);
        fsm.AddState(walk);
        fsm.AddState(jump);
        fsm.AddState(die);
    }
    // Update is called once per frame
    void FixedUpdate()
    {
        //print (state);
        //print (finalizingMovement);
        float force = Input.GetAxisRaw ("Vertical");
        //float force = 0;
        float twist = Input.GetAxisRaw ("Horizontal");

        if (twist == 1) {
            hips.SendMessage("turnRight");
        }
        else if (twist == -1) {
            hips.SendMessage("turnLeft");
        }

        if (force == 0) {
            if(state == WalkState.STAND){
                state = WalkState.STAND;
            }
            else{
                finalizingMovement = true;	// telling that it should give the last step
            }
        }
        else if(state == WalkState.STAND)
                state = WalkState.CROUCH_TO_WALK;
    }
示例#4
0
 public void SetStealth()
 {
     walkState      = WalkState.STEALTH;
     stateText.text = "M:" + walkState.ToString();
     //temp code
     animator.SetBool("isWalking", false);
 }
示例#5
0
 public void SetWalk(float speedMod)
 {
     stepPeriod = 0.45f / speedMod;
     if (walkState == WalkState.NONE)
     {
         walkTimer = stepPeriod;
     }
     animator.SetBool("isWalking", true);
     animator.SetFloat("walkSpeed", speedMod);
     if (speedMod == 1)
     {
         walkState      = WalkState.NORMAL;
         stateText.text = "M:" + walkState.ToString();
     }
     else if (speedMod < 1)
     {
         walkState      = WalkState.SLOW;
         stateText.text = "M:" + walkState.ToString();
     }
     else if (speedMod > 1)
     {
         walkState      = WalkState.FAST;
         stateText.text = "M:" + walkState.ToString();
     }
 }
	// Use this for initialization
	void Start () {
		hips = GameObject.Find("/swat/Hips"); 

		state = WalkState.STAND;
		isFirstStep = true;
		finalizingMovement = false;
	}
	// Update is called once per frame
	void FixedUpdate () {
		//print (state);
		//print (finalizingMovement);
		float force = Input.GetAxisRaw ("Vertical");
		//float force = 0;
		float twist = Input.GetAxisRaw ("Horizontal");

		if (twist == 1) {
			hips.SendMessage("turnRight");
		}
		else if (twist == -1) {
			hips.SendMessage("turnLeft");
		}

		if (force == 0) {
			if(state == WalkState.STAND){
				state = WalkState.STAND;
			}
			else{
				finalizingMovement = true;	// telling that it should give the last step 
			}
		} 
		else if(state == WalkState.STAND)
				state = WalkState.CROUCH_TO_WALK;
	}
示例#8
0
        public static bool CalcTypeList(this List<Variable> ps, WalkState ws)
        {
            Type type = null;
            for (int i = ps.Count - 1; i >= 0; i--)
            {
                if (ps[i].Type == null)
                {
                    ps[i].SystemType = type;
                }
                else
                {
                    type = ps[i].Type.ToType(ws);
                    ps[i].SystemType = type;
                }
            }

            bool retVal = true;
            foreach (var p in ps)
            {
                if (p.SystemType == null)
                {
                    ws.AddError("Type could not be determined for " + p.Name);
                    retVal = false;
                }
            }
            return retVal;
        }
示例#9
0
        private bool CheckForStepPerFoot(Vector3[] data)
        {
            if (Vector3.Angle(data[2], data[3]) > thresholdAngleInDegreeInStep)
            {
                return(false);
            }

            float kneeHipLength = (data[0] - data[1]).magnitude;

            if (avgKneeHipLength < 0.01f)
            {
                avgKneeHipLength = kneeHipLength;
            }

            if (Mathf.Abs((kneeHipLength / avgKneeHipLength) - 1.0f) < 0.05f)
            {
                avgKneeHipLength = (avgKneeHipLength + kneeHipLength) * 0.5f;
            }

            float heightDifference = Mathf.Abs(data[0].y - data[1].y);

            if ((heightDifference / avgKneeHipLength) >= thresholdKneeHipLengthInPercentageInStep)
            {
                return(false);
            }

            currentWalkState = WalkState.InStep;
            return(true);
        }
示例#10
0
    public static FSMStateMachine GetCharacterEditorFSM(Creature owner)
    {
        FSMTranslationMap translationMap = new FSMTranslationMap();
        DeadState         dead           = new DeadState(owner);
        AttackState       attackState    = new AttackState(owner);
        IdleState         idle           = new IdleState(owner);
        WalkState         walk           = new WalkState(owner);
        HitState          hitState       = new HitState(owner);
        RunState          runState       = new RunState(owner);
        HitMoveState      hitMoveState   = new HitMoveState(owner);
        HitFlyState       hitFlyState    = new HitFlyState(owner);

        translationMap.addState(dead);
        translationMap.addState(idle);
        translationMap.addState(walk);
        translationMap.addState(runState);
        translationMap.addState(hitState);
        translationMap.addState(hitMoveState);
        translationMap.addState(attackState);
        translationMap.addState(hitFlyState);
        translationMap.MixAll();
        translationMap.check();
        FSMStateMachine fsm = new FSMStateMachine(translationMap);

        return(fsm);
    }
示例#11
0
    public PlayerState(IEventManager playerEvent)
    {
        #region Player State Initialization
        _StateIdle              = new IdleState(this);
        _StateWalk              = new WalkState(this);
        _StateSprint            = new SprintState(this);
        _StateFall              = new FallState(this);
        _StateCrouch            = new CrouchState(this);
        _StateJump              = new JumpState(this);
        _StateCrouchWalk        = new CrouchWalkState(this);
        _StateSlide             = new SlideState(this);
        _StateCrouchJump        = new CrouchJumpState(this);
        _StateCrouchFall        = new CrouchFallState(this);
        _StateAirMoveCrouchFall = new AirMoveCrouchFallState(this);
        _StateAirMoveCrouchJump = new AirMoveCrouchJumpState(this);
        _StateAirMoveFall       = new AirMoveFallState(this);
        _StateAirMoveJump       = new AirMoveJumpState(this);
        #endregion

        _ActiveProxies      = new HashSet <IDynamicProxy>();
        _EventPlayer        = playerEvent;
        _CurrentPlayerState = _StateIdle;

        #region State Proxy Initialization
        _MediatorToggleProxy             = new ToggleProxyMediator();
        _ProxySprint                     = new SprintProxy(this, _MediatorToggleProxy);
        _ProxyCrouch                     = new CrouchProxy(this, _MediatorToggleProxy);
        _MediatorToggleProxy.ProxyCrouch = _ProxyCrouch;
        _MediatorToggleProxy.ProxySprint = _ProxySprint;

        _ProxyWalk = new WalkProxy(this, _MediatorToggleProxy);
        _ProxyFall = new FallProxy(this);
        _ProxyJump = new JumpProxy(this, _MediatorToggleProxy);
        #endregion
    }
示例#12
0
    public override CharacterState UpdataState(Character character, InputOrder input)
    {
        CharacterState tempState = this;

        if (!character.OnGround())
        {
            tempState = new JumpState();
        }
        else
        {
            switch (input)
            {
            case InputOrder.stand:
                tempState = new IdleState();
                break;

            case InputOrder.jump:
                character.DoJump();
                tempState = new JumpState();
                break;

            case InputOrder.walk:
                tempState = new WalkState();
                break;
            }
        }

        return(tempState);
    }
示例#13
0
    public void ChangeValue(int value)
    {
        switch (value)
        {
        case 1:
            state = WalkState.F;
            break;

        case 2:
            state = WalkState.B;
            break;

        case 3:
            state = WalkState.L;
            break;

        case 4:
            state = WalkState.R;
            break;

        default:
            break;
        }
        RandomWalk(state);
    }
示例#14
0
 public void OnPressed()
 {
     if (myIsReleased == true /*&& (myWalkState == WalkState.Stay || myWalkState == WalkState.Down)*/)
     {
         myActuallSpeed = mySpeed;
         myWalkState    = WalkState.Up;
     }
 }
示例#15
0
 public override void Update()
 {
     _waiter.Update();
     if (_waiter.Done())
     {
         var walk = new WalkState(_cat, rand.Next(0, 2));
         _cat.Switch(walk);
     }
 }
示例#16
0
 private void OnEnable()
 {
     myIsReleased   = false;
     myActuallSpeed = 0f;
     //myIsPressed = false;
     mySpeed          = (float)Camera.main.pixelHeight / mySpeedPercent;
     myDeacceleration = Camera.main.pixelHeight / 100f * myDeacceleratingPerccent;
     myWalkState      = WalkState.Stay;
 }
示例#17
0
    void OnTriggerEnter2D(Collider2D col)
    {
        if (col.gameObject.CompareTag("Player"))
        {
            //May not be necessary. Might be better to assign on Start.
            player = col.gameObject;

            enemyState = WalkState.PURSUE;
        }
    }
示例#18
0
 // Start is called before the first frame update
 void Start()
 {
     rb           = GetComponent <Rigidbody2D>();
     enemyState   = WalkState.PATROL;
     visionObject = transform.GetChild(0);
     changeDirection();
     movementTimer = TIMER;
     restTimer     = TIMER;
     Random.InitState(System.DateTime.Now.Millisecond);
 }
示例#19
0
 public void Reset()
 {
     _currentMarker      = null;
     _nextMarkNo         = 0;
     _total_accum_len    = 0;
     _expectedSegmentLen = 0;
     _state               = WalkState.Init;
     _nextMarkNo          = 0;
     _latest_X            = _latest_Y =
         _latest_moveto_Y = _latest_moveto_Y = 0;
 }
示例#20
0
        public void GenClassItems(WalkState ws, ITypeContainer parent)
        {
            var c = parent.GetClass(ws.Assembly, ws.Namespace, Name, Public);
            foreach (var s in Statements)
            {
                var t = s.GetType();
                if (t == typeof(Class))
                {
                    (s as Class).GenClassItems(ws, c);
                }
                else if (t == typeof(FunctionDef))
                {
                    c.Functions.Add(new Function(c, s as FunctionDef, ws));
                }
                else if (t == typeof(PropertySet))
                {
                    var ps = s as PropertySet;
                    if (ps.CalcTypeList(ws))
                    {
                        ExprList el = null;
                        if (ps.Vals != null)
                        {
                            el = ps.Vals as ExprList;
                            if (ps.Props.Count != el.Expressions.Count)
                            {
                                ws.AddError("Mismatched property/value counts: " + ps.Props.Count + " != " + el.Expressions.Count);
                                el = null;
                            }
                        }

                        for (int i = 0; i < ps.Props.Count; i++)
                        {
                            var p = ps.Props[i];
                            var prop = p.Static ? new Constant(p, ws) : new Field(p, ws);
                            prop.CreateField(c);
                            if (el != null)
                            {
                                object val = el.Expressions[i].Calculate(ws);
                                if (val != null)
                                {
                                    prop.SetDefault(p.SystemType.Cast(val, ws));
                                }
                                // TODO - Do something with default values for fields.
                            }
                            c.Fields.Add(prop);
                        }
                    }
                }
                else
                {
                    ws.AddError("Unknown class statement: " + t);
                }
            }
        }
示例#21
0
    // Use this for initialization
    void Start()
    {
        manager = (GameObject.Find("Manager") as GameObject).GetComponent <Manager>();
        manager.NewBlorp(this);

        age    = 0;
        time   = 0;
        loving = false;

        actualState = new WalkState(this);
    }
示例#22
0
    private void Awake()
    {
        agent = GetComponent <aAgent>();

        idleState  = new IdleState(this);
        walkState  = new WalkState(this);
        aggroState = new AggroState(this);

        currentState = idleState;

        destination = FindObjectOfType <Castle> ().transform;
    }
示例#23
0
    /// <summary> Сброс параметров противника </summary>
    public void Reset(Vector2 position, Vector2 point)
    {
        _isActive = true;
        _enemyObject.transform.localScale = new Vector3(Scale, Scale, 1);
        Transform.position = position;

        Vector2 direction = (point - position).normalized;

        State = new WalkState(direction, this);

        _enemyObject.SetActive(true);
    }
示例#24
0
        private void initializeSateMachine()
        {
            idleState   = new IdleState();
            walkState   = new WalkState();
            attackState = new AttackState();
            fallState   = new FallState();

            playerStateMachine = new StateMachine <Player>(this, idleState);
            playerStateMachine.addState(walkState);
            playerStateMachine.addState(attackState);
            playerStateMachine.addState(fallState);
        }
 public override void update()
 {
     if (mWalkState == null)
     {
         if (mCenterPosition == null)
         {
             mCenterPosition = parent.mMapPosition;
         }
         mWalkState = new StoppingState(this);
     }
     mWalkState.update();
 }
示例#26
0
 void Awake()
 {
     isFlip            = false;
     charcter_state[0] = new IdelState(gameObject);   //默认状态
     charcter_state[1] = new WalkState(gameObject);   //行走状态
     charcter_state[2] = new AttackState(gameObject); //攻击状态
     charcter_state[3] = new DefendState(gameObject); //防御状态
     CurrentState      = new State(gameObject);
     CurrentState      = charcter_state[0];
     DataInit();
     UiInit();
 }
        void Awake()
        {
            var walkState = new WalkState(this);
            var runState  = new RunState(this);

            mFsm.AddState(walkState);
            mFsm.AddState(runState);

            mFsm.AddTransition(new SpaceKeyDown());
            mFsm.AddTransition(new SpaceKeyUp());

            mFsm.StartState <WalkState>();
        }
示例#28
0
 private void OnTriggerEnter2D(Collider2D collision)
 {
     if (collision.gameObject.layer == LayerMask.NameToLayer("Goal"))
     {
         GameManager.Instance.AddScore(1);
         myActuallSpeed *= 5;
         Destroy(gameObject, 1f);
         //StartCoroutine(WinDelay());
     }
     else if (collision.gameObject.layer == LayerMask.NameToLayer("KillZone"))
     {
         myWalkState = WalkState.Stay;
     }
 }
示例#29
0
            public void Reset()
            {
                _currentMark        = null;
                _nextMarkNo         = 0;
                _expectedSegmentLen = 0;

                _state               = WalkState.Init;
                _nextMarkNo          = 0;
                _latest_X            = _latest_Y =
                    _latest_moveto_Y = _latest_moveto_Y = 0;
                _total_accum_len     = 0;
                _tempPoints.Clear();
                _output = null;
            }
示例#30
0
    // Use this for initialization
    void Start()
    {
        idleState = new IdleState();
        walkState = new WalkState();
        jumpState = new JumpState();

        currentState = State_Player.IDLE;
        oldState     = State_Player.NONE;

        //add
        stateMachine.Add(State_Player.IDLE, idleState.PlayerEnter, idleState.PlayerUpdate, idleState.PlayerExit);
        stateMachine.Add(State_Player.WALK, walkState.PlayerEnter, walkState.PlayerUpdate, walkState.PlayerExit);
        stateMachine.Add(State_Player.JUMP, jumpState.PlayerEnter, jumpState.PlayerUpdate, jumpState.PlayerExit);
    }
示例#31
0
 // Start is called before the first frame update
 void Start()
 {
     _currentWalkState = WalkState.OffPath;
     if (myPathCreator)
     {
         _maxDistanceTraveled = myPathCreator.path.length;
     }
     else
     {
         _maxDistanceTraveled = 0;
     }
     _anim   = GetComponent <Animator>();
     _sprite = GetComponent <SpriteRenderer>();
 }
示例#32
0
    private void Awake()
    {
        chaseState      = new ChaseState(this);
        patrolState     = new PatrolState(this);
        guardState      = new GuardState(this);
        dazedState      = new DazedState(this);
        distractedState = new DistractedState(this);
        searchingState  = new SearchingState(this);
        suspiciousState = new SuspiciousState(this);
        koState         = new KOState(this);
        walkState       = new WalkState(this);

        navMeshAgent = GetComponent <NavMeshAgent>();
    }
示例#33
0
    private void MakeFSM()
    {
        IdleState idleState = new IdleState(this, StateID.IdleState);
        WalkState walkState = new WalkState(this, StateID.PatrolState, walkSpeed);

        //IdleState
        idleState.AddTransition(new TimeTransition(walkState, idleTime));

        //WalkState
        walkState.AddTransition(new TimeTransition(idleState, walkTime));

        _fsm.AddState(idleState);
        _fsm.AddState(walkState);
    }
示例#34
0
 public void GenClassItems(WalkState ws)
 {
     ws.FileReset();
     foreach (var s in Statements)
     {
         var t = s.GetType();
         if (t == typeof(Class))
         {
             (s as Class).GenClassItems(ws, ws.Assembly);
         }
         else if (t == typeof(Namespace))
         {
             var n = s as Namespace;
             ws.Namespace = n.Name.ToString();
         }
     }
 }
示例#35
0
        public List<Type> CalcTypes(WalkState ws)
        {
            List<Type> ltl = Left.CalcTypes(ws);
            List<Type> rtl = Right.CalcTypes(ws);

            if (ltl.Count == rtl.Count && ltl.Count == 1)
            {
                Type lt = ltl[0];
                Type rt = rtl[0];
                if (Op.IsBooleanOp()) { return new List<Type> { typeof(bool) }; }
                else if (Op == TokenType.As) { return rtl; }
                else if (lt == typeof(string) || rt == typeof(string)) { return new List<Type> { typeof(string) }; }
                else if (lt == rt) { return ltl; }
            }

            ws.AddError("Cannot apply binary operator " + Op + " with " + ltl.Count + " type(s) and " + rtl.Count + " type(s).");
            return new List<Type> { };
        }
示例#36
0
 public void GenTypes(WalkState ws, ITypeContainer parent)
 {
     if (!string.IsNullOrEmpty(ws.Namespace))
     {
         var c = parent.GetClass(ws.Assembly, ws.Namespace, Name, Public);
         foreach(var s in Statements)
         {
             var t = s.GetType();
             if (t == typeof(Class))
             {
                 (s as Class).GenTypes(ws, c);
             }
         }
     }
     else
     {
         ws.AddError("No namespace specified for class " + Name);
     }
 }
示例#37
0
        public static object Cast(this Type type, object val, WalkState ws)
        {
            if (type == typeof(bool)) { return Convert.ToBoolean(val); }
            else if (type == typeof(char)) { return Convert.ToChar(val); }
            else if (type == typeof(float)) { return Convert.ToSingle(val); }
            else if (type == typeof(double)) { return Convert.ToDouble(val); }
            else if (type == typeof(sbyte)) { return Convert.ToSByte(val); }
            else if (type == typeof(short)) { return Convert.ToInt16(val); }
            else if (type == typeof(int)) { return Convert.ToInt32(val); }
            else if (type == typeof(long)) { return Convert.ToInt64(val); }
            else if (type == typeof(byte)) { return Convert.ToByte(val); }
            else if (type == typeof(ushort)) { return Convert.ToUInt16(val); }
            else if (type == typeof(uint)) { return Convert.ToUInt32(val); }
            else if (type == typeof(ulong)) { return Convert.ToUInt64(val); }
            else if (type == typeof(string)) { return Convert.ToString(val); }

            ws.AddError("Cannot convert '" + val + "' to " + type);
            return null;
        }
示例#38
0
        public static bool CalcTypeList(this PropertySet ps, WalkState ws)
        {
            Type type = null;
            for (int i = ps.Props.Count - 1; i >= 0; i--)
            {
                if (ps.Props[i].Type == null)
                {
                    ps.Props[i].SystemType = type;
                }
                else
                {
                    type = ps.Props[i].Type.ToType(ws);
                    ps.Props[i].SystemType = type;
                }
            }

            if (ps.Vals != null)
            {
                var types = (ps.Vals as ExprList).CalcTypes(ws);
                if (ps.Props.Count == types.Count)
                {
                    for (int i = 0; i < ps.Props.Count; i++)
                    {
                        if (ps.Props[i].SystemType == null)
                        {
                            ps.Props[i].SystemType = types[i];
                        }
                    }
                }
            }

            bool retVal = true;
            foreach (var p in ps.Props)
            {
                if (p.SystemType == null)
                {
                    ws.AddError("Type could not be determined for " + p.Name);
                    retVal = false;
                }
            }
            return retVal;
        }
示例#39
0
 void standPosition()
 {
     finalizingMovement = false;
     isFirstStep = true;
     state = WalkState.STAND;
 }
示例#40
0
 void rightStep()
 {
     state = WalkState.RIGHT_STEP;
     //print (state);
 }
示例#41
0
 void rightStepCalculate()
 {
     state = WalkState.CALCULATE_RIGHT_STEP;
     //print (state);
 }
示例#42
0
 void liftingToStand()
 {
     state = WalkState.RISE_TO_STAND;
 }
示例#43
0
 void pickLeg()
 {
     state = WalkState.PICK_LEG;
 }
示例#44
0
 public List<Type> CalcTypes(WalkState ws)
 {
     return new List<Type> { };
 }
示例#45
0
 void leftStepCalculate()
 {
     state = WalkState.CALCULATE_LEFT_STEP;
     //print (state);
 }
示例#46
0
 void crouchToWalk()
 {
     state = WalkState.CROUCH_TO_WALK;
     //print (state);
 }
示例#47
0
 public List<Type> CalcTypes(WalkState ws)
 {
     return new List<Type> { this.ToType(ws) };
 }
示例#48
0
 public object Calculate(WalkState ws)
 {
     return null;
 }
示例#49
0
        public object Calculate(WalkState ws)
        {
            var ts = Expr.CalcTypes(ws);
            if (ts.Count != 1)
            {
                ws.AddError("Cannot use a unary operator on a type with " + ts.Count + " return type(s).");
                return null;
            }
            Type type = ts[0];
            var val = Expr.Calculate(ws);
            switch (Op)
            {
                case TokenType.Sub:
                    if (type.IsFloatingPointType())
                    {
                        return type.Cast(-Convert.ToDouble(val), ws);
                    }
                    else if (type.IsIntegerType())
                    {
                        return type.Cast(-Convert.ToInt64(val), ws);
                    }
                    ws.AddError("Cannot negate a field of type " + type);
                    return null;
                case TokenType.Not:
                    if (type == typeof(bool)) { return !(bool)val; }
                    ws.AddError("Cannot use not on a field of type " + type);
                    return null;
            }

            ws.AddError("Unknown unary op encountered when calculating value: " + Op);
            return null;
        }
示例#50
0
 public List<Type> CalcTypes(WalkState ws)
 {
     var types = new List<Type>();
     foreach (var e in Expressions) { types.AddRange(e.CalcTypes(ws)); }
     return types;
 }
示例#51
0
 public object Calculate(WalkState ws)
 {
     return Val[0];
 }
示例#52
0
 public List<Type> CalcTypes(WalkState ws)
 {
     return new List<Type> { typeof(char) };
 }
示例#53
0
 public object Calculate(WalkState ws)
 {
     return Convert.ToDouble(Val);
 }
示例#54
0
 void leftStep()
 {
     state = WalkState.LEFT_STEP;
     //print (state);
 }
示例#55
0
 public List<Type> CalcTypes(WalkState ws)
 {
     return Expr.CalcTypes(ws);
 }
示例#56
0
        /// <summary>
        /// Initialize controlling state machine
        /// </summary>
        private void InitializeStateMachine()
        {
            //states
            IdleState idleState = new IdleState();
            idleState.Parent = this;
            mStateMachine.AddState(idleState);

            WalkState walkState = new WalkState();
            walkState.Parent = this;
            mStateMachine.AddState(walkState);

            /*
            RunState runState = new RunState();
            runState.Parent = this;
            mStateMachine.AddState(runState);
            */

            GetWalkTarget getWalkTargetState = new GetWalkTarget();
            getWalkTargetState.Parent = this;
            mStateMachine.AddState(getWalkTargetState);
                
            SpawnInState spawnInState = new SpawnInState();
            spawnInState.Parent = this;
            mStateMachine.AddState(spawnInState);

            SpawnOutState spawnOutState = new SpawnOutState();
            spawnOutState.Parent = this;
            mStateMachine.AddState(spawnOutState);

            DeadState deadState = new DeadState();
            deadState.Parent = this;
            mStateMachine.AddState(deadState);

            EatCarrotState eatCarrotState = new EatCarrotState();
            eatCarrotState.Parent = this;
            mStateMachine.AddState(eatCarrotState);


            EatFlowerState eatFlowerState = new EatFlowerState();
            eatFlowerState.Parent = this;
            mStateMachine.AddState(eatFlowerState);

            WinDanceState winDanceState = new WinDanceState();
            winDanceState.Parent = this;
            mStateMachine.AddState(winDanceState);
            LostState lostState = new LostState();
            lostState.Parent = this;
            mStateMachine.AddState(lostState);
            //transitions
            mStateMachine.AddTransition((int)CharacterEvents.To_Walk, idleState, walkState);
            mStateMachine.AddTransition((int)CharacterEvents.To_GetTarget, idleState, getWalkTargetState);

            mStateMachine.AddTransition((int)CharacterEvents.To_Idle, walkState, idleState);
            mStateMachine.AddTransition((int)CharacterEvents.To_GetTarget, walkState, getWalkTargetState);

            mStateMachine.AddTransition((int)CharacterEvents.To_Walk, getWalkTargetState, walkState);
            mStateMachine.AddTransition((int)CharacterEvents.To_Idle, getWalkTargetState, idleState);

            mStateMachine.AddTransition((int)CharacterEvents.To_GetTarget, spawnInState, getWalkTargetState);

            mStateMachine.AddTransition((int)CharacterEvents.To_SpawnOut, getWalkTargetState, spawnOutState);
            mStateMachine.AddTransition((int)CharacterEvents.To_EatCarrot, getWalkTargetState, eatCarrotState);
            mStateMachine.AddTransition((int)CharacterEvents.To_EatFlower, getWalkTargetState, eatFlowerState);


            mStateMachine.AddTransition((int)CharacterEvents.To_Dead, spawnOutState, deadState);

            mStateMachine.AddTransition((int)CharacterEvents.To_GetTarget, eatCarrotState, getWalkTargetState);

            mStateMachine.AddTransition((int)CharacterEvents.To_GetTarget, eatFlowerState, getWalkTargetState);

            mStateMachine.AddTransition((int)CharacterEvents.To_WinDance, getWalkTargetState, winDanceState);
            mStateMachine.AddTransition((int)CharacterEvents.To_WinDance, idleState, winDanceState);
            mStateMachine.AddTransition((int)CharacterEvents.To_WinDance, walkState, winDanceState);
            mStateMachine.AddTransition((int)CharacterEvents.To_WinDance, spawnInState, winDanceState);
            mStateMachine.AddTransition((int)CharacterEvents.To_WinDance, spawnOutState, winDanceState);
            mStateMachine.AddTransition((int)CharacterEvents.To_WinDance, eatFlowerState, winDanceState);
            mStateMachine.AddTransition((int)CharacterEvents.To_WinDance, eatCarrotState, winDanceState);
            mStateMachine.AddTransition((int)CharacterEvents.To_Lost, idleState, lostState);
            mStateMachine.AddTransition((int)CharacterEvents.To_Lost, walkState, lostState);
            mStateMachine.AddTransition((int)CharacterEvents.To_Lost, getWalkTargetState, lostState);
            mStateMachine.AddTransition((int)CharacterEvents.To_Lost, spawnInState, lostState);
            mStateMachine.AddTransition((int)CharacterEvents.To_Lost, spawnOutState, lostState);
            mStateMachine.AddTransition((int)CharacterEvents.To_Lost, eatFlowerState, lostState);
            mStateMachine.AddTransition((int)CharacterEvents.To_Lost, eatCarrotState, lostState);
#if (WINDOWS_PHONE && !SILVERLIGHT)
 mStateMachine.AddTransition((int)CharacterEvents.To_SpawnIn, deadState, spawnInState);
#endif
            //mStateMachine.AddTransition((int)CharacterEvents.To_Run, walkState, runState);
            //mStateMachine.AddTransition((int)CharacterEvents.TimerElapsed, runState, walkState);

            // character starts in a spawn in state
#if (WINDOWS_PHONE && !SILVERLIGHT)
            mStateMachine.StartState = deadState;
#else
            mStateMachine.StartState = spawnInState;
#endif
        }
示例#57
0
 public List<Type> CalcTypes(WalkState ws)
 {
     return new List<Type> { typeof(string) };
 }
示例#58
0
    // Use this for initialization
    void Start()
    {
        hips = GameObject.Find("/swat/Hips");

        state = WalkState.STAND;
        isFirstStep = true;
        finalizingMovement = false;
    }
示例#59
0
        public object Calculate(WalkState ws)
        {
            Type lt, rt;
            object left = Left.Calculate(ws);
            object right = Right.Calculate(ws);
            switch (Op)
            {
                case TokenType.As:
                    rt = Right.CalcTypes(ws)[0];
                    return rt.Cast(left, ws);
                case TokenType.Is:
                    var lts = Left.CalcTypes(ws);
                    rt = Right.CalcTypes(ws)[0];
                    return (lts.Count == 1 && lts[0] == rt);
                case TokenType.Add:
                    lt = CalcTypes(ws)[0];
                    if (lt.IsFloatingPointType())
                    {
                        return lt.Cast(Convert.ToDouble(left) + Convert.ToDouble(right), ws);
                    }
                    else if (lt.IsIntegerType())
                    {
                        return lt.Cast(Convert.ToInt64(left) + Convert.ToInt64(right), ws);
                    }
                    else if (lt == typeof(string))
                    {
                        return left.ToString() + right.ToString();
                    }
                    break;
                case TokenType.Sub:
                    lt = CalcTypes(ws)[0];
                    if (lt.IsFloatingPointType())
                    {
                        return lt.Cast(Convert.ToDouble(left) - Convert.ToDouble(right), ws);
                    }
                    else if (lt.IsIntegerType())
                    {
                        return lt.Cast(Convert.ToInt64(left) - Convert.ToInt64(right), ws);
                    }
                    break;
                case TokenType.Mul:
                    lt = CalcTypes(ws)[0];
                    if (lt.IsFloatingPointType())
                    {
                        return lt.Cast(Convert.ToDouble(left) * Convert.ToDouble(right), ws);
                    }
                    else if (lt.IsIntegerType())
                    {
                        return lt.Cast(Convert.ToInt64(left) * Convert.ToInt64(right), ws);
                    }
                    break;
                case TokenType.Div:
                    lt = CalcTypes(ws)[0];
                    if (lt.IsFloatingPointType())
                    {
                        return lt.Cast(Convert.ToDouble(left) / Convert.ToDouble(right), ws);
                    }
                    else if (lt.IsIntegerType())
                    {
                        return lt.Cast(Convert.ToInt64(left) / Convert.ToInt64(right), ws);
                    }
                    break;
                case TokenType.Mod:
                    lt = CalcTypes(ws)[0];
                    if (lt.IsIntegerType())
                    {
                        return lt.Cast(Convert.ToInt64(left) % Convert.ToInt64(right), ws);
                    }
                    break;
                case TokenType.BAnd:
                case TokenType.BOr:
                case TokenType.BXOr:
                    break;
                case TokenType.Equal:
                    return (left as IComparable).CompareTo(right) == 0;
                case TokenType.NotEqual:
                    return (left as IComparable).CompareTo(right) != 0;
                case TokenType.LeftCaret:
                    return (left as IComparable).CompareTo(right) < 0;
                case TokenType.LtEqual:
                    return (left as IComparable).CompareTo(right) < 1;
                case TokenType.RightCaret:
                    return (left as IComparable).CompareTo(right) > 0;
                case TokenType.GtEqual:
                    return (left as IComparable).CompareTo(right) > -1;
                case TokenType.And:
                    return ((bool)left) && ((bool)right);
                case TokenType.Or:
                    return ((bool)left) || ((bool)right);
            }

            ws.AddError("Could not calculate binary operator: " + Op);
            return null;
        }
示例#60
0
 public object Calculate(WalkState ws)
 {
     return Convert.ToInt64(Val);
 }