示例#1
0
        public void DrawCursor(Texture2D Texture, vec2 Size, float Angle = 0)
        {
            vec2 WorldCord = ScreenToWorldCoord(Input.CurMousePos);

            DrawTextureSmooth.Using(camvec, CameraAspect, Texture);
            RectangleQuad.Draw(GameClass.Graphics, WorldCord, Size, Angle);
        }
示例#2
0
        RectangleQuad SetUnitQuad(vec2 pos, vec2 size, float type, int player, int frame, float dir, RectangleQuad quad = null)
        {
            if (IsBuilding(type))
            {
                return(SetBuildingQuad(pos, size, type, player, quad));
            }

            vec2 uv_size = UnitSpriteSheet.SpriteSize;

            vec2 uv_offset;

            uv_offset.x = frame;
            uv_offset.y = (Float(dir) - 1) + 4 * (player - 1) + 4 * 4 * Float(UnitType.UnitIndex(type));
            uv_offset  *= UnitSpriteSheet.SpriteSize;

            if (quad == null)
            {
                quad = new RectangleQuad();
            }

            quad.SetupVertices(pos, pos + 2 * new vec2(size.x, -size.y), new vec2(0, uv_size.y) + uv_offset, new vec2(uv_size.x, 0.005f * uv_size.y) + uv_offset);
            quad.Texture = Assets.UnitTexture_1;

            return(quad);
        }
示例#3
0
        public void DrawMinimap(vec2 pos, vec2 size, bool ShowCameraBox = true, bool SolidColor = false)
        {
            //vec2 center = pos + vec(-CameraAspect, -1) + new vec2(size.x, size.y) * vec(1.1f, 1.15f);
            vec2 center = pos * vec(2 * CameraAspect, -2) - vec(CameraAspect, -1);

            MinimapQuad.SetupVertices(center - size, center + size, vec(0, 0), vec(1, 1));

            vec2 _size   = size * vec(1, 254f / 245f) * 1.12f;
            vec2 _center = center + _size * vec(.03f, -.06f);

            DrawTextureSmooth.Using(vec(0, 0, 1, 1), CameraAspect, Assets.Minimap);
            RectangleQuad.Draw(GameClass.Graphics, _center, _size);

            if (SolidColor)
            {
                DrawSolid.Using(vec(0, 0, 1, 1), CameraAspect, rgb(0x222222));
                MinimapQuad.Draw(GameClass.Graphics);
            }
            else
            {
                DrawTextureSmooth.Using(vec(0, 0, 1, 1), CameraAspect, Minimap);
                MinimapQuad.Draw(GameClass.Graphics);
            }

            if (ShowCameraBox)
            {
                vec2 cam = CameraPos * size;
                vec2 bl  = center + cam - vec(CameraAspect, 1) * size / CameraZoom;
                vec2 tr  = center + cam + vec(CameraAspect, 1) * size / CameraZoom;
                bl = max(bl, center - size);
                tr = min(tr, center + size);
                DrawSolid.Using(vec(0, 0, 1, 1), CameraAspect, new color(.6f, .6f, .6f, .5f));
                DrawBox(bl, tr, 2f / GameClass.Screen.x);
            }
        }
示例#4
0
        private void DrawLine(vec2 p1, vec2 p2, float width)
        {
            var  q     = new RectangleQuad();
            vec2 thick = vec(width, width);

            q.SetupVertices(min(p1 - thick, p2 - thick), max(p1 + thick, p2 + thick), vec2.Zero, vec2.Ones);
            q.Draw(GameClass.Graphics);
        }
示例#5
0
        public void DrawArrowCursor()
        {
            vec2 WorldCord = ScreenToWorldCoord(Input.CurMousePos);

            DrawTextureSmooth.Using(camvec, CameraAspect, Assets.Cursor);

            vec2 size = .02f * Assets.Cursor.UnitSize() / CameraZoom;

            RectangleQuad.Draw(GameClass.Graphics, WorldCord + new vec2(size.x, -size.y), size);
        }
示例#6
0
        public static void DrawFullScreen(Texture2D texture)
        {
            float a = 1920f / 1080f;
            var   q = new RectangleQuad();

            q.SetupVertices(new vec2(-a, -1), new vec2(a, 1), vec2.Zero, vec2.Ones);
            q.SetColor(new color(1f, 1f, 1f, 1f));
            DrawTextureSmooth.Using(new vec4(0, 0, 1, 1), ScreenAspect, texture);
            q.Draw(GameClass.Graphics);
        }
