private void AKB_Click(Button sender)
        {
            AKB.Active   = true;
            OmniB.Active = false;

            selectedSpawnPoint = null;

            Rect   screenMapRect = spawnPoints.GetScreenRectangle();
            Bounds initialBounds = Map.Instance.InitialCollisionBounds;
            Rect   mapRect       = new Rect(initialBounds.Minimum.ToVec2(), initialBounds.Maximum.ToVec2());

            foreach (PossibleSpawnPoint psp in possibleSpawnPoints)
            {
                psp.btn.Active = false;
                psp.btn.Enable = psp.text.Enable = (psp.sp.Faction.Name == "AssaultKnights");
            }
        }
Example #2
0
            void UpdateBarControlValue( Control control, float value )
            {
                Rect screenRectangle = control.GetScreenRectangle();
                Vec2 rectSize = screenRectangle.Size;
                float width = rectSize.X / 2 * Math.Abs( value );
                Rect rect;
                if( value > 0 )
                {
                    float left = screenRectangle.Left + rectSize.X / 2;
                    rect = new Rect( left, screenRectangle.Top, left + width, screenRectangle.Bottom );
                }
                else
                {
                    float right = screenRectangle.Left + rectSize.X / 2;
                    rect = new Rect( right - width, screenRectangle.Top, right, screenRectangle.Bottom );
                }

                Control barControl = control.Controls[ "Bar" ];
                barControl.SetScreenClipRectangle( rect );
            }
        //Draw minimap
        private void Minimap_RenderUI(Control sender, GuiRenderer renderer)
        {
            Rect screenMapRect = sender.GetScreenRectangle();

            Bounds initialBounds = Map.Instance.InitialCollisionBounds;
            Rect mapRect = new Rect(initialBounds.Minimum.ToVec2(), initialBounds.Maximum.ToVec2());

            Vec2 mapSizeInv = new Vec2(1, 1) / mapRect.Size;

            //draw units
            Vec2 screenPixel = new Vec2(1, 1) / new Vec2(EngineApp.Instance.VideoMode.ToVec2());

            foreach (Entity entity in Map.Instance.Children)
            {
                RTSUnit unit = entity as RTSUnit;
                if (unit == null)
                    continue;

                Rect rect = new Rect(unit.MapBounds.Minimum.ToVec2(), unit.MapBounds.Maximum.ToVec2());

                rect -= mapRect.Minimum;
                rect.Minimum *= mapSizeInv;
                rect.Maximum *= mapSizeInv;
                rect.Minimum = new Vec2(rect.Minimum.X, 1.0f - rect.Minimum.Y);
                rect.Maximum = new Vec2(rect.Maximum.X, 1.0f - rect.Maximum.Y);
                rect.Minimum *= screenMapRect.Size;
                rect.Maximum *= screenMapRect.Size;
                rect += screenMapRect.Minimum;

                //increase 1 pixel
                rect.Maximum += new Vec2(screenPixel.X, -screenPixel.Y);

                ColorValue color;

                if (playerFaction == null || unit.Intellect == null || unit.Intellect.Faction == null)
                    color = new ColorValue(1, 1, 0);
                else if (playerFaction == unit.Intellect.Faction)
                    color = new ColorValue(0, 1, 0);
                else
                    color = new ColorValue(1, 0, 0);

                renderer.AddQuad(rect, color);
            }

            //Draw camera borders
            {
                Camera camera = RendererWorld.Instance.DefaultCamera;

                if (camera.Position.Z > 0)
                {
                    Plane groundPlane = new Plane(0, 0, 1, 0);

                    Vec2[] points = new Vec2[4];

                    for (int n = 0; n < 4; n++)
                    {
                        Vec2 p = Vec2.Zero;

                        switch (n)
                        {
                            case 0: p = new Vec2(0, 0); break;
                            case 1: p = new Vec2(1, 0); break;
                            case 2: p = new Vec2(1, 1); break;
                            case 3: p = new Vec2(0, 1); break;
                        }

                        Ray ray = camera.GetCameraToViewportRay(p);

                        float scale;
                        groundPlane.RayIntersection(ray, out scale);

                        Vec3 pos = ray.GetPointOnRay(scale);
                        if (ray.Direction.Z > 0)
                            pos = ray.Origin + ray.Direction.GetNormalize() * 10000;

                        Vec2 point = pos.ToVec2();

                        point -= mapRect.Minimum;
                        point *= mapSizeInv;
                        point = new Vec2(point.X, 1.0f - point.Y);
                        point *= screenMapRect.Size;
                        point += screenMapRect.Minimum;

                        points[n] = point;
                    }

                    renderer.PushClipRectangle(screenMapRect);
                    for (int n = 0; n < 4; n++)
                        renderer.AddLine(points[n], points[(n + 1) % 4], new ColorValue(1, 1, 1));
                    renderer.PopClipRectangle();
                }
            }
        }
