Exemplo n.º 1
0
        public void RenderWorld(GameTime game_time, xAABB2 view_aabb)
        {
            if (!mRendered)
            {
                XSimpleDraw   simple_draw = XSimpleDraw.Instance(xeSimpleDrawType.WorldSpace_Persistent_Map);
                System.Random rand        = new Random();

                mMap.Iterate((grid, x, y) =>
                {
                    Vector3 low  = new Vector3(x, y, 0f);
                    Vector3 high = new Vector3(x + 1, y + 1, 0f);
                    Color color  = grid.mData[x, y].mColor;

                    simple_draw.DrawQuad(low, high, color);
                });

                // render world lines in here if they are static
                // RenderWorldLines_Static();

                mRendered = true;
            }

            // render world lines here if they are dynamic
            RenderWorldLines_Dynamic(view_aabb);
        }
Exemplo n.º 2
0
        public void RenderWorldLines_Static()
        {
            XSimpleDraw simple_draw_world = XSimpleDraw.Instance(xeSimpleDrawType.WorldSpace_Persistent_Map);

            Vector3 start = new Vector3();
            Vector3 end   = new Vector3();
            Color   k_transparent_black = new Color(0.0f, 0.0f, 0.0f, 0.05f);

            // each cell is 1 unit on edge in world space
            start.Y = 0;
            end.Y   = mMap.mBounds.y;

            for (int x = 0; x <= mMap.mBounds.x; ++x)
            {
                start.X = x;
                end.X   = x;

                simple_draw_world.DrawLine(start, end, k_transparent_black);
            }

            start.X = 0;
            end.X   = mMap.mBounds.x;

            for (int y = 0; y <= mMap.mBounds.y; ++y)
            {
                start.Y = y;
                end.Y   = y;

                simple_draw_world.DrawLine(start, end, k_transparent_black);
            }
        }
Exemplo n.º 3
0
        public void RenderWorldLines_Dynamic(xAABB2 view_aabb)
        {
            XSimpleDraw simple_draw_world = XSimpleDraw.Instance(xeSimpleDrawType.WorldSpace_Transient);

            // calculate color to use based on how much world is being drawn
            const float k_large_view_size = 200;
            const float k_small_view_size = 5;
            float       view_width        = view_aabb.GetMax().X - view_aabb.GetMin().X;
            float       lightness         = view_width > k_large_view_size ? 1.0f :
                                            view_width < k_small_view_size ? 0.0f :
                                            (view_width - k_small_view_size) / (k_large_view_size - k_small_view_size);

            lightness = XMath.Sqrt(lightness);

            Color k_lightest_color = new Color(0.0f, 0.0f, 0.0f, 0.025f);
            Color k_darkest_color  = new Color(0.0f, 0.0f, 0.0f, 0.33f);
            Color result_color     = Color.Lerp(k_darkest_color, k_lightest_color, lightness);

            // each cell is 1 unit on edge in world space
            Vector3 start = new Vector3();
            Vector3 end   = new Vector3();

            start.Y = 0;
            end.Y   = mMap.mBounds.y;

            for (int x = 0; x <= mMap.mBounds.x; ++x)
            {
                start.X = x;
                end.X   = x;

                simple_draw_world.DrawLine(start, end, result_color);
            }

            start.X = 0;
            end.X   = mMap.mBounds.x;

            for (int y = 0; y <= mMap.mBounds.y; ++y)
            {
                start.Y = y;
                end.Y   = y;

                simple_draw_world.DrawLine(start, end, result_color);
            }
        }
