Exemplo n.º 1
0
        /// <summary>
        /// This is called when the game should draw itself.
        /// </summary>
        public override void Draw(double deltaTime, GraphicsDevice graphics, SpriteBatch spriteBatch)
        {
            //cam.UpdateTransform();

            graphics.Clear(Color.CornflowerBlue);

            spriteBatch.Begin(SpriteSortMode.BackToFront,
                              BlendState.AlphaBlend,
                              null, null, null, null,
                              cam.Transform);

            Submarine.Draw(spriteBatch, true);

            spriteBatch.End();

            spriteBatch.Begin(SpriteSortMode.BackToFront,
                              BlendState.AlphaBlend,
                              null, null, null, null,
                              cam.Transform);

            //if (EntityPrefab.Selected != null) EntityPrefab.Selected.UpdatePlacing(spriteBatch, cam);

            //Entity.DrawSelecting(spriteBatch, cam);

            if (editingCharacter != null)
            {
                editingCharacter.Draw(spriteBatch, Cam);
            }

            spriteBatch.End();

            //-------------------- HUD -----------------------------

            spriteBatch.Begin(SpriteSortMode.Deferred, null, null, null, GameMain.ScissorTestEnable);

            GUIpanel.DrawManually(spriteBatch);

            EditLimb(spriteBatch);


            int y = 0;

            for (int i = 0; i < textures.Count; i++)
            {
                int x = GameMain.GraphicsWidth - textures[i].Width;
                spriteBatch.Draw(textures[i], new Vector2(x, y), Color.White);

                foreach (Limb limb in editingCharacter.AnimController.Limbs)
                {
                    if (limb.ActiveSprite == null || limb.ActiveSprite.FilePath != texturePaths[i])
                    {
                        continue;
                    }
                    Rectangle rect = limb.ActiveSprite.SourceRect;
                    rect.X += x;
                    rect.Y += y;

                    GUI.DrawRectangle(spriteBatch, rect, Color.Red);

                    Vector2 limbBodyPos = new Vector2(
                        rect.X + limb.ActiveSprite.Origin.X,
                        rect.Y + limb.ActiveSprite.Origin.Y);

                    DrawJoints(spriteBatch, limb, limbBodyPos);

                    //if (limb.BodyShapeTexture == null) continue;

                    //spriteBatch.Draw(limb.BodyShapeTexture, limbBodyPos,
                    //    null, Color.White, 0.0f,
                    //    new Vector2(limb.BodyShapeTexture.Width, limb.BodyShapeTexture.Height) / 2,
                    //    1.0f, SpriteEffects.None, 0.0f);

                    GUI.DrawLine(spriteBatch, limbBodyPos + Vector2.UnitY * 5.0f, limbBodyPos - Vector2.UnitY * 5.0f, Color.White);
                    GUI.DrawLine(spriteBatch, limbBodyPos + Vector2.UnitX * 5.0f, limbBodyPos - Vector2.UnitX * 5.0f, Color.White);

                    if (Vector2.Distance(PlayerInput.MousePosition, limbBodyPos) < 5.0f && PlayerInput.LeftButtonHeld())
                    {
                        limb.ActiveSprite.Origin += PlayerInput.MouseSpeed;
                    }
                }

                y += textures[i].Height;
            }


            GUI.Draw(Cam, spriteBatch);

            //EntityPrefab.DrawList(spriteBatch, new Vector2(20,50));

            //Entity.Edit(spriteBatch, cam);

            spriteBatch.End();
        }