예제 #1
0
        /// <summary>
        /// Initializes the <see cref="Komodo.Core.Engine.Graphics.GraphicsManager"/> and all <see cref="Komodo.Core.ECS.Systems.ISystem"/> objects.
        /// </summary>
        public void Initialize()
        {
            GraphicsManager.Initialize();
            DefaultSpriteShader = new BasicEffect(GraphicsManager.GraphicsDeviceManager.GraphicsDevice)
            {
                TextureEnabled     = true,
                VertexColorEnabled = true,
            };
            GraphicsManager.VSync = false;

            CameraSystem.Initialize();
            SoundSystem.Initialize();

            var physicsSystems = PhysicsSystems.ToArray();

            foreach (var system in physicsSystems)
            {
                system.Initialize();
            }
            var render3DSystems = Render3DSystems.ToArray();

            foreach (var system in render3DSystems)
            {
                system.Initialize();
            }
            var render2DSystems = Render2DSystems.ToArray();

            foreach (var system in render2DSystems)
            {
                system.Initialize();
            }

            BehaviorSystem.Initialize();
        }
예제 #2
0
        /// <summary>
        /// Creates and begins tracking a new <see cref="Komodo.Core.ECS.Systems.Render2DSystem"/>.
        /// </summary>
        public Render2DSystem CreateRender2DSystem()
        {
            var system = new Render2DSystem(this);

            Render2DSystems.Add(system);
            return(system);
        }
예제 #3
0
        /// <summary>
        /// Updates <see cref="Komodo.Core.ECS.Systems.ISystem"/> objects.
        /// </summary>
        /// <param name="gameTime">Time passed since last <see cref="Update(GameTime)"/>.</param>
        public void Update(GameTime gameTime)
        {
            InputManager.Update();

            BehaviorSystem.PreUpdate(gameTime);
            CameraSystem.PreUpdate(gameTime);
            SoundSystem.PreUpdate(gameTime);
            var physicsSystems = PhysicsSystems.ToArray();

            foreach (var system in physicsSystems)
            {
                system.PreUpdate(gameTime);
            }
            var render3DSystems = Render3DSystems.ToArray();

            foreach (var system in render3DSystems)
            {
                system.PreUpdate(gameTime);
            }
            var render2DSystems = Render2DSystems.ToArray();

            foreach (var system in render2DSystems)
            {
                system.PreUpdate(gameTime);
            }

            BehaviorSystem.UpdateComponents(gameTime);
            CameraSystem.UpdateComponents(gameTime);
            SoundSystem.UpdateComponents(gameTime);
            foreach (var system in physicsSystems)
            {
                system.UpdateComponents(gameTime);
            }

            BehaviorSystem.PostUpdate(gameTime);
            CameraSystem.PostUpdate(gameTime);
            SoundSystem.PostUpdate(gameTime);
            foreach (var system in physicsSystems)
            {
                system.PostUpdate(gameTime);
            }
            foreach (var system in render3DSystems)
            {
                system.PostUpdate(gameTime);
            }
            foreach (var system in render2DSystems)
            {
                system.PostUpdate(gameTime);
            }
        }
예제 #4
0
        /// <summary>
        /// Draws a frame with a provided clear color.
        /// </summary>
        /// <param name="_">Time passed since last <see cref="Draw(GameTime)"/>.</param>
        /// <param name="clearColor"><see cref="Microsoft.Xna.Framework.Color"/> to clear the screen with.</param>
        public void Draw(GameTime _, Color clearColor)
        {
            GraphicsManager.Clear(clearColor);

            var render2DSystems = Render2DSystems.ToArray();
            var render3DSystems = Render3DSystems.ToArray();

            // 3D must render before 2D or else the 2D sprites will fail to render in the Z dimension properly
            foreach (var system in render3DSystems)
            {
                system.DrawComponents();
            }
            var spriteBatch = GraphicsManager.SpriteBatch;

            foreach (var system in render2DSystems)
            {
                system.DrawComponents(spriteBatch);
            }
        }