public HallOfameState(Serpents serpents) { _serpents = serpents; _hofPainter = new HofPainter(serpents.LContent); _entry = new HallOfFame.Entry("", _serpents.Score); _entryIndex = _serpents.LContent.HallOfFame.Insert(_entry); }
public PlayingState(Serpents serpents, SerpentCamera serpentCamera) { SerpentCamera = serpentCamera; _serpents = serpents; _serpents.PlayerSerpent.DirectionTaker = this; _serpents.ParallelToDos.AddOneShot(0.9f, () => _serpents.PlayerCave.OpenDoor = false); _serpents.EnemyCave.OpenDoor = false; }
public static HomingDevice Attach(Serpents serpents, bool player = true, bool enemies = true) { var hd = new HomingDevice(serpents); if (player) serpents.PlayerSerpent.DirectionTaker = hd; if (enemies) serpents.Enemies.ForEach(_ => _.DirectionTaker = hd); return hd; }
public AttractState(Serpents serpents) { _serpents = serpents; _attractBigTexts = new AttractBigTexts(serpents.LContent); _serpents.PlayerSerpent.DirectionTaker = this; _serpents.Enemies.ForEach(_ => _.DirectionTaker = null); _cameraMovements.AddDurable(GetOverviewMoveCamera(_serpents.Camera)); _cameraMovements.AddWait(10); }
public Frog( LarvContent lcontent, IVEffect effect, Serpents serpents) : base(effect) { _model = lcontent.Load<Model>(@"Models/frog"); _modelRotation = Matrix.RotationY(MathUtil.Pi)*Matrix.Scaling(0.1f); _texture = lcontent.Load<Texture2D>(@"models/frogskin"); _serpents = serpents; _ground = lcontent.Ground; Restart(); }
public DieState(Serpents serpents) { _serpents = serpents; HomingDevice.Attach(_serpents, false); _serpents.PlayerCave.OpenDoor = true; _serpents.EnemyCave.OpenDoor = true; // zoom out while ghost goes up and enemies goes home var forward = _serpents.PlayerSerpent.LookAtPosition - _serpents.Camera.Position; forward.Normalize(); _todo.AddDurable(new MoveCamera( _serpents.Camera, 4f.Time(), // time to look at death scene _serpents.Camera.Position - forward*8, () => _serpents.PlayerSerpent.LookAtPosition)); }
public GotoBoardState(Serpents serpents, int scene) { _serpents = serpents; _scene = scene; _signEffect = _serpents.LContent.LoadEffect("effects/signtexteffect"); HomingDevice.Attach(serpents).CanTurnAround = true; _serpents.PlayerCave.OpenDoor = true; _signPosition = _serpents.LContent.Ground.SignPosition + Vector3.Up*1.5f; var direction = Vector3.Left; var toCameraPosition = _signPosition + direction*2.4f; #if !DEBUG const float time1 = 10f; const float time2 = 0.25f; #else var time1 = 2.5f; var time2 = 2f; #endif // move to the board in an arc _actions.AddDurable(() => new MoveCameraArc(_serpents.Camera, time1.UnitsPerSecond(), toCameraPosition, Vector3.Right, 5)); // look at the board for two seconds, while resetting the playing field _actions.AddOneShot(time2, () => { _serpents.Restart(_scene); HomingDevice.Attach(_serpents); }); Vector3 toPosition, toLookAt; _serpents.PlayingField.GetCameraPositionForLookingAtPlayerCave(out toPosition, out toLookAt); // turn around the camera to look at the cave _actions.AddDurable( () => new MoveCameraYaw(_serpents.Camera, 2f.Time(), toPosition, StartSerpentState.GetPlayerInitialLookAt(_serpents.PlayingField))); }
public StartSerpentState(Serpents serpents) { _serpents = serpents; HomingDevice.Attach(_serpents).CanTurnAround = true; Vector3 toPosition, toLookAt; _serpents.PlayingField.GetCameraPositionForLookingAtPlayerCave(out toPosition, out toLookAt); _actions.AddDurable(new MoveCameraYaw( serpents.Camera, 5f.UnitsPerSecond(), toPosition, GetPlayerInitialLookAt(_serpents.PlayingField))); _actions.AddOneShot(() => _serpents.PlayerSerpent.Restart(_serpents.PlayingField, 1)); _actions.AddWhile(time => _serpents.PlayingField.FieldValue(_serpents.PlayerSerpent.Whereabouts).Restricted != Direction.None); _actions.AddOneShot(() => { _serpentCamera = new SerpentCamera(_serpents.Camera, _serpents.PlayerSerpent, 0, 1, 8); while (_serpents.Enemies.Count > 3 + _serpents.Scene) // remove spawned serpents _serpents.Enemies.RemoveAt(0); foreach (var enemy in _serpents.Enemies) enemy.DirectionTaker = null; }); }
public LevelCompleteState(Serpents serpents) { _serpents = serpents; _homingDevice = new HomingDevice(_serpents); _serpents.PlayerSerpent.DirectionTaker = this; Vector3 toPosition, toLookAt; _serpents.PlayingField.GetCameraPositionForLookingAtPlayerCave(out toPosition, out toLookAt); _moveCamera = new MoveCamera( _serpents.Camera, 4.5f.UnitsPerSecond(), toPosition, () => _serpents.PlayerSerpent.LookAtPosition); _serpents.PlayerCave.OpenDoor = true; // wait until serpent is in cave, then give length bonus _todo.AddOneShot(() => _homeIsNearCaveEntrance = true); _todo.AddWhile(time => !_serpentIsHome); _todo.AddOneShot(() => { _serpents.PlayerSerpent.IsPregnant = false; _haltSerpents = true; }); for (var i = 0; i < _serpents.PlayerSerpent.Length; i++) _todo.AddOneShot(1, () => { var tailSegement = _serpents.PlayerSerpent.RemoveTailWhenLevelComplete(); if (tailSegement != null) _serpents.AddAndShowScore(500, tailSegement.Position); }); // wait until all bonus texts gone _todo.AddWhile(time => _serpents.FloatingTexts.Items.Any()); _todo.AddOneShot(() => { _serpentIsHome = false; _haltSerpents = false; _homeIsNearCaveEntrance = false; }); //_todo.AddWhile(time => !_serpentIsHome); _todo.AddOneShot(() => { if (_serpents.PlayerEgg == null) { _haltSerpents = false; return; } _bonusLives = 1; _serpents.PlayerSerpent.DirectionTaker = null; var playerEggPosition = _serpents.PlayerEgg.Position; _moveCamera = new MoveCamera(_serpents.Camera, 2f.Time(), toPosition, () => playerEggPosition); // wait two sec (for camera) and then drive the baby home _todo.InsertNext( time => time < 2, time => { _serpents.PlayerSerpent.Restart(_serpents.PlayingField, 0, _serpents.PlayerEgg.Whereabouts); _serpents.PlayerEgg = null; _serpents.PlayerSerpent.DirectionTaker = this; _haltSerpents = false; _serpentIsHome = false; return false; }); }); // make sure the camera aims at a serpent (the original or the new born baby) _todo.AddOneShot(() => { _moveCamera = new MoveCamera(_serpents.Camera, 1f.Time(), toPosition, () => _serpents.PlayerSerpent.LookAtPosition); }); _todo.AddWhile(time => (!_serpentIsHome || _serpents.FloatingTexts.Items.Any()) && time < 10); }
public GameOverState(Serpents serpents) { _serpents = serpents; _todo.AddDurable(AttractState.GetOverviewMoveCamera(_serpents.Camera)); _todo.AddWait(2); }
protected override void LoadContent() { _lcontent = new LarvContent(GraphicsDevice, Content, loadSceneDescriptions()); var shadowCameraPos = new Vector3(12, 4, 12) - VisionContent.SunlightDirection*32; var shadowCameraLookAt = shadowCameraPos + VisionContent.SunlightDirection; _lcontent.ShadowMap.Camera.Update(shadowCameraPos, shadowCameraLookAt); var camera = new Camera( _lcontent.ClientSize, new KeyboardManager(this), new MouseManager(this), new PointerManager(this), AttractState.CameraPosition, AttractState.CameraLookAt) {MovingSpeed = 8}; _serpents = new Serpents(_lcontent, camera, 0); _lcontent.ShadowMap.ShadowCastingObjects.Add(_serpents); _gameState = new AttractState(_serpents); base.LoadContent(); }
public HomingDevice(Serpents serpents) { PlayerPathFinder = new PathFinder(serpents.PlayingField, serpents.PlayingField.PlayerWhereaboutsStart); EnemyPathFinder = new PathFinder(serpents.PlayingField, serpents.PlayingField.EnemyWhereaboutsStart); }