Beispiel #1
0
        public void UpdateUnitFrames()
        {
            core.GroupManager.UpdateGroups();
            var groups = core.GroupManager.Groups;

            foreach (var panicFrame in PanicFrames)
            {
                panicFrame.Visible = false;
            }

            foreach (var unitFrame in UnitFrames)
            {
                unitFrame.Visible = false;
            }

            GUI.Frame lastFrame = null;
            for (int index = 0; index < groups.Count; index++)
            {
                var group = groups[index];

                var pFrame = PanicFrames[index];
                pFrame["group"] = group;
                var pFrameBarBg = (GUI.Frame)pFrame["panicBarBg"];
                var pFrameBar   = (GUI.Frame)pFrame["panicBar"];
                var pFrameText  = (GUI.Text)pFrame["text"];
                pFrameBar.Width  = (int)(pFrameBarBg.Width * (group.Panic / group.MaxPanic));
                pFrameText.Value = Math.Round(group.Panic).ToString() + "/" + group.MaxPanic.ToString() + " (" + Math.Round(group.Panic / group.MaxPanic * 100f).ToString() + "%)";

                pFrame.Visible = true;
                if (lastFrame != null)
                {
                    pFrame.X = lastFrame.X;
                    pFrame.Y = lastFrame.Y + lastFrame.Height + 15;
                }
                lastFrame = pFrame;

                foreach (Soldier soldier in @group.Entities)
                {
                    var frame = (GUI.Frame)soldier["unitFrame"];
                    frame.X       = lastFrame.X;
                    frame.Y       = lastFrame.Y + lastFrame.Height;
                    frame.Visible = true;

                    // Update HP
                    var healthBarBg = (GUI.Frame)frame["healthBarBg"];
                    var healthBar   = (GUI.Frame)frame["healthBar"];
                    healthBar.Width = (int)((healthBarBg.Width - 2) * (soldier.GetComponent <Component.Stat>().Life / soldier.GetComponent <Component.Stat>().MaxHP));

                    // Update Action Points
                    var actionBarBg = (GUI.Frame)frame["actionBarBg"];
                    var actionBar   = (GUI.Frame)frame["actionBar"];
                    actionBar.Width = (int)(((float)actionBarBg.Width - 2f) * ((float)soldier.AP / (float)soldier.MaxActionPoints));
                    lastFrame       = frame;
                }
            }
        }
Beispiel #2
0
        private GUI.Frame CreatePanicFrame()
        {
            var frame = new GUI.Frame(UIParent);

            frame.SetTexture("images/GUI/unit_background");
            frame.Color  = Color.Black;
            frame.Width  = 164;
            frame.Height = 19;

            frame.OnClick += delegate(Frame frame1, GUIManager.MouseEventArgs args)
            {
                DynamicGroupManager.Group group = (DynamicGroupManager.Group)frame1["group"];
                if (group != null)
                {
                    group.Panic += 5;
                }
            };

            var panicBarBg = new GUI.Frame(frame);

            panicBarBg.SetTexture("images/GUI/health_background");
            panicBarBg.Width    = 136;
            panicBarBg.Height   = 13;
            panicBarBg.X        = 3;
            panicBarBg.Y        = 3;
            frame["panicBarBg"] = panicBarBg;

            var panicBar = new GUI.Frame(panicBarBg);

            panicBar.SetTexture("images/GUI/bar_solid");
            panicBar.Color    = new Color(87, 55, 253);
            panicBar.Width    = (int)(panicBarBg.Width * 0.5);
            panicBar.Height   = 11;
            panicBar.X        = 1;
            panicBar.Y        = 1;
            frame["panicBar"] = panicBar;

            var text = new GUI.Text(frame);

            text.SetFont("fonts/UnitName");
            text.Value    = "0%";
            text.X        = 4;
            text.Y        = 1;
            frame["text"] = text;

            return(frame);
        }