示例#7
0
文件: Ui.cs 项目: JordanFisher/WAL
        public void Add(string name, RectangleQuad e)
        {
            e.Texture = Assets.White;
            Elements.Add(name, e);

            if (!name.Contains("[Text]"))
            {
                Order.Add(e);
            }
        }
示例#8
0
        private void BlackOverlay(float s)
        {
            float a = 1920f / 1080f;
            var   q = new RectangleQuad();

            q.SetupVertices(new vec2(-a, -1), new vec2(a, 1), vec2.Zero, vec2.Ones);
            q.SetColor(new color(1f, 1f, 1f, 1f));
            DrawSolid.Using(new vec4(0, 0, 1, 1), ScreenAspect, new color(0f, 0f, 0f, s));
            q.Draw(GameClass.Graphics);
            Render.UnsetDevice();
        }
示例#9
0
        public void DrawGridCell()
        {
            vec2 GridCoord = ScreenToGridCoord(Input.CurMousePos);

            color clr = CanPlaceItem ? DrawTerritoryPlayer.Available : DrawTerritoryPlayer.Unavailable;

            DrawSolid.Using(camvec, CameraAspect, clr);

            vec2 gWorldCord = GridToWorldCood(floor(GridCoord));
            vec2 size       = 1 / DataGroup.GridSize;

            RectangleQuad.Draw(GameClass.Graphics, gWorldCord + new vec2(size.x, -size.y), size);
        }
示例#10
0
文件: Ui.cs 项目: JordanFisher/WAL
        public static void Element(string name)
        {
            if (Ui.ActiveUi.Elements.ContainsKey(name))
            {
                Ui.e = Ui.ActiveUi.Elements[name];
                return;
            }

            var e = new RectangleQuad(vec2.Zero, vec2.Zero, vec2.Zero, vec2.Ones);

            Ui.ActiveUi.Add(name, e);
            Ui.e = e;
        }
示例#11
0
        public void SelectInAreaViaRasterize(vec2 pos, vec2 size, bool Deselect, bool Selecting, float Player, bool EffectSelection, bool Fake = false)
        {
            DataDrawMouse.Using(Assets.SelectCircle_Data, Player, Output: SelectField, Clear: Color.Transparent);

            if (Selecting)
            {
                RectangleQuad.Draw(GraphicsDevice, pos, size);
            }

            if (EffectSelection)
            {
                SelectUnits(Player, Deselect, Fake);
            }
        }
示例#12
0
        public void DrawCircleCursor(bool AfterUi)
        {
            if (AfterUi)
            {
                return;
            }

            vec2 WorldCord = ScreenToWorldCoord(Input.CurMousePos);

            DrawTextureSmooth.Using(camvec, CameraAspect, Assets.SelectCircle);
            RectangleQuad.Draw(GameClass.Graphics, WorldCord, SelectSize);

            DrawTextureSmooth.Using(camvec, CameraAspect, Assets.SelectDot);
            RectangleQuad.Draw(GameClass.Graphics, WorldCord, .0075f * vec2.Ones / CameraZoom);
        }
示例#13
0
        public void DrawVisibleGrid(float scale = 1)
        {
            vec2 center = CameraPos, size = vec(CameraAspect, 1) * scale;

            vec2 uv_center = WorldToGridCood(CameraPos) / GridSize;
            vec2 uv_size   = abs((WorldToGridCood(vec(CameraAspect, 1) / CameraZoom) - WorldToGridCood(vec(0, 0))) / GridSize);

            vec2
                uv_bl = uv_center - uv_size,
                uv_tr = uv_center + uv_size,
                bl    = CameraPos - vec(CameraAspect, 1) / CameraZoom,
                tr    = CameraPos + vec(CameraAspect, 1) / CameraZoom;

            RectangleQuad q = new RectangleQuad(bl, tr, uv_bl, uv_tr);

            q.Draw(GameClass.Graphics);
        }
示例#14
0
        public Marker(World world, vec2 pos, vec2 size, Texture2D texture, float alpha_fade = -1, int frames = 1, float frame_length = .1f, DrawOrder DrawOrder = DrawOrder.AfterTiles, float alpha = 1, vec2 dsize_dt = default(vec2))
        {
            this.world = world;

            this.alpha     = alpha;
            this.dalpha_dt = alpha_fade;

            this.pos      = pos;
            this.size     = size;
            this.dsize_dt = dsize_dt;

            this.frames       = frames;
            this.frame_length = frame_length;

            quad         = new RectangleQuad(pos - size / 2, pos + size / 2, vec2.Zero, vec(1.0f / frames, 1));
            this.texture = texture;

            this.MyDrawOrder = DrawOrder;
        }
