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 }
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; } }
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); }
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)); } }
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; }