Beispiel #3
0
 public Text(Frame parent)
     : base(parent)
 {
     this.Color = Color.White;
 }
Beispiel #4
0
 public Button(Frame parent)
     : base(parent)
 {
 }
Beispiel #5
0
 /// <summary>
 /// Create a blank frame as the child of a frame.
 /// </summary>
 /// <param name="parentFrame">The parent frame.</param>
 public Frame(Frame parentFrame)
     : this()
 {
     this.Parent = parentFrame;
 }
Beispiel #6
0
 /// <summary>
 /// Remove a child frame from the frame.
 /// </summary>
 /// <param name="childFrame">The child frame to remove.</param>
 public void RemoveChild(Frame childFrame)
 {
     if (Children.Contains(childFrame))
         Children.Remove(childFrame);
 }
Beispiel #7
0
 /// <summary>
 /// Add a child frame to the frame.
 /// </summary>
 /// <param name="childFrame">The child frame to add.</param>
 public void AddChild(Frame childFrame)
 {
     childFrame.Parent = this;
     if (!Children.Contains(childFrame))
         Children.Add(childFrame);
 }
Beispiel #8
0
        private GUI.Frame CreateUnitFrame(Soldier soldier)
        {
            var frame = new GUI.Frame(UIParent);

            frame.SetTexture("images/GUI/unit_background");
            frame.Color  = Color.Black;
            frame.Width  = 164;
            frame.Height = 42;

            var nameText = new GUI.Text(frame);

            nameText.SetFont("fonts/UnitName");
            nameText.Value    = soldier.Name + " " /* + soldier.GetHashCode()*/;
            nameText.X        = 4;
            nameText.Y        = 1;
            frame["nameText"] = nameText;

            var healthBarBg = new GUI.Frame(frame);

            healthBarBg.SetTexture("images/GUI/health_background");
            healthBarBg.Width    = 136;
            healthBarBg.Height   = 13;
            healthBarBg.X        = 3;
            healthBarBg.Y        = 19;
            frame["healthBarBg"] = healthBarBg;

            var healthBar = new GUI.Frame(healthBarBg);

            healthBar.SetTexture("images/GUI/bar_solid");
            healthBar.Color    = Color.Red;
            healthBar.Width    = (int)((healthBarBg.Width - 2) * (soldier.GetComponent <Component.Stat>().HP / soldier.GetComponent <Component.Stat>().MaxHP));
            healthBar.Height   = 11;
            healthBar.X        = 1;
            healthBar.Y        = 1;
            frame["healthBar"] = healthBar;

            var actionBarBg = new GUI.Frame(frame);

            actionBarBg.SetTexture("images/GUI/health_background");
            actionBarBg.Width    = 136;
            actionBarBg.Height   = 8;
            actionBarBg.X        = 3;
            actionBarBg.Y        = 31;
            frame["actionBarBg"] = actionBarBg;

            var actionBar = new GUI.Frame(actionBarBg);

            actionBar.SetTexture("images/GUI/bar_solid");
            actionBar.Color    = Color.Orange;
            actionBar.Width    = (int)((healthBarBg.Width - 2) * (soldier.GetComponent <Component.Stat>().HP / soldier.GetComponent <Component.Stat>().MaxHP));
            actionBar.Height   = 6;
            actionBar.X        = 1;
            actionBar.Y        = 1;
            frame["actionBar"] = actionBar;

            for (int i = 1; i < 10; i++)
            {
                var line = new GUI.Frame(actionBar);
                line.Texture = Utility.GetSolidTexture();
                line.Color   = Color.Black;
                line.Height  = 6;
                line.Width   = 1;
                line.X       = (int)(i * ((float)actionBarBg.Width / 10f)) - 1;
            }

            return(frame);
        }