示例#15
0
        RectangleQuad SetBuildingQuad(vec2 pos, vec2 size, float type, int player, RectangleQuad quad = null)
        {
            vec2 uv_size = BuildingSpriteSheet.BuildingSize;

            vec2 uv_offset;

            uv_offset.x = player * BuildingSpriteSheet.BuildingDimX;
            uv_offset.y = BuildingSpriteSheet.SubsheetDimY * Float(UnitType.BuildingIndex(type));
            uv_offset  *= BuildingSpriteSheet.SpriteSize;

            if (quad == null)
            {
                quad = new RectangleQuad();
            }

            quad.SetupVertices(pos, pos + 2 * new vec2(size.x, -size.y), new vec2(0, uv_size.y) + uv_offset, new vec2(uv_size.x, 0) + uv_offset);
            quad.Texture = Assets.BuildingTexture_1;

            return(quad);
        }
示例#16
0
        public void SelectAlongLine(vec2 p1, vec2 p2, vec2 size, bool Deselect, bool Selecting, float Player, bool EffectSelection, bool Fake = false)
        {
            DataDrawMouse.Using(Assets.SelectCircle_Data, Player, Output: SelectField, Clear: Color.Transparent);

            if (Selecting)
            {
                vec2 shift = CellSpacing.FlipY();

                for (int i = 0; i <= 10; i++)
                {
                    float t   = i / 10.0f;
                    var   pos = t * p2 + (1 - t) * p1;
                    RectangleQuad.Draw(GraphicsDevice, pos - shift, size);
                }
            }

            if (EffectSelection)
            {
                SelectUnits(Player, Deselect, Fake);
            }
        }
示例#17
0
        void DrawAvailabilityGrid()
        {
            vec2 GridCoord = ScreenToGridCoord(Input.CurMousePos) - new vec2(1, 1);

            int _w = 3, _h = 3;

            color clr = color.TransparentBlack;

            CanPlaceItem = true;
            for (int i = 0; i < _w; i++)
            {
                for (int j = 0; j < _h; j++)
                {
                    clr = CanPlace[i + j * _h] ? DrawTerritoryPlayer.Available : DrawTerritoryPlayer.Unavailable;
                    DrawSolid.Using(camvec, CameraAspect, clr);

                    vec2 gWorldCord = GridToWorldCood(new vec2((float)Math.Floor(GridCoord.x + i), (float)Math.Floor(GridCoord.y + j)));
                    vec2 size       = 1 / DataGroup.GridSize;
                    RectangleQuad.Draw(GameClass.Graphics, gWorldCord + new vec2(size.x, -size.y), size);
                }
            }
        }
示例#18
0
文件: Ui.cs 项目: JordanFisher/WAL
 static void DrawElement(RectangleQuad e)
 {
     DrawTextureSmooth.Using(vec(0, 0, 1, 1), GameClass.ScreenAspect, e.Texture);
     e.Draw(GameClass.Graphics);
 }
