All pastes #985121 Raw Edit

Something

public text v1 · immutable
·published 2008-04-14 20:13 UTC
rendered paste body
        protected override void Update(GameTime gameTime)
        {
            FlatRedBallServices.Update(gameTime);
            Screens.ScreenManager.Activity();

            Entity entChar = (Entity)alEntities[0];

            sDebugInfo = "Character( X: " + entChar.X.ToString() + " Y: " + entChar.Y.ToString() + " )\n";
            sDebugInfo += "Mouse( X: " + InputManager.Mouse.WorldXAt(0) + " Y: " + InputManager.Mouse.WorldYAt(0) + " )\n";
            sDebugInfo += "Camera Z: " + SpriteManager.Camera.Z.ToString() + "\n";
            sDebugInfo += "Viewable Tiles: " + spriteGrid.VisibleSprites.Count + "\n";
            sDebugInfo += "Total Entities: " + alEntities.Count.ToString() + "\n";

            #region MouseOver Detection
            foreach (Entity ent in alEntities)
            {
                if (GuiManager.Cursor.IsOn(ent.Collision))
                {
                    sDebugInfo += "Mouse over: " + ent.Name;
                    if (ent.Interactive)
                        sDebugInfo += " [Interactive]\n";
                    else sDebugInfo += "\n";


                    if (ent.Interactive) ent.Collision.Visible = true;

                    if (GuiManager.Cursor.PrimaryDown)
                    {
                        if (ent.Interactive)
                        {
                            if (Vector3.Distance(entChar.Position, ent.Position) < 6.0f)
                            {
                                sDebugInfo += "Mouse grabbing : " + ent.Name + "\n\n[Holding]\n";
                                sDebugInfo += ent.ToString() + "\n\n";

                                ent.Grabbed = true;
                                ent.X = GuiManager.Cursor.WorldXAt(0);
                                ent.Y = GuiManager.Cursor.WorldYAt(0);

                                entChar.HoldID = ent.Name;

                                ent.RotationZ -= InputManager.Mouse.ScrollWheel / 4;
                                ent.Collision.RotationZ -= InputManager.Mouse.ScrollWheel / 4;
                                ent.Collision.UpdateDependencies(TimeManager.CurrentTime);
                            }
                            else
                            {
                                ent.Grabbed = false;
                                entChar.HoldID = null;
                            }
                        }
                    }
                    else
                    {
                        ent.Grabbed = false;
                        entChar.HoldID = null;
                    }
                }
                else
                {
                    if (!ent.DebugHitbox) ent.Collision.Visible = false;
                }
            }
            #endregion

            #region Collisions
            foreach (Entity ent in alEntities)
            {
                foreach (Entity ent2 in alEntities)
                {
                    if (!ent.Equals(ent2))
                    {
                        if (ent.Collision.CollideAgainst(ent2.Collision))
                        {
                            if (ent.Grabbed != true && ent2.Grabbed != true)
                            {
                                if (ent.Equals(entChar))
                                {
                                    sDebugInfo += "Player colliding with: " + ent2.Name;
                                    sDebugInfo += " [Mass: " + ent2.Mass.ToString() + "]\n";
                                }

                                ent.Collision.CollideAgainstMove(ent2.Collision, ent.Mass, ent2.Mass);
                            }
                        }
                    }
                }
            }
            #endregion

            #region Player Control Handling

            Vector3 vDest;

            entChar.Velocity = new Vector3(0f, 0f, 0f);
            entChar.Instructions.Clear();

            if (InputManager.Mouse.ButtonDown(FlatRedBall.Input.Mouse.MouseButtons.RightButton))
            {
                vDest = new Vector3(InputManager.Mouse.WorldXAt(0), InputManager.Mouse.WorldYAt(0), 0);

                float fMoveTime = entChar.MovementSpeed * Vector3.Distance(entChar.Position, vDest);

                if (Vector3.Distance(entChar.Position, vDest) > 6.0) fMoveTime /= 2;

                InstructionManager.MoveToAccurate(entChar,
                    vDest.X, vDest.Y, 0, fMoveTime);
            }
            else
            {
                if (InputManager.Keyboard.KeyDown(Keys.Left) && InputManager.Keyboard.KeyDown(Keys.Up))
                {
                    InstructionManager.MoveToAccurate(entChar,
                        entChar.X - fWorldUnit, entChar.Y + fWorldUnit, 0, entChar.MovementSpeed);
                }
                else if (InputManager.Keyboard.KeyDown(Keys.Left) && InputManager.Keyboard.KeyDown(Keys.Down))
                {
                    InstructionManager.MoveToAccurate(entChar,
                        entChar.X - fWorldUnit, entChar.Y - fWorldUnit, 0, entChar.MovementSpeed);
                }
                else if (InputManager.Keyboard.KeyDown(Keys.Right) && InputManager.Keyboard.KeyDown(Keys.Up))
                {
                    InstructionManager.MoveToAccurate(entChar,
                        entChar.X + fWorldUnit, entChar.Y + fWorldUnit, 0, entChar.MovementSpeed);
                }
                else if (InputManager.Keyboard.KeyDown(Keys.Right) && InputManager.Keyboard.KeyDown(Keys.Down))
                {
                    InstructionManager.MoveToAccurate(entChar,
                        entChar.X + fWorldUnit, entChar.Y - fWorldUnit, 0, entChar.MovementSpeed);
                }
                else if (InputManager.Keyboard.KeyDown(Keys.Left))
                {
                    InstructionManager.MoveToAccurate(entChar,
                        entChar.X - fWorldUnit, entChar.Y, 0, entChar.MovementSpeed);
                }
                else if (InputManager.Keyboard.KeyDown(Keys.Right))
                {
                    InstructionManager.MoveToAccurate(entChar,
                        entChar.X + fWorldUnit, entChar.Y, 0, entChar.MovementSpeed);
                }
                else if (InputManager.Keyboard.KeyDown(Keys.Up))
                {
                    InstructionManager.MoveToAccurate(entChar,
                        entChar.X, entChar.Y + fWorldUnit, 0, entChar.MovementSpeed);
                }
                else if (InputManager.Keyboard.KeyDown(Keys.Down))
                {
                    InstructionManager.MoveToAccurate(entChar,
                        entChar.X, entChar.Y - fWorldUnit, 0, entChar.MovementSpeed);
                }
            }

            SpriteManager.Camera.X = entChar.X;
            SpriteManager.Camera.Y = entChar.Y;

            if (entChar.HoldID == null)
            {
                SpriteManager.Camera.Z -= InputManager.Mouse.ScrollWheel * 2;
            }
            #endregion

            tDebugInfo.SetPixelPerfectScale(SpriteManager.Camera);
            tDebugInfo.DisplayText = sDebugInfo;

            spriteGrid.Manage();

            base.Update(gameTime);
        }