Exemplo n.º 4
0
        private void ProcessInput()
        {
            bool generate_map    = false;
            bool resize_map      = false;
            bool change_map_type = false;

            var key_enumerator = mListenter_KeyUp.CreateEnumerator();

            while (key_enumerator.MoveNext())
            {
                if (key_enumerator.GetCurrent().mKey == Microsoft.Xna.Framework.Input.Keys.W)
                {
                    generate_map = true;
                }
                else if (key_enumerator.GetCurrent().mKey == Microsoft.Xna.Framework.Input.Keys.T)
                {
                    change_map_type = true;
                }
                else if (key_enumerator.GetCurrent().mKey == Microsoft.Xna.Framework.Input.Keys.S)
                {
                    resize_map = true;
                }
            }

            var button_enumerator = mListener_Button.CreateEnumerator();

            while (button_enumerator.MoveNext())
            {
                if (button_enumerator.GetCurrent().mID == mRegnerateMapButton.GetID())
                {
                    generate_map = true;
                }
                else if (button_enumerator.GetCurrent().mID == mMapTypeButton.GetID())
                {
                    change_map_type = true;
                }
                else if (button_enumerator.GetCurrent().mID == mMapSizeButton.GetID())
                {
                    resize_map = true;
                }
            }

            if (change_map_type)
            {
                // loop through map types
                mMapType     = (XWorldGen.eMapType)(((int)mMapType + 1) % (int)XWorldGen.eMapType.Num);
                mGenSet      = mGen.GetTuningSet(mMapType);
                generate_map = true;
            }

            if (resize_map)
            {
                ++mMapScale;
                generate_map = true;

                if (mMapScale > mGen.GetMaxMapScale())
                {
                    mMapScale = 1;
                }
            }

            if (generate_map)
            {
                XSimpleDraw simple_draw = XSimpleDraw.Instance(xeSimpleDrawType.WorldSpace_Persistent_Map);
                simple_draw.CancelPrimitives();
                mRendered = false;
                Generate();

                WorldRegenerated world_regenerated = new WorldRegenerated();
                mBroadcaster_WorldRegenerated.Post(world_regenerated);
            }
        }
Exemplo n.º 5
0
        public void Draw(GameTime game_time)
        {
            mGraphicsDevice.Clear(Color.CornflowerBlue);

            RasterizerState rasterizerState = new RasterizerState();

            rasterizerState.CullMode        = CullMode.None;
            mGraphicsDevice.RasterizerState = rasterizerState;

            // maybe not the best place for this
            // also, screen cam not updating anywhere
            mMainWorldCam.Update(game_time);
            UpdateCameras();

            // simple draw only clients
            XWorld.Instance().RenderWorld(game_time, mMainWorldCam.GetViewAABB());
            XMouse mouse = XMouse.Instance();

            mouse.RenderWorld(game_time);
            mouse.RenderScreen(game_time);
            XUI.Instance().Draw();

            mBasicEffect_World.VertexColorEnabled = true;

            XSimpleDraw simple_draw_world_transient      = XSimpleDraw.Instance(xeSimpleDrawType.WorldSpace_Transient);
            XSimpleDraw simple_draw_world_persistent     = XSimpleDraw.Instance(xeSimpleDrawType.WorldSpace_Persistent);
            XSimpleDraw simple_draw_screen_transient     = XSimpleDraw.Instance(xeSimpleDrawType.ScreenSpace_Transient);
            XSimpleDraw simple_draw_screen_persistent    = XSimpleDraw.Instance(xeSimpleDrawType.ScreenSpace_Persistent);
            XSimpleDraw simple_draw_world_map_persistent = XSimpleDraw.Instance(xeSimpleDrawType.WorldSpace_Persistent_Map);

            foreach (EffectPass pass in mBasicEffect_World.CurrentTechnique.Passes)
            {
                pass.Apply();

                // actually render simple draw stuff.  possible layers needed.
                simple_draw_world_map_persistent.DrawAllPrimitives();
                simple_draw_world_persistent.DrawAllPrimitives();
                simple_draw_world_transient.DrawAllPrimitives();

                // render clients who do their own rendering.  they should probably have pre-renders like simple draw, especially if there is more than one pass.
            }

            // simple draw screen
            mBasicEffect_Screen.VertexColorEnabled = true;

            //foreach ( EffectPass pass in effectPassCollection )
            foreach (EffectPass pass in mBasicEffect_Screen.CurrentTechnique.Passes)
            {
                pass.Apply();

                // actually render simple draw stuff.  possible layers needed.
                simple_draw_screen_persistent.DrawAllPrimitives();
                simple_draw_screen_transient.DrawAllPrimitives();

                // render clients who do their own rendering.  they should probably have pre-renders like simple draw, especially if there is more than one pass.
            }

            //mSpriteBatch.Begin();
            // do sprite batch rendering here
            //mSpriteBatch.End();

            XFontDraw.Instance().Draw();
        }