Example #1
0
        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);
        }