示例#19
0
        void DrawDragonLordMarker(int player, bool After = false)
        {
            if (!TrackDragonLord)
            {
                return;
            }

            vec2 cur  = CurDragonLordPos[player];
            vec2 prev = PrevDragonLordPos[player];

            if (cur.x < 1 && cur.y < 1)
            {
                return;
            }

            var q = new RectangleQuad();
            var p = cur * PercentSimStepComplete + prev * (1 - PercentSimStepComplete);

            p = GridToWorldCood(p);
            var   s     = vec(.01f, .01f) + .0001f * vec2.Ones * (float)Math.Cos(GameClass.Game.DrawCount * .08f);
            float alpha = 1;

            bool selected = DataGroup.UnitSummary[Int(UnitType.DragonLord) - 1];

            if (!After)
            {
                alpha = selected ? .11f : .05f;
                color clr = selected ? new color(1f, 1f, 1f, alpha) : new color(.8f, .8f, .8f, alpha);

                q.SetupVertices(p - s * 3, p + s * 3, vec(0, 0), vec(1, 1));
                q.SetColor(clr);

                DrawTexture.Using(camvec, CameraAspect, Assets.DragonLord_Marker);
                q.Draw(GameClass.Game.GraphicsDevice);

                q.SetupVertices(p - s * .5f, p + s * .5f, vec(0, 0), vec(1, 1));
                q.SetColor(clr);

                DrawTexture.Using(camvec, CameraAspect, Assets.DragonLord_Marker);
                q.Draw(GameClass.Game.GraphicsDevice);
            }

            if (After)
            {
                float z = 14;
                if (CameraZoom <= z / 4f)
                {
                    s    *= 7;
                    alpha = CoreMath.LerpRestrict(z / 4, 0, z / 8, 1, CameraZoom);
                }
                else
                {
                    return;
                }

                q.SetupVertices(p - s, p + s, vec(0, 0), vec(1, 1));
                q.SetColor(new color(.8f, .8f, .8f, 1f * alpha));

                var texture = Assets.AoE_DragonLord[player];
                if (player == MyPlayerNumber && selected)
                {
                    texture = Assets.AoE_DragonLord_Selected;
                }

                DrawTexture.Using(camvec, CameraAspect, texture);
                q.Draw(GameClass.Game.GraphicsDevice);
            }
        }
示例#20
0
 public static bool Contains(this RectangleQuad quad, vec2 pos)
 {
     return(pos > quad.Bl && pos < quad.Tr);
 }