Example #4
0
        void DrawArea_RenderUI( Control sender, GuiRenderer renderer )
        {
            Rect rectangle = sender.GetScreenRectangle();
            bool clipRectangle = true;
            ColorValue[] colors = new ColorValue[]{
                new ColorValue( 1 ,0, 0 ),
                new ColorValue( 0, 1, 0 ),
                new ColorValue( 0, 0, 1 ),
                new ColorValue( 1, 1, 0 ),
                new ColorValue( 1, 1, 1 )};

            if( clipRectangle )
                renderer.PushClipRectangle( rectangle );

            //draw triangles
            if( GetDrawAreaMode() == DrawAreaModes.Triangles )
            {
                float distance = rectangle.GetSize().X / 2;

                List<GuiRenderer.TriangleVertex> triangles = new List<GuiRenderer.TriangleVertex>( 256 );

                Radian angle = -EngineApp.Instance.Time;

                const int steps = 30;
                Vec2 lastPosition = Vec2.Zero;
                for( int step = 0; step < steps + 1; step++ )
                {
                    Vec2 localPos = new Vec2( MathFunctions.Cos( angle ), MathFunctions.Sin( angle ) ) * distance;
                    Vec2 pos = rectangle.GetCenter() + new Vec2( localPos.X, localPos.Y * renderer.AspectRatio );

                    if( step != 0 )
                    {
                        ColorValue color = colors[ step % colors.Length ];
                        ColorValue color2 = color;
                        color2.Alpha = 0;
                        triangles.Add( new GuiRenderer.TriangleVertex( rectangle.GetCenter(), color ) );
                        triangles.Add( new GuiRenderer.TriangleVertex( lastPosition, color2 ) );
                        triangles.Add( new GuiRenderer.TriangleVertex( pos, color2 ) );
                    }

                    angle += ( MathFunctions.PI * 2 ) / steps;
                    lastPosition = pos;
                }

                renderer.AddTriangles( triangles );
            }

            //draw quads
            if( GetDrawAreaMode() == DrawAreaModes.Quads )
            {
                //draw background
                {
                    Texture texture = TextureManager.Instance.Load( "Gui\\Various\\Logo.png" );
                    renderer.AddQuad( rectangle, new Rect( 0, -.3f, 1, 1.4f ), texture,
                        new ColorValue( 1, 1, 1 ), true );
                }

                //draw bars
                {
                    float time = EngineApp.Instance.Time;

                    EngineRandom random = new EngineRandom( 0 );

                    int count = 15;
                    float stepOffset = rectangle.GetSize().X / count;
                    float size = stepOffset * .9f;
                    for( int n = 0; n < count; n++ )
                    {
                        float v = MathFunctions.Cos( time * random.NextFloat() );
                        float v2 = ( v + 1 ) / 2;

                        ColorValue color = colors[ n % colors.Length ];
                        Rect rect = new Rect(
                            rectangle.Left + stepOffset * n, rectangle.Bottom - rectangle.GetSize().Y * v2,
                            rectangle.Left + stepOffset * n + size, rectangle.Bottom );
                        renderer.AddQuad( rect, color );
                    }
                }
            }

            //draw lines
            if( GetDrawAreaMode() == DrawAreaModes.Lines )
            {
                float maxDistance;
                {
                    Vec2 s = rectangle.GetSize() / 2;
                    maxDistance = MathFunctions.Sqrt( s.X * s.X + s.Y * s.Y );
                }

                int step = 0;
                float distance = 0;
                Radian angle = -EngineApp.Instance.Time;
                Vec2 lastPosition = Vec2.Zero;

                while( distance < maxDistance )
                {
                    Vec2 localPos = new Vec2( MathFunctions.Cos( angle ), MathFunctions.Sin( angle ) ) * distance;
                    Vec2 pos = rectangle.GetCenter() + new Vec2( localPos.X, localPos.Y * renderer.AspectRatio );

                    if( step != 0 )
                    {
                        ColorValue color = colors[ step % colors.Length ];
                        renderer.AddLine( lastPosition, pos, color );
                    }

                    step++;
                    angle += MathFunctions.PI / 10;
                    distance += .001f;
                    lastPosition = pos;
                }
            }

            //draw text
            if( GetDrawAreaMode() == DrawAreaModes.Text )
            {
                //draw text with specified font.
                renderer.AddText( drawAreaBigFont, "Big Font Sample", rectangle.LeftTop, HorizontalAlign.Left,
                    VerticalAlign.Top, new ColorValue( 1, 1, 1 ) );

                //draw text with word wrap.
                string text = "Test Test Test.\n\nThe expandable user interface system is a unified system " +
                    "for the creation of end-user controls, menus, dialogues, windows and HUD screens. " +
                    "With the help of this system the end-user exercises control over the application.";
                renderer.AddTextWordWrap( text, rectangle, HorizontalAlign.Right, false, VerticalAlign.Bottom, 0,
                    new ColorValue( 1, 1, 0 ) );
            }

            if( clipRectangle )
                renderer.PopClipRectangle();
        }