Beispiel #9
0
        private GUI.Frame CreateUnitFrame(Soldier soldier)
        {
            var frame = new GUI.Frame(UIParent);
            frame.SetTexture("images/GUI/unit_background");
            frame.Color = Color.Black;
            frame.Width = 164;
            frame.Height = 42;

            var nameText = new GUI.Text(frame);
            nameText.SetFont("fonts/UnitName");
            nameText.Value = soldier.Name + " "/* + soldier.GetHashCode()*/;
            nameText.X = 4;
            nameText.Y = 1;
            frame["nameText"] = nameText;

            var healthBarBg = new GUI.Frame(frame);
            healthBarBg.SetTexture("images/GUI/health_background");
            healthBarBg.Width = 136;
            healthBarBg.Height = 13;
            healthBarBg.X = 3;
            healthBarBg.Y = 19;
            frame["healthBarBg"] = healthBarBg;

            var healthBar = new GUI.Frame(healthBarBg);
            healthBar.SetTexture("images/GUI/bar_solid");
            healthBar.Color = Color.Red;
            healthBar.Width = (int)((healthBarBg.Width - 2) * (soldier.GetComponent<Component.Stat>().HP / soldier.GetComponent<Component.Stat>().MaxHP));
            healthBar.Height = 11;
            healthBar.X = 1;
            healthBar.Y = 1;
            frame["healthBar"] = healthBar;

            var actionBarBg = new GUI.Frame(frame);
            actionBarBg.SetTexture("images/GUI/health_background");
            actionBarBg.Width = 136;
            actionBarBg.Height = 8;
            actionBarBg.X = 3;
            actionBarBg.Y = 31;
            frame["actionBarBg"] = actionBarBg;

            var actionBar = new GUI.Frame(actionBarBg);
            actionBar.SetTexture("images/GUI/bar_solid");
            actionBar.Color = Color.Orange;
            actionBar.Width = (int)((healthBarBg.Width - 2) * (soldier.GetComponent<Component.Stat>().HP / soldier.GetComponent<Component.Stat>().MaxHP));
            actionBar.Height = 6;
            actionBar.X = 1;
            actionBar.Y = 1;
            frame["actionBar"] = actionBar;

            for (int i = 1; i < 10; i++)
            {
                var line = new GUI.Frame(actionBar);
                line.Texture = Utility.GetSolidTexture();
                line.Color = Color.Black;
                line.Height = 6;
                line.Width = 1;
                line.X = (int)(i * ((float)actionBarBg.Width/10f)) - 1;
            }

            return frame;
        }
Beispiel #10
0
        private GUI.Frame CreatePanicFrame()
        {
            var frame = new GUI.Frame(UIParent);
            frame.SetTexture("images/GUI/unit_background");
            frame.Color = Color.Black;
            frame.Width = 164;
            frame.Height = 19;

            frame.OnClick += delegate(Frame frame1, GUIManager.MouseEventArgs args)
            {
                DynamicGroupManager.Group group = (DynamicGroupManager.Group)frame1["group"];
                if (group != null)
                    group.Panic += 5;
            };

            var panicBarBg = new GUI.Frame(frame);
            panicBarBg.SetTexture("images/GUI/health_background");
            panicBarBg.Width = 136;
            panicBarBg.Height = 13;
            panicBarBg.X = 3;
            panicBarBg.Y = 3;
            frame["panicBarBg"] = panicBarBg;

            var panicBar = new GUI.Frame(panicBarBg);
            panicBar.SetTexture("images/GUI/bar_solid");
            panicBar.Color = new Color(87, 55, 253);
            panicBar.Width = (int)(panicBarBg.Width * 0.5);
            panicBar.Height = 11;
            panicBar.X = 1;
            panicBar.Y = 1;
            frame["panicBar"] = panicBar;

            var text = new GUI.Text(frame);
            text.SetFont("fonts/UnitName");
            text.Value = "0%";
            text.X = 4;
            text.Y = 1;
            frame["text"] = text;

            return frame;
        }
