Example #1
0
        public GameContext(GameParam param, IGame game)
        {
            _param = param;
            _game  = game;

            _random      = new Random();
            _random.Seed = _param.randSeed;

            _currentFrame = 0;
        }
Example #2
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();
        }