Example #5
0
        private void DrawArea_RenderUI(Control sender, GuiRenderer renderer)
        {
            Rect rectangle     = sender.GetScreenRectangle();
            bool clipRectangle = true;

            ColorValue[] colors = new ColorValue[] {
                new ColorValue(1, 0, 0),
                new ColorValue(0, 1, 0),
                new ColorValue(0, 0, 1),
                new ColorValue(1, 1, 0),
                new ColorValue(1, 1, 1)
            };

            if (clipRectangle)
            {
                renderer.PushClipRectangle(rectangle);
            }

            //draw triangles
            if (GetDrawAreaMode() == DrawAreaModes.Triangles)
            {
                float distance = rectangle.GetSize().X / 2;

                List <GuiRenderer.TriangleVertex> triangles = new List <GuiRenderer.TriangleVertex>(256);

                Radian angle = -EngineApp.Instance.Time;

                const int steps        = 30;
                Vec2      lastPosition = Vec2.Zero;
                for (int step = 0; step < steps + 1; step++)
                {
                    Vec2 localPos = new Vec2(MathFunctions.Cos(angle), MathFunctions.Sin(angle)) * distance;
                    Vec2 pos      = rectangle.GetCenter() + new Vec2(localPos.X, localPos.Y * renderer.AspectRatio);

                    if (step != 0)
                    {
                        ColorValue color  = colors[step % colors.Length];
                        ColorValue color2 = color;
                        color2.Alpha = 0;
                        triangles.Add(new GuiRenderer.TriangleVertex(rectangle.GetCenter(), color));
                        triangles.Add(new GuiRenderer.TriangleVertex(lastPosition, color2));
                        triangles.Add(new GuiRenderer.TriangleVertex(pos, color2));
                    }

                    angle       += (MathFunctions.PI * 2) / steps;
                    lastPosition = pos;
                }

                renderer.AddTriangles(triangles);
            }

            //draw quads
            if (GetDrawAreaMode() == DrawAreaModes.Quads)
            {
                //draw background
                {
                    Texture texture = TextureManager.Instance.Load("GUI\\Textures\\NeoAxisLogo.png");
                    renderer.AddQuad(rectangle, new Rect(0, -.3f, 1, 1.4f), texture,
                                     new ColorValue(1, 1, 1), true);
                }

                //draw bars
                {
                    float time = EngineApp.Instance.Time;

                    EngineRandom random = new EngineRandom(0);

                    int   count      = 15;
                    float stepOffset = rectangle.GetSize().X / count;
                    float size       = stepOffset * .9f;
                    for (int n = 0; n < count; n++)
                    {
                        float v  = MathFunctions.Cos(time * random.NextFloat());
                        float v2 = (v + 1) / 2;

                        ColorValue color = colors[n % colors.Length];
                        Rect       rect  = new Rect(
                            rectangle.Left + stepOffset * n, rectangle.Bottom - rectangle.GetSize().Y *v2,
                            rectangle.Left + stepOffset * n + size, rectangle.Bottom);
                        renderer.AddQuad(rect, color);
                    }
                }
            }

            //draw lines
            if (GetDrawAreaMode() == DrawAreaModes.Lines)
            {
                float maxDistance;
                {
                    Vec2 s = rectangle.GetSize() / 2;
                    maxDistance = MathFunctions.Sqrt(s.X * s.X + s.Y * s.Y);
                }

                int    step         = 0;
                float  distance     = 0;
                Radian angle        = -EngineApp.Instance.Time;
                Vec2   lastPosition = Vec2.Zero;

                while (distance < maxDistance)
                {
                    Vec2 localPos = new Vec2(MathFunctions.Cos(angle), MathFunctions.Sin(angle)) * distance;
                    Vec2 pos      = rectangle.GetCenter() + new Vec2(localPos.X, localPos.Y * renderer.AspectRatio);

                    if (step != 0)
                    {
                        ColorValue color = colors[step % colors.Length];
                        renderer.AddLine(lastPosition, pos, color);
                    }

                    step++;
                    angle       += MathFunctions.PI / 10;
                    distance    += .001f;
                    lastPosition = pos;
                }
            }

            //draw text
            if (GetDrawAreaMode() == DrawAreaModes.Text)
            {
                string text;

                //draw text with specified font.
                text = "Map Editor is a tool to create worlds for your project. The tool is a complex editor to manage " +
                       "objects on the map.";
                renderer.AddTextWordWrap(drawAreaBigFont, text, rectangle, HorizontalAlign.Left, false, VerticalAlign.Top, 0,
                                         new ColorValue(1, 1, 1));

                //draw text with word wrap.
                text = "Deployment Tool is a tool to deploy the final version of your application to specified platforms. " +
                       "This utility is useful to automate the final product's creation.";
                renderer.AddTextWordWrap(drawAreaSmallFont, text, rectangle, HorizontalAlign.Right, false, VerticalAlign.Bottom, 0,
                                         new ColorValue(1, 1, 0));
            }

            if (clipRectangle)
            {
                renderer.PopClipRectangle();
            }
        }
        protected override void OnAttach()
        {
            if (GameMap.Instance.GameType != GameMap.GameTypes.AssaultKnights)
            {
                return;
            }

            base.OnAttach();

            if (EntitySystemWorld.Instance.IsClientOnly())//&& !EntitySystemWorld.Instance.IsEditor())
            {
                GameNetworkClient.Instance.CustomMessagesService.ReceiveMessage += new CustomMessagesClientNetworkService.ReceiveMessageDelegate(Client_CustomMessagesService_ReceiveMessage);
            }

            window = ControlDeclarationManager.Instance.CreateControl("Gui\\PlayerSpawnWindow.gui");
            Controls.Add(window);

            spawnPoints = window.Controls["spawnPoints"];

            if (Map.Instance == null)
            {
                return;
            }

            //Need to Get Control Manager layers from map
            //Get Basemap value

            //layers
            //{
            //    item
            //    {
            //        name = base
            //        baseMap = "Assault Knights\\AKMaps\\AriFlats\\Textures\\flatsCM.png"
            //        baseScale = 10000
            //        detailMap = "Assault Knights\\Maps\\Map Textures\\Terrain\\DetailTextures\\64d0b218.png"
            //        detailScale = 20
            //        detailNormalMap = "Assault Knights\\Maps\\Map Textures\\Terrain\\DetailTextures\\cracked_ground_normal.tga_converted.dds"
            //    }

            //Incin -- better way each file is Assault Knights\\AKMaps\\"MapName"\\Textures\\overview.png
            //each file is 1024 x 1024 .png file
            string  mapvirtualpath = Map.Instance.GetVirtualFileDirectory().ToString();
            Texture backtexture    = TextureManager.Instance.Load(mapvirtualpath + "\\Textures\\overview.png");

            if (backtexture != null)
            {
                spawnPoints.BackTexture = backtexture;
            }
            else
            {
                Log.Info("Invalid Path or filename of spawnPoints.BackTexture window: {0}, verify location of file or file exists!", backtexture);
            }

            Rect   screenMapRect = spawnPoints.GetScreenRectangle();
            Bounds initialBounds = Map.Instance.InitialCollisionBounds;
            Rect   mapRect       = new Rect(initialBounds.Minimum.ToVec2(), initialBounds.Maximum.ToVec2());

            foreach (Entity entity in Map.Instance.Children)
            {
                if (GameMap.Instance.GameType == GameMap.GameTypes.AssaultKnights)
                {
                    SpawnPoint sp = entity as SpawnPoint;
                    if (sp != null)
                    {
                        btn = ControlDeclarationManager.Instance.CreateControl(
                            "Gui\\Controls\\AKDefaultBaseButton.gui") as Button;

                        txt          = new TextBox();
                        txt.AutoSize = true;
                        txt.Text     = sp.Text;

                        PossibleSpawnPoint psp = new PossibleSpawnPoint();
                        psp.btn      = btn;
                        psp.sp       = sp;
                        psp.spid     = sp.SpawnID.ToString(); //set spawnid of spawnpoint -- needed network passing
                        psp.text     = txt;
                        btn.UserData = psp;
                        btn.Click   += new Button.ClickDelegate(btn_Click);
                        float x = 0.5f + sp.Position.X / mapRect.Size.X;
                        float y = 0.5f + sp.Position.Y / mapRect.Size.Y;

                        btn.Position = new ScaleValue(ScaleType.Parent, new Vec2(x, y));
                        txt.Position = new ScaleValue(ScaleType.Parent, new Vec2(x + 0.05f, y));
                        spawnPoints.Controls.Add(btn);
                        spawnPoints.Controls.Add(txt);
                        possibleSpawnPoints.Add(psp);
                    }
                }
            }

            done        = window.Controls["Done"] as Button;
            done.Click += new Button.ClickDelegate(done_Click);

            suicide        = window.Controls["Sucide"] as Button;
            suicide.Click += new Button.ClickDelegate(suicide_Click);
            AKB            = window.Controls["AK"] as Button;
            AKB.Click     += new Button.ClickDelegate(AKB_Click);
            OmniB          = window.Controls["Omni"] as Button;
            OmniB.Click   += new Button.ClickDelegate(OmniB_Click);

            AKB.Active = true;
        }
        private void DrawArea_RenderUI(Control sender, GuiRenderer renderer)
        {
            Rect rectangle = sender.GetScreenRectangle();
            bool clipRectangle = true;
            ColorValue[] colors = new ColorValue[]{
				new ColorValue( 1 ,0, 0 ),
				new ColorValue( 0, 1, 0 ),
				new ColorValue( 0, 0, 1 ),
				new ColorValue( 1, 1, 0 ),
				new ColorValue( 1, 1, 1 )};

            if (clipRectangle)
                renderer.PushClipRectangle(rectangle);

            //draw triangles
            if (GetDrawAreaMode() == DrawAreaModes.Triangles)
            {
                float distance = rectangle.GetSize().X / 2;

                List<GuiRenderer.TriangleVertex> triangles = new List<GuiRenderer.TriangleVertex>(256);

                Radian angle = -EngineApp.Instance.Time;

                const int steps = 30;
                Vec2 lastPosition = Vec2.Zero;
                for (int step = 0; step < steps + 1; step++)
                {
                    Vec2 localPos = new Vec2(MathFunctions.Cos(angle), MathFunctions.Sin(angle)) * distance;
                    Vec2 pos = rectangle.GetCenter() + new Vec2(localPos.X, localPos.Y * renderer.AspectRatio);

                    if (step != 0)
                    {
                        ColorValue color = colors[step % colors.Length];
                        ColorValue color2 = color;
                        color2.Alpha = 0;
                        triangles.Add(new GuiRenderer.TriangleVertex(rectangle.GetCenter(), color));
                        triangles.Add(new GuiRenderer.TriangleVertex(lastPosition, color2));
                        triangles.Add(new GuiRenderer.TriangleVertex(pos, color2));
                    }

                    angle += (MathFunctions.PI * 2) / steps;
                    lastPosition = pos;
                }

                renderer.AddTriangles(triangles);
            }

            //draw quads
            if (GetDrawAreaMode() == DrawAreaModes.Quads)
            {
                //draw background
                {
                    Texture texture = TextureManager.Instance.Load("GUI\\Textures\\NeoAxisLogo.png");
                    renderer.AddQuad(rectangle, new Rect(0, -.3f, 1, 1.4f), texture,
                        new ColorValue(1, 1, 1), true);
                }

                //draw bars
                {
                    float time = EngineApp.Instance.Time;

                    EngineRandom random = new EngineRandom(0);

                    int count = 15;
                    float stepOffset = rectangle.GetSize().X / count;
                    float size = stepOffset * .9f;
                    for (int n = 0; n < count; n++)
                    {
                        float v = MathFunctions.Cos(time * random.NextFloat());
                        float v2 = (v + 1) / 2;

                        ColorValue color = colors[n % colors.Length];
                        Rect rect = new Rect(
                            rectangle.Left + stepOffset * n, rectangle.Bottom - rectangle.GetSize().Y * v2,
                            rectangle.Left + stepOffset * n + size, rectangle.Bottom);
                        renderer.AddQuad(rect, color);
                    }
                }
            }

            //draw lines
            if (GetDrawAreaMode() == DrawAreaModes.Lines)
            {
                float maxDistance;
                {
                    Vec2 s = rectangle.GetSize() / 2;
                    maxDistance = MathFunctions.Sqrt(s.X * s.X + s.Y * s.Y);
                }

                int step = 0;
                float distance = 0;
                Radian angle = -EngineApp.Instance.Time;
                Vec2 lastPosition = Vec2.Zero;

                while (distance < maxDistance)
                {
                    Vec2 localPos = new Vec2(MathFunctions.Cos(angle), MathFunctions.Sin(angle)) * distance;
                    Vec2 pos = rectangle.GetCenter() + new Vec2(localPos.X, localPos.Y * renderer.AspectRatio);

                    if (step != 0)
                    {
                        ColorValue color = colors[step % colors.Length];
                        renderer.AddLine(lastPosition, pos, color);
                    }

                    step++;
                    angle += MathFunctions.PI / 10;
                    distance += .001f;
                    lastPosition = pos;
                }
            }

            //draw text
            if (GetDrawAreaMode() == DrawAreaModes.Text)
            {
                string text;

                //draw text with specified font.
                text = "Map Editor is a tool to create worlds for your project. The tool is a complex editor to manage " +
                    "objects on the map.";
                renderer.AddTextWordWrap(drawAreaBigFont, text, rectangle, HorizontalAlign.Left, false, VerticalAlign.Top, 0,
                    new ColorValue(1, 1, 1));

                //draw text with word wrap.
                text = "Deployment Tool is a tool to deploy the final version of your application to specified platforms. " +
                    "This utility is useful to automate the final product's creation.";
                renderer.AddTextWordWrap(drawAreaSmallFont, text, rectangle, HorizontalAlign.Right, false, VerticalAlign.Bottom, 0,
                    new ColorValue(1, 1, 0));
            }

            if (clipRectangle)
                renderer.PopClipRectangle();
        }
        protected override void OnAttach()
        {
            if (GameMap.Instance.GameType != GameMap.GameTypes.AssaultKnights)
            {
                return;
            }

            base.OnAttach();

            if (EntitySystemWorld.Instance.IsClientOnly())//&& !EntitySystemWorld.Instance.IsEditor())
            {
                GameNetworkClient.Instance.CustomMessagesService.ReceiveMessage += new CustomMessagesClientNetworkService.ReceiveMessageDelegate(Client_CustomMessagesService_ReceiveMessage);
            }

            window = ControlDeclarationManager.Instance.CreateControl("Gui\\PlayerSpawnWindow.gui");
            Controls.Add(window);

            spawnPoints = window.Controls["spawnPoints"];

            if (Map.Instance == null)
                return;

            //Need to Get Control Manager layers from map
            //Get Basemap value

            //layers
            //{
            //    item
            //    {
            //        name = base
            //        baseMap = "Assault Knights\\AKMaps\\AriFlats\\Textures\\flatsCM.png"
            //        baseScale = 10000
            //        detailMap = "Assault Knights\\Maps\\Map Textures\\Terrain\\DetailTextures\\64d0b218.png"
            //        detailScale = 20
            //        detailNormalMap = "Assault Knights\\Maps\\Map Textures\\Terrain\\DetailTextures\\cracked_ground_normal.tga_converted.dds"
            //    }

            //Incin -- better way each file is Assault Knights\\AKMaps\\"MapName"\\Textures\\overview.png
            //each file is 1024 x 1024 .png file
            string mapvirtualpath = Map.Instance.GetVirtualFileDirectory().ToString();
            Texture backtexture = TextureManager.Instance.Load(mapvirtualpath + "\\Textures\\overview.png");

            if (backtexture != null)
                spawnPoints.BackTexture = backtexture;
            else
                Log.Info("Invalid Path or filename of spawnPoints.BackTexture window: {0}, verify location of file or file exists!", backtexture);

            Rect screenMapRect = spawnPoints.GetScreenRectangle();
            Bounds initialBounds = Map.Instance.InitialCollisionBounds;
            Rect mapRect = new Rect(initialBounds.Minimum.ToVec2(), initialBounds.Maximum.ToVec2());

            foreach (Entity entity in Map.Instance.Children)
            {
                if (GameMap.Instance.GameType == GameMap.GameTypes.AssaultKnights)
                {
                    SpawnPoint sp = entity as SpawnPoint;
                    if (sp != null)
                    {
                        btn = ControlDeclarationManager.Instance.CreateControl(
                            "Gui\\Controls\\AKDefaultBaseButton.gui") as Button;

                        txt = new TextBox();
                        txt.AutoSize = true;
                        txt.Text = sp.Text;

                        PossibleSpawnPoint psp = new PossibleSpawnPoint();
                        psp.btn = btn;
                        psp.sp = sp;
                        psp.spid = sp.SpawnID.ToString(); //set spawnid of spawnpoint -- needed network passing
                        psp.text = txt;
                        btn.UserData = psp;
                        btn.Click += new Button.ClickDelegate(btn_Click);
                        float x = 0.5f + sp.Position.X / mapRect.Size.X;
                        float y = 0.5f + sp.Position.Y / mapRect.Size.Y;

                        btn.Position = new ScaleValue(ScaleType.Parent, new Vec2(x, y));
                        txt.Position = new ScaleValue(ScaleType.Parent, new Vec2(x + 0.05f, y));
                        spawnPoints.Controls.Add(btn);
                        spawnPoints.Controls.Add(txt);
                        possibleSpawnPoints.Add(psp);
                    }
                }
            }

            done = window.Controls["Done"] as Button;
            done.Click += new Button.ClickDelegate(done_Click);

            suicide = window.Controls["Sucide"] as Button;
            suicide.Click += new Button.ClickDelegate(suicide_Click);
            AKB = window.Controls["AK"] as Button;
            AKB.Click += new Button.ClickDelegate(AKB_Click);
            OmniB = window.Controls["Omni"] as Button;
            OmniB.Click += new Button.ClickDelegate(OmniB_Click);

            AKB.Active = true;
        }