public void PickUp() { if (pickUp == null) { pickUp = EntityFinder.GetEnt(Position + EntityFinder.GetDir(Flipped, 16, 0)); if (pickUp != null && !pickUp.Movable) { pickUp = null; } if (pickUp != null) { pickUp.BounceC = 5; SoundMan.PlaySound("pickup", Position); pickUp.Carried = true; } } else { if (EntityFinder.GetEnt(Position + EntityFinder.GetDir(Flipped, 16, 0)) == null) { pickUp.Position = Position + EntityFinder.GetDir(Flipped, 16, 0); pickUp.Carried = false; pickUp = null; } } }
public override void Act() { base.Act(); counter++; //Entity ent = GetEnt(entities, new Vector2f(Position.X, Position.Y - 16)); Entity ent = CeilingEnt; if (ent != null && !ent.Movable) { ent = null; } if (ent != null && !Flipped && BlockedRightEnt == null) { activated = true; } if (ent != null && Flipped && BlockedLeftEnt == null) { activated = true; } if (ent == null && ((BlockedLeftEnt != null && Flipped) || (BlockedRightEnt != null && !Flipped))) { activated = false; } if (Carried || Hooked) { activated = false; } if (activated) { if (counter % 7 == 0) { SoundMan.PlaySound("drop", Position); } if (!Flipped) { Push(this, EntityFinder.Dir.Right, 0.4f); } if (Flipped) { Push(this, EntityFinder.Dir.Left, 0.4f); } } }
public override void Act() { base.Act(); if (BlockedLeftEnt is KeyLock || BlockedRightEnt is KeyLock || GroundEnt is KeyLock || CeilingEnt is KeyLock) { SoundMan.PlaySound("open", Position); if (BlockedLeftEnt is KeyLock) { BlockedLeftEnt.Destroyed = true; } if (BlockedRightEnt is KeyLock) { BlockedRightEnt.Destroyed = true; } if (GroundEnt is KeyLock) { GroundEnt.Destroyed = true; } if (CeilingEnt is KeyLock) { CeilingEnt.Destroyed = true; } while (true) { Entity a = EntityFinder.FindOfType(typeof(KeyBlock)); if (a != null) { a.Destroyed = true; } else { break; } } Destroyed = true; } }
public override void Act() { base.Act(); if (CeilingEnt != null && CeilingEnt.Movable && !activated && !Carried && !Hooked) { activated = true; SoundMan.PlaySound("pickup", Position); bool playSound = true; while (true) { Entity a = EntityFinder.FindOfType(typeof(Dynamite)); if (a != null) { Dynamite d = (Dynamite)a; BounceC = 20; if (playSound) { SoundMan.PlaySound("explode", d.Position); } playSound = false; d.BlowUp(); d.BlowUp(); } else { break; } } } }
bool GameLoop() { bool openDoor = true; CollisionMan.PopulateCells(); CollisionMan.CheckCollisionCells(); if (screenShake > 0) { screenShake--; } gameStateC++; if (gameState == GameState.StartLevel) { level.Timer.Reset(); level.Timer.Start(); gameState = GameState.GamePlay; } if (gameState == GameState.ResetFadeOut) { level.Timer.Stop(); fadeOut = gameStateC * 10; if (gameStateC == 25) { gameStateC = 0; gameState = GameState.ResetFadeIn; level.ResetLevel(); } } if (gameState == GameState.ResetFadeIn) { level.ScrollTo(EntityFinder.FindOfType(typeof(Player)).Position, true); if (gameStateC > 10) { fadeOut = 255 - (int)((gameStateC - 10) * 6.3); } else { fadeOut = 255; } if (gameStateC == 50) { gameStateC = 0; gameState = GameState.StartLevel; } } if (gameState == GameState.LevelFinished) { level.Timer.Stop(); if (gameStateC < 50) { fadeOut = gameStateC * 5; } else { fadeOut = 255; } if (gameStateC == 2) { SoundMan.PlaySound("win", SoundMan.Center); } if (gameState == GameState.LevelFinished && gameStateC >= 70) { menu.Active = true; menu.State = Menu.MenuState.LevelWon; menu.CounterReset(); menu.LevelCompletiontime = level.Timer.Elapsed; menu.LevelName = levelName; return(false); } } if (!Keyboard.IsKeyPressed(Keyboard.Key.P)) { buttonTriggerP = false; } if (!buttonTriggerP && Keyboard.IsKeyPressed(Keyboard.Key.P)) { if (gameState == GameState.GamePlay) { gameState = GameState.Paused; level.Timer.Stop(); } else if (gameState == GameState.Paused) { gameState = GameState.GamePlay; level.Timer.Start(); } buttonTriggerP = true; } if (gameState == GameState.Paused) { fadeOut = 128; } if (gameState == GameState.GamePlay) { fadeOut = 0; for (int i = 0; i < level.GetEntities().Count; i++) { Entity ent = level.GetEntities()[i]; if (ent is StarBlock) { StarBlock starBlock = (StarBlock)ent; if (!starBlock.StarOnTop) { openDoor = false; } } if (windowHasFocus) { if (ent is Player) { Player player = (Player)ent; level.ScrollTo(player.Position, false); ControlPlayer(player); if (player.Position.Y > 140) { gameState = GameState.ResetFadeOut; gameStateC = 0; } } if (!ent.Destroyed) { ent.Act(); } else { if (ent.ScreenShake) { screenShake = 50; ent.ScreenShake = false; } } } } foreach (Entity ent in level.GetEntities()) { if (ent is Exit) { Exit exit = (Exit)ent; if (!exit.Open && openDoor) { SoundMan.PlaySound("open", exit.Position); exit.BounceC = 20; } exit.Open = openDoor; if (openDoor) { Entity entp = EntityFinder.FindOfType(typeof(Player)); if (entp != null) { Player pl = (Player)entp; if (pl.BlockedLeftEnt == exit || pl.BlockedRightEnt == exit || pl.CeilingEnt == exit || pl.GroundEnt == exit) { gameState = GameState.LevelFinished; gameStateC = 0; } } } } } } SoundMan.Center = new Vector2f(level.Scroll.X + 160, level.Scroll.Y + 60); //level.GetEntities().RemoveAll(a => a.Destroyed); if (Keyboard.IsKeyPressed(Keyboard.Key.Escape) && windowHasFocus) { menu.Active = true; menu.State = Menu.MenuState.PlayMenu; menu.CounterReset(); } return(true); }
public override void Act() { if (entToLift != null && Pushed != 0 && state != State.Off && state != State.Lowering) { Push(entToLift, PushedDir, Pushed); } base.Act(); counter++; if ((Carried || Hooked) && entToLift != null) { entToLift.Hooked = false; entToLift = null; state = State.Off; } Vector2f soundPos = new Vector2f(Position.X + 32 + hookPosX, Position.Y - 64 + hookPosY); if (!Carried && !Hooked) { if (state == State.Off) { if (hookPosX > 0) { hookPosX--; } if (hookPosY > 0) { hookPosY--; } if (coolOff > 0) { coolOff--; } warmUp++; entToLift = EntityFinder.FindEnt(this, EntityFinder.Dir.Down, 112, hookPosX + 32, -48); if (entToLift != null) { if (coolOff == 0 && warmUp > 80) { state = State.Lowering; } } } if (state == State.Lowering) { if (counter % 10 == 0) { SoundMan.PlaySound("drop", Position); } entToLift = EntityFinder.FindEnt(this, EntityFinder.Dir.Down, 112, hookPosX + 32, -48); if (entToLift == null) { state = State.Off; } if (hookPosX > 0) { hookPosX--; } if (entToLift != null && hookPosY + Position.Y - 48 <= entToLift.Position.Y) { hookPosY += 0.25f; } else { if (entToLift != null) { SoundMan.PlaySound("pickup", soundPos); BounceC = 5; entToLift.BounceC = 5; } state = State.LiftingUp; } } if (state == State.LiftingUp) { if (counter % 5 == 0) { SoundMan.PlaySound("drop", soundPos); } warmUp = 0; coolOff = 100; if (hookPosY > 0) { hookPosY -= 0.5f; } else { state = State.MovingRight; } if (entToLift != null) { entToLift.Hooked = true; } else { state = State.Off; } } { if (entToLift != null && entToLift.Hooked) { if (state == State.LiftingUp) { if (entToLift.Carried) { entToLift.Hooked = false; state = State.Off; } if (entToLift.Position.Y > Position.Y - 54 + hookPosY) { if (!Push(entToLift, EntityFinder.Dir.Up, 1f)) { entToLift.Hooked = false; state = State.Off; } } if (entToLift.Position.Y < Position.Y - 54 + hookPosY) { if (!Push(entToLift, EntityFinder.Dir.Down, 1f)) { entToLift.Hooked = false; state = State.Off; } } } if (state == State.MovingRight) { if (entToLift.Position.X > Position.X + 32 + hookPosX) { if (!Push(entToLift, EntityFinder.Dir.Left, 1f)) { entToLift.Hooked = false; state = State.Off; } } if (entToLift.Position.X < Position.X + 32 + hookPosX) { if (!Push(entToLift, EntityFinder.Dir.Right, 1f)) { entToLift.Hooked = false; state = State.Off; } } } if (entToLift.Hooked == false) { entToLift = null; state = State.Off; coolOff = 100; } } } if (state == State.MovingRight) { if (counter % 5 == 0) { SoundMan.PlaySound("drop", soundPos); } if (hookPosX < 64) { hookPosX += 0.5f; } else { SoundMan.PlaySound("pickup", soundPos); coolOff = 100; entToLift.Hooked = false; state = State.Off; entToLift = null; } } } }
public override void Act() { counter++; CurrentTex = "player"; if (Walking && GroundEnt != null && (counter % 20 < 5)) { CurrentTex = "playerwalk1"; } if (Walking && GroundEnt != null && (counter % 20 >= 5 && counter % 20 < 10)) { CurrentTex = "player"; } if (Walking && GroundEnt != null && (counter % 20 >= 10 && counter % 20 < 15)) { CurrentTex = "playerwalk2"; } if (Walking && GroundEnt != null && (counter % 20 >= 15 && counter % 20 < 20)) { CurrentTex = "player"; } if (Climbing) { Speed = new Vector2f(Speed.X, 0); } base.Act(); if (Climbing && !DoJump) { Position = new Vector2f(Position.X, Position.Y - Speed.Y); if (!OnLadder) { Climbing = false; } } OnLadder = false; OnTopOfLadder = false; if (GroundEnt is Ladder) { Position = new Vector2f(Position.X, Position.Y); } if (GroundEnt != null || Climbing) { if (DoJump) { BounceC = 10; SoundMan.PlaySound("jump", Position); Position = new Vector2f(Position.X, Position.Y - 0.5f); Speed = new Vector2f(Speed.X, -2f); DoJump = false; Climbing = false; } } if (pickUp != null) { pickUp.Speed = new Vector2f(0, 0); if (!Flipped) { pickUp.Position = new Vector2f(Position.X + 6, Position.Y - 6); } else { pickUp.Position = new Vector2f(Position.X - 6, Position.Y - 6); } if (pickUp.Destroyed) { pickUp = null; } } }
public virtual void Act() { Pushed = 0; if (bounceC > 0) { bounceC--; scaleX = 1 + (float)bounceC / 30f; scaleY = 1 - (float)bounceC / 50f; } if (bounceC == 0) { scaleX = 1; scaleY = 1; } if (BlockedRightEnt != null && Movable) { Position = new Vector2f((int)Position.X, Position.Y); if (Speed.X > 0) { if (BlockedRightEnt.Hooked || !Push(BlockedRightEnt, EntityFinder.Dir.Right, 1)) { Speed = new Vector2f(0, Speed.Y); } } } if (BlockedLeftEnt != null && Movable) { Position = new Vector2f((int)(Position.X + 0.9f), Position.Y); if (Speed.X < 0) { if (BlockedLeftEnt.Hooked || !Push(BlockedLeftEnt, EntityFinder.Dir.Left, 1)) { Speed = new Vector2f(0, Speed.Y); } } } if (GroundEnt == null && Movable) { Speed += new Vector2f(0, 0.1f); if (!Walking) { Speed = new Vector2f(Speed.X * 0.9f, Speed.Y); if (Math.Abs(Speed.X) < 0.1) { Speed = new Vector2f(0, Speed.Y); } } } if (GroundEnt != null && Movable && !GroundEnt.Carried) { if (Speed.Y > 0) { if (GroundEnt.Hooked == false) { SoundMan.PlaySound("drop", Position); bounceC = 10; if (!GroundEnt.Movable) { GroundEnt.BounceC = 3; } else { GroundEnt.BounceC = 7; if (GroundEnt.GroundEnt != null && GroundEnt.GroundEnt.Movable) { GroundEnt.GroundEnt.BounceC = 3; } } } if (!Hooked) { Position = new Vector2f(Position.X, GroundEnt.Position.Y - 16); } } if (!Walking) { if (!Carried && !Hooked) { Position = new Vector2f(Position.X, GroundEnt.Position.Y - 16); } Speed = new Vector2f(Speed.X * 0.5f, Speed.Y); if (Math.Abs(Speed.X) < 0.1) { Speed = new Vector2f(0, Speed.Y); } } Speed = new Vector2f(Speed.X, 0); } if (CeilingEnt != null && Movable) { //Position = new Vector2f(Position.X, CeilingEnt.Position.Y+15); if (Speed.Y < 0) { Speed = new Vector2f(Speed.X, 0); if (!CeilingEnt.Movable) { CeilingEnt.BounceC = 3; } else { CeilingEnt.BounceC = 7; } bounceC = 10; } } if (Speed.Y > 1) { Speed = new Vector2f(Speed.X, 1f); } if (!Hooked) { Position += Speed; } else { Speed = new Vector2f(Speed.X, 0); } }