Beispiel #11
0
        public Interface(Core core)
        {
            this.core = core;

            UIParent = new Frame();
            UIParent.Width = GameServices.GetService<GraphicsDevice>().Viewport.Width;
            UIParent.Height = GameServices.GetService<GraphicsDevice>().Viewport.Height;

            // Selection rectangle
            var selectionFrame = new Frame(UIParent);
            selectionFrame.Texture = Utility.GetSolidTexture();
            selectionFrame.Color = Color.Red * 0.5f;
            selectionFrame.Visible = false;
            UIParent["selectionFrame"] = selectionFrame;

            // OnPress
            UIParent.OnPress += delegate(Frame frame, GUIManager.MouseEventArgs args)
            {
                //KeyboardState ks = Keyboard.GetState();
                MouseState ms = args.MouseState;
                var mousePos = new Point(ms.X, ms.Y);
                var mouseRectangle = new Rectangle(mousePos.X, mousePos.Y, 1, 1);
                var mouseWorldPos = core.Camera.ScreenToWorld(new Vector2(mousePos.X, mousePos.Y));
                var mouseWorldRectangle = new Rectangle((int)mouseWorldPos.X, (int)mouseWorldPos.Y, 1, 1);

                // Show the selection frame
                if (args.LeftButton == ButtonState.Pressed)
                {
                    var selectFrame = (GUI.Frame)frame["selectionFrame"];
                    if (!selectFrame.Visible)
                    {
                        selectFrame.X = mousePos.X;
                        selectFrame.Y = mousePos.Y;
                        selectFrame.Visible = true;
                    }
                }

                if (args.RightButton == ButtonState.Pressed)
                {
                    // Unit rotation
                    foreach (var unit in core.Squad)
                    {
                        if (unit.Selected && mouseWorldRectangle.Intersects(unit.GetComponent<Component.Collision>().Rectangle))
                        {
                            checkingDirection = true;
                            directionStart = unit.Transform.World + unit.Transform.World.Origin;
                        }
                    }
                }
            };

            // OnRelease
            UIParent.OnRelease += delegate(Frame frame, GUIManager.MouseEventArgs args)
            {
                KeyboardState ks = Keyboard.GetState();
                MouseState ms = args.MouseState;
                var mousePos = new Point(ms.X, ms.Y);

                var mouseRectangle = new Rectangle(mousePos.X, mousePos.Y, 1, 1);
                var mouseWorldPos = core.Camera.ScreenToWorld(new Vector2(mousePos.X, mousePos.Y));
                var mouseGridPos= Grid.WorldToGrid(mouseWorldPos);
                var mouseWorldRectangle = new Rectangle((int)mouseWorldPos.X, (int)mouseWorldPos.Y, 1, 1);

                if (args.LeftButton == ButtonState.Pressed)
                {
                    // Deselect all units
                    if (!ks.IsKeyDown(Keys.LeftControl))
                    {
                        foreach (var unit in core.Squad)
                            unit.Selected = false;

                        foreach (var unitFrame in UnitFrames)
                            unitFrame.Color = Color.Black;
                    }

                    // Select all soldier units inside the selection rectangle
                    var selectFrame = (GUI.Frame)frame["selectionFrame"];
                    if (selectFrame.Visible)
                    {
                        Console.WriteLine("Before: " + selectFrame.AbsoluteRectangle.X + ", " + selectFrame.AbsoluteRectangle.Y + ", " + selectFrame.AbsoluteRectangle.Width + ", " + selectFrame.AbsoluteRectangle.Height);

                        var intersectionRectangle = core.Camera.ScreenToWorld(selectFrame.AbsoluteRectangle);

                        Console.WriteLine("After: " + intersectionRectangle.X + ", " + intersectionRectangle.Y + ", " + intersectionRectangle.Width + ", " + intersectionRectangle.Height);

                        // Select all units in the rectangle
                        foreach (var soldier in core.Squad)
                        {
                            if (intersectionRectangle.Intersects(soldier.GetComponent<Component.Collision>().Rectangle))
                            {
                                soldier.Selected = true;
                                foreach (var unitFrame in UnitFrames)
                                {
                                    if (unitFrame["soldier"] == soldier)
                                        unitFrame.Color = Color.Blue;
                                }
                            }
                        }

                        selectFrame.Visible = false;
                    }
                }

                // Send orders with right click
                if (args.RightButton == ButtonState.Pressed)
                {
                    if (checkingDirection)
                    {
                        checkingDirection = false;
                    }
                    else
                    {
                        Debug.WriteLine("Right button pressed on UIParent");
                        Point mainpath = Point.Zero;
                        Stack<Soldier> soldierStack = new Stack<Soldier>();
                        //core.Squad.Where(a=>a.Selected).ToList().ForEach(a => soldierStack.Push(a));
                        /*foreach (var soldier in core.Squad)
                        {
                            if (soldier.Selected)
                            {
                                soldierStack.Push(soldier);
                            }
                        }*/

                        // Don't move into other soldiers
                        bool blocked = false;
                        foreach (var soldier in core.Squad)
                            if (soldier.Position == mouseGridPos)
                                blocked = true;

                        if (!blocked)
                        {
                            byte[,] collisionMap = Core.Map.GetCollisionMap();

                            // Try pathfinding
                            foreach (var unit in core.Squad)
                            {
                                if (unit.Selected)
                                {
                                    if (mainpath == Point.Zero)
                                    {
                                        mainpath = unit.Position;
                                    }
                                    Vector2 fromMain = new Vector2((mainpath.X - unit.Position.X)*Grid.TileSize,
                                                                   (mainpath.Y - unit.Position.Y)*Grid.TileSize);
                                    var goal = Grid.WorldToGrid(mouseWorldPos - fromMain);
                                    Console.WriteLine("First " + unit.AP);
                                    unit.GetComponent<Component.PathFinder>().Goal = goal;
                                    var length = unit.GetComponent<Component.PathFinder>().Length - 1;
                                    if (unit.AP >= length)
                                    {

                                        if (unit.GetComponent<Component.PathFinder>().IsMoving == false)
                                        {
                                            // If a path was not found, add the unit to the stack
                                            soldierStack.Push(unit);
                                        }
                                        else
                                        {
                                            unit.AP -= length;
                                            Console.WriteLine("then " + unit.AP);
                                            collisionMap[goal.X, goal.Y] = 0;
                                        }
                                    }
                                    else
                                    {
                                        unit.GetComponent<Component.PathFinder>().Stop();
                                    }

                                }
                            }

                            // Loop in a spiral and assign the soldiers in the stack their own unblocked positions
                            int X = 10;
                            int Y = 10;
                            int x, y, dx, dy;
                            x = y = dx = 0;
                            dy = -1;
                            int t = (int) MathHelper.Max(X, Y);
                            int maxI = t*t;
                            for (int i = 0; i < maxI; i++)
                            {
                                if ((-X/2 < x && x <= X/2) && (-Y/2 < y && y <= Y/2))
                                {
                                    Point point = new Point(x + mouseGridPos.X, y + mouseGridPos.Y);
                                    if (collisionMap[point.X, point.Y] == 1)
                                    {
                                        if (soldierStack.Count == 0)
                                        {
                                            break;
                                        }
                                        var soldier = soldierStack.Pop();

                                        if (soldier == null)
                                        {
                                            break;
                                        }
                                        else
                                        {
                                            Console.WriteLine("before " + soldier.AP);

                                            soldier.GetComponent<Component.PathFinder>().Goal = point;
                                            var length = soldier.GetComponent<Component.PathFinder>().Length - 1;

                                            if (soldier.GetComponent<Component.PathFinder>().IsMoving == true)
                                            {
                                                if (soldier.AP >= length)
                                                {

                                                    soldier.AP -= length;

                                                    Console.WriteLine("then " + soldier.AP);

                                                }
                                                else
                                                {
                                                    soldier.GetComponent<Component.PathFinder>().Stop();
                                                }
                                            }
                                        }
                                    }

                                }
                                if ((x == y) || ((x < 0) && (x == -y)) || ((x > 0) && (x == 1 - y)))
                                {
                                    t = dx;
                                    dx = -dy;
                                    dy = t;
                                }
                                x += dx;
                                y += dy;
                            }
                        }
                    }
                }
            };

            hitChance = new Text(UIParent);
            hitChance.SetFont("Arial");
            hitChance.Value = "";

            var button = new GUI.Button(UIParent);
            button.SetTexture("images/Enter");
            button.X = 200;
            button.Y = 100;
            button.Width = 55;
            button.Height = 40;

            // Test GUI frames
            /*var frame = new GUI.Frame()
            {
                Y = 100
            };

            var button = new GUI.Button(frame)
            {
                Width = 48,
                Height = 23,
                Texture = core.Content.Load<Texture2D>("images/Enter"),
                OnClick = delegate(Point clickPos)
                {
                    Debug.WriteLine("That ugly button was clicked at (" + clickPos.X + "," + clickPos.Y + ")");
                }
            };

            var text = new GUI.Text(frame);
            text.SetFont("Arial");
            text.Value = "Hello world!";*/

            // Create some unit frames
            /*var panicFrame = CreatePanicFrame();
            var unit1 = CreateUnitFrame("Flight captain Rainbow");
            unit1.X = panicFrame.X;
            unit1.Y = panicFrame.Y + panicFrame.Height;
            unit1.OnClick += delegate(Frame frame, Frame.MouseEventArgs args)
            {
                frame.Color = Color.Red;
            };
            var unit2 = CreateUnitFrame("Mr. Sparkle");
            unit2.X = unit1.X;
            unit2.Y = unit1.Y + unit1.Height;
            unit2.OnClick += delegate(Frame frame, Frame.MouseEventArgs args)
            {
                frame.Color = Color.Red;
            };*/

            /*var frame1 = new GUI.Frame();
            frame1.Layer = 0;
            frame1.SetTexture("images/Enter");
            frame1.Color = Color.Red;
            frame1.Width = 100;
            frame1.Height = 100;
            frame1.OnClick += delegate(Frame frame, Frame.MouseEventArgs args)
            {
                if (frame.Color == Color.Red)
                    frame.Color = Color.Green;
                else
                    frame.Color = Color.Red;
            };
                var frame1_child = new GUI.Frame(frame1);
                frame1_child.SetTexture("images/Enter");
                frame1_child.Color = Color.Purple;
                frame1_child.Width = 60;
                frame1_child.Height = 60;
                frame1_child.X = 20;
                frame1_child.Y = 20;

            var frame2 = new GUI.Frame();
            frame2.Layer = 0;
            frame2.SetTexture("images/Enter");
            frame2.Color = Color.Blue;
            frame2.Width = 100;
            frame2.Height = 100;
            frame2.X = 50;
            frame2.Y = 50;
            frame2.OnClick += delegate(Frame frame, Frame.MouseEventArgs args)
            {
                if (frame.Color == Color.Blue)
                    frame.Color = Color.Yellow;
                else
                    frame.Color = Color.Blue;
            };*/
        }
Beispiel #12
0
 public static GUI.Text CreateText(GUI.Frame parent)
 {
     return(new GUI.Text(parent));
 }
Beispiel #13
0
 public static GUI.Button CreateButton(GUI.Frame parent)
 {
     return(new GUI.Button(parent));
 }
Beispiel #14
0
 public static GUI.Frame CreateFrame(GUI.Frame parent)
 {
     return(new GUI.Frame(parent));
 }