示例#21
0
    //Build the mesh for the base
    private static Mesh CreateBoardBaseMesh(int width, int height, float unitSize, List <int>[] allPorts)
    {
        //Create the mesh
        Mesh           mesh      = new Mesh();
        List <Vector3> vertices  = new List <Vector3>();
        List <int>     triangles = new List <int>();

        //Create base
        var h    = height * unitSize;
        var w    = width * unitSize;
        var quad = new RectangleQuad(0, 0, w, h);

        quad.Build(vertices, triangles);


        #region  Create Borders

        float offset = 0.0f;

        //horizontal
        var topStrip    = new Strip();
        var bottomStrip = new Strip();

        var topPorts    = allPorts[1];
        var bottomPorts = allPorts[3];

        var edgei = new Edge(0, h, 0, h + BordersWidth);
        topStrip.AddEdge(edgei);

        edgei = new Edge(0, -BordersWidth, 0, 0);
        bottomStrip.AddEdge(edgei);

        for (var i = 0; i < width; i++)
        {
            //top
            offset = (topPorts.Exists(u => u == i))? BordersOffset : 0.0f;

            var edge0 = new Edge(unitSize * i + 0.1f, h, unitSize * i + 0.1f, h + BordersWidth + offset);
            var edge1 = new Edge(unitSize * i + 1.9f, h, unitSize * i + 1.9f, h + BordersWidth + offset);
            topStrip.AddEdge(edge0);
            topStrip.AddEdge(edge1);

            //bottom
            offset = (bottomPorts.Exists(u => u == i))? BordersOffset : 0.0f;

            edge0 = new Edge(unitSize * i + 0.1f, -BordersWidth - offset, unitSize * i + 0.1f, 0);
            edge1 = new Edge(unitSize * i + 1.9f, -BordersWidth - offset, unitSize * i + 1.9f, 0);
            bottomStrip.AddEdge(edge0);
            bottomStrip.AddEdge(edge1);
        }

        edgei = new Edge(unitSize * width, h, unitSize * width, h + BordersWidth);
        topStrip.AddEdge(edgei);

        edgei = new Edge(unitSize * width, -BordersWidth, unitSize * width, 0);
        bottomStrip.AddEdge(edgei);

        var top    = topStrip.Build(vertices, triangles);
        var bottom = bottomStrip.Build(vertices, triangles);


        //vertical
        var leftStrip  = new Strip();
        var rightStrip = new Strip();

        var leftPorts  = allPorts[0];
        var rightPorts = allPorts[2];

        edgei = new Edge(0, 0, -BordersWidth, 0);
        leftStrip.AddEdge(edgei);

        edgei = new Edge(w + BordersWidth, 0, w, 0);
        rightStrip.AddEdge(edgei);

        for (var i = 0; i < height; i++)
        {
            //left
            offset = (leftPorts.Exists(u => u == i)) ? BordersOffset : 0.0f;

            var edge0 = new Edge(0, unitSize * i + 0.1f, -BordersWidth - offset, unitSize * i + 0.1f);
            var edge1 = new Edge(0, unitSize * i + 1.9f, -BordersWidth - offset, unitSize * i + 1.9f);
            leftStrip.AddEdge(edge0);
            leftStrip.AddEdge(edge1);

            //right
            offset = (rightPorts.Exists(u => u == i)) ? BordersOffset : 0.0f;

            edge0 = new Edge(w + BordersWidth + offset, unitSize * i + 0.1f, w, unitSize * i + 0.1f);
            edge1 = new Edge(w + BordersWidth + offset, unitSize * i + 1.9f, w, unitSize * i + 1.9f);
            rightStrip.AddEdge(edge0);
            rightStrip.AddEdge(edge1);
        }

        edgei = new Edge(0, unitSize * height, -BordersWidth, unitSize * height);
        leftStrip.AddEdge(edgei);

        edgei = new Edge(w + BordersWidth, unitSize * height, w, unitSize * height);
        rightStrip.AddEdge(edgei);

        var left  = leftStrip.Build(vertices, triangles);
        var right = rightStrip.Build(vertices, triangles);

        #endregion

        #region Create Corners

        //left-top corner
        var v1 = left[1] - 1;
        var v2 = left[1];
        var v3 = top[0] + 1;
        triangles.Add(v1);
        triangles.Add(v2);
        triangles.Add(v3);

        //top-right corner
        v1 = top[1] - 1;
        v2 = top[1];
        v3 = right[1] - 1;
        triangles.Add(v1);
        triangles.Add(v2);
        triangles.Add(v3);

        //right-bottom corner
        v1 = right[0];
        v2 = bottom[1] - 1;
        v3 = right[0] + 1;
        triangles.Add(v1);
        triangles.Add(v2);
        triangles.Add(v3);

        //bottom-left corner
        v1 = bottom[0];
        v2 = left[0] + 1;
        v3 = bottom[0] + 1;
        triangles.Add(v1);
        triangles.Add(v2);
        triangles.Add(v3);

        #endregion

        #region Extrude

        //find outer edges
        var outerEdges = new List <Vector2Int>();

        //left
        for (var i = left[1]; i >= left[0]; i--)
        {
            if (i % 2 == 0)
            {
                continue;
            }
            if (i - 2 < left[0])
            {
                break;
            }
            outerEdges.Add(new Vector2Int(i, i - 2));
        }

        //top
        for (var i = top[1]; i >= top[0]; i--)
        {
            if (i % 2 == 0)
            {
                continue;
            }
            if (i - 2 < top[0])
            {
                break;
            }
            outerEdges.Add(new Vector2Int(i, i - 2));
        }

        //right
        for (var i = right[0]; i <= right[1]; i++)
        {
            if (i % 2 != 0)
            {
                continue;
            }
            if (i + 2 > right[1])
            {
                break;
            }
            outerEdges.Add(new Vector2Int(i, i + 2));
        }

        //bottom
        for (var i = bottom[0]; i <= bottom[1]; i++)
        {
            if (i % 2 != 0)
            {
                continue;
            }
            if (i + 2 > bottom[1])
            {
                break;
            }
            outerEdges.Add(new Vector2Int(i, i + 2));
        }

        //corners
        outerEdges.Add(new Vector2Int(top[0] + 1, left[1]));
        outerEdges.Add(new Vector2Int(right[1] - 1, top[1]));
        outerEdges.Add(new Vector2Int(bottom[1] - 1, right[0]));
        outerEdges.Add(new Vector2Int(left[0] + 1, bottom[0]));

        //extrude
        for (var i = 0; i < outerEdges.Count; i++)
        {
            var n = vertices.Count;

            var edge = outerEdges[i];
            var a0   = edge.x;
            var a1   = edge.y;

            //duplicate edge
            var v = vertices[edge.x];
            v.y -= BoardThickness;
            vertices.Add(v);
            var a2 = n;

            v    = vertices[edge.y];
            v.y -= BoardThickness;
            vertices.Add(v);
            var a3 = n + 1;

            triangles.Add(a0);
            triangles.Add(a1);
            triangles.Add(a2);
            triangles.Add(a2);
            triangles.Add(a1);
            triangles.Add(a3);
        }

        #endregion

        //set mesh properties
        mesh.vertices  = vertices.ToArray();
        mesh.triangles = triangles.ToArray();
        mesh.RecalculateNormals();

        return(mesh);
    }