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"); } }
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(); } } }
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(); }
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; }