public GameContext(GameParam param, IGame game) { _param = param; _game = game; _random = new Random(); _random.Seed = _param.randSeed; _currentFrame = 0; }
public override void EnterFrame(int frame) { if (_owner == null || _owner.IsDead) { return; } _curFrame = frame; switch (_curState) { case State.Wait: if (_curFrame >= curStateEndFrame) { Wander(BattleEngine.TICKS_PER_SECONDS * 5); } break; case State.Wander: if (_curFrame >= curStateEndFrame) { SearchFood(BattleEngine.TICKS_PER_SECONDS * 10); } else { if (_preChangeDirFrame == 0 || _curFrame - _preChangeDirFrame >= ChangeDirectionInterval) { Framework.Random random = BattleEngine.Instance.Context.Random; if (random.Value() < 0.5f) { _owner.InputKey((int)GameVKey.MoveX, random.Range(-1f, 1f)); } if (random.Value() < 0.5f) { _owner.InputKey((int)GameVKey.MoveY, random.Range(-1f, 1f)); } RecordChangeDirectionFrame(); } } break; case State.SearchFood: if (_curFrame >= curStateEndFrame) { ResetTarget(); Wander(BattleEngine.TICKS_PER_SECONDS * 10); } else { if (_curTarget == null || _curTarget.IsReleased) { FindNearestFood(); if (_curTarget == null || _curTarget.IsReleased) { ResetTarget(); Wander(BattleEngine.TICKS_PER_SECONDS * 5); } else { Vector3 dir = _curTarget.Position - _owner.Head.Position; dir = dir.normalized; _owner.InputKey((int)GameVKey.MoveX, dir.x); _owner.InputKey((int)GameVKey.MoveY, dir.y); RecordChangeDirectionFrame(); } } } break; default: break; } CheckMoveDirection(); }