public override void Update(State s, Room room) { frameCounter++; if (surface) { room.LeaveRoomEnabled = false; offsetY += pullSpeed; room.Diver.Y += pullSpeed; if (frameCounter % 6 == 0) { pullSpeed--; if (pullSpeed <= 0) { room.AddEntity(Particle.MakeBigBubble(new Point(room.Diver.X + room.Diver.Width / 2, room.Diver.Y))); room.AddEntity(Particle.MakeBigBubble(new Point(room.Diver.X + room.Diver.Width / 2, room.Diver.Y))); room.AddEntity(Particle.MakeSmallBubble(new Point(room.Diver.X + room.Diver.Width / 2, room.Diver.Y))); room.AddEntity(Particle.MakeSmallBubble(new Point(room.Diver.X + room.Diver.Width / 2, room.Diver.Y))); room.AddEntity(Particle.MakeTinyBubble(new Point(room.Diver.X + room.Diver.Width / 2, room.Diver.Y))); room.AddEntity(Particle.MakeTinyBubble(new Point(room.Diver.X + room.Diver.Width / 2, room.Diver.Y))); } } if (frameCounter > 240) { Reset(); room.Diver.Freeze = false; room.SurfaceDiver(); } return; } collisionWithDiver = Dimension.Intersects(new Rectangle(room.Diver.TopCenter.X, room.Diver.TopCenter.Y, 1, 1)); if (collisionWithDiver && !collisionWithDiverLastFrame) { room.Diver.Freeze = true; diverFreezed = true; } if (collisionWithDiver && s.Input.WasPressed(Input.Action.Jump)) { room.Diver.Velocity.Y = 0; room.Diver.JumpVelocity = 0; room.Diver.Freeze = false; diverFreezed = false; } if (collisionWithDiver && s.Input.WasPressed(Input.Action.Select)) { surface = true; pullSpeed = 2; frameCounter = 0; } collisionWithDiverLastFrame = collisionWithDiver; base.Update(s, room); }