private void Start()
    {
        Debug.Log("Bird");
        movementSM = new StateMachine();
        flying     = new FlyingState(this, movementSM);
        chasing    = new ChasingState(this, movementSM);
        eating     = new EatingState(this, movementSM);
        resting    = new RestingState(this, movementSM);

        movementSM.Initialize(flying);  // Default
    }
Esempio n. 2
0
    protected void StartEating()
    {
        eatingState              = EatingState.EATING;
        transform.localPosition += eatingOffset;
        transform.RotateAround(transform.position, transform.right, -30);

        biting = true;

        // make sure not to fight with the offset when you're holding a head and eating at the same time
        if (held)
        {
            heldOffset += eatingOffset;
        }
    }
Esempio n. 3
0
    protected void StopEating()
    {
        if (eatingState == EatingState.EATING)
        {
            eatingState              = EatingState.WAITING;
            transform.localPosition -= eatingOffset;
            transform.RotateAround(transform.position, transform.right, 30);

            if (held)
            {
                heldOffset -= eatingOffset;
            }

            if (eatingState != EatingState.EATING)
            {
                transform.LookAt(new Vector3(parent.transform.position.x, HeadPlane.instance.transform.position.y, parent.transform.position.z));
            }
        }
    }
        public override void Eat(char food)
        {
            _actual++;
            switch (_eatingMode)
            {
                case EatingState.Waiting:
                    _eatingMode = EatingState.Eating;
                    break;

                case EatingState.Eating:
                    switch (food)
                    {
                        case '"':
                            _eatingMode = EatingState.Reporting;
                            break;

                        case '\\':
                            _eatingMode = EatingState.Escape;
                            break;

                        default:
                            base.Eat(food);
                            break;
                    }
                    break;

                case EatingState.Escape:
                    switch (food)
                    {
                        case 'x':
                            _eatingMode = EatingState.Hex;
                            _hexChars = 0;
                            break;

                        case '"':
                        case '\\':
                            _eatingMode = EatingState.Eating;
                            base.Eat(food);
                            break;

                        default:
                            throw new InvalidProgramException("Unknown escape sequence \\" + food);
                    }
                    break;

                case EatingState.Reporting:
                    throw new InvalidOperationException("Erronous usage, CreateToken should have been called before continue eating.");

                case EatingState.Hex:
                    if (!IsHexChar(food))
                    {
                        throw new InvalidOperationException("Unknown hex component: " + food);
                    }
                    _hex <<= 4;
                    _hex |= int.Parse(food.ToString(), NumberStyles.AllowHexSpecifier);
                    ++_hexChars;
                    if (_hexChars == 2)
                    {
                        _eatingMode = EatingState.Eating;
                        base.Eat((char)_hex);
                    }

                    break;

                default:
                    throw new InvalidOperationException("unknown state: " + _eatingMode);
            }
        }
        protected override Token CreateToken(int linePos, int line)
        {
            if (_eatingMode != EatingState.Reporting)
            {
                throw new InvalidOperationException("string was not closed: " + linePos + "," + line);
            }

            _eatingMode = EatingState.Waiting;
            int length = _actual;
            _actual = 0;
            return new StringToken(Buffer, length, linePos, line);
        }
Esempio n. 6
0
    protected void StopEating()
    {
        if (eatingState == EatingState.EATING) {
            eatingState = EatingState.WAITING;
            transform.localPosition -= eatingOffset;
            transform.RotateAround(transform.position, transform.right, 30);

            if( held ) heldOffset -= eatingOffset;

            if( eatingState != EatingState.EATING ) transform.LookAt (new Vector3( parent.transform.position.x, HeadPlane.instance.transform.position.y, parent.transform.position.z));
        }
    }
Esempio n. 7
0
    protected void StartEating()
    {
        eatingState = EatingState.EATING;
        transform.localPosition += eatingOffset;
        transform.RotateAround(transform.position, transform.right, -30);

        biting = true;

        // make sure not to fight with the offset when you're holding a head and eating at the same time
        if( held ) heldOffset += eatingOffset;
    }