Example #1
0
        private void DrawCellBanner(CompleteVCell cell, HashSet <UINeighBanner> toDraw, UIContainer bannerContainer, float f)
        {
            var screenCtr = City.transformSpr4(new Vector3(cell.Center.X, City.InterpElevationAt(cell.Center) + 5f, cell.Center.Y));

            if (!float.IsNaN(screenCtr.X) && screenCtr.Z > 0)
            {
                var banner = Banners.FirstOrDefault(x => x.DataID == cell.Ind);
                if (banner != null && banner.Parent == null)
                {
                    Banners.Remove(banner);
                    banner = null;
                }

                if (banner == null)
                {
                    var nhood = Data[cell.Ind];
                    banner = new UINeighBanner()
                    {
                        DataID      = cell.Ind,
                        Caption     = nhood.Name,
                        BannerColor = (nhood.Color ?? Color.White)
                    };
                    Banners.Add(banner);
                    bannerContainer.Add(banner);
                }

                var mulFactor = 120f;
                if (City.Camera is CityCamera2D)
                {
                    mulFactor = 0.5f;
                }
                banner.ScaleX   = banner.ScaleY = Math.Min(2.75f, (mulFactor / screenCtr.W));
                banner.Position = new Vector2(screenCtr.X, screenCtr.Y);
                banner.Opacity  = f;
                banner.Z        = -screenCtr.Z;
                toDraw.Add(banner);
            }
        }
Example #2
0
        private void FillCell(GraphicsDevice gd, Effect VertexShader, Effect PixelShader, CityContent content, CompleteVCell cell, Color color)
        {
            VertexShader.CurrentTechnique.Passes[2].Apply();

            var frontDS = FrontDepthStencil;

            var bs = NoColor;

            gd.RasterizerState   = RasterizerState.CullNone;
            gd.BlendState        = bs;
            gd.DepthStencilState = frontDS;

            PixelShader.Parameters["ObjTex"].SetValue(TextureGenerator.GetPxWhite(gd));
            PixelShader.CurrentTechnique.Passes[0].Apply();

            gd.SetVertexBuffer(cell.Vertices);
            gd.Indices = cell.Indices;

            gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, cell.Indices.IndexCount / 3);

            var so = StencilCompare;

            gd.DepthStencilState = so;
            gd.BlendState        = BlendState.AlphaBlend;

            var screen = UIScreen.Current;
            var aspect = screen.ScreenWidth / (float)(screen.ScreenHeight);
            var dat    = new DGRP3DVert[]
            {
                new DGRP3DVert(new Vector3(-1, -1, 0f), Vector3.Zero, new Vector2(0, 0)),
                new DGRP3DVert(new Vector3(1, -1, 0f), Vector3.Zero, new Vector2(20 * aspect, 0)),
                new DGRP3DVert(new Vector3(-1, 1, 0f), Vector3.Zero, new Vector2(0, 20)),
                new DGRP3DVert(new Vector3(1, 1, 0f), Vector3.Zero, new Vector2(20 * aspect, 20)),
            };

            PixelShader.Parameters["ObjTex"].SetValue(TextureGenerator.GetPxWhite(gd));// content.NeighTextures[i%3]);
            PixelShader.Parameters["HighlightColor"].SetValue(color.ToVector4());
            var bM = VertexShader.Parameters["BaseMatrix"].GetValueMatrix();

            VertexShader.Parameters["BaseMatrix"].SetValue(Matrix.CreateOrthographic(2, 2, -1, 1));
            VertexShader.CurrentTechnique.Passes[2].Apply();
            PixelShader.CurrentTechnique.Passes[0].Apply();
            gd.SamplerStates[0] = SamplerState.LinearWrap;
            gd.DrawUserPrimitives(PrimitiveType.TriangleStrip, dat, 0, 2);
            VertexShader.Parameters["BaseMatrix"].SetValue(bM);
        }
Example #3
0
        private void EdgeCell(GraphicsDevice gd, Effect VertexShader, Effect PixelShader, CityContent content, CompleteVCell cell, Color color)
        {
            VertexShader.CurrentTechnique.Passes[2].Apply();

            gd.RasterizerState   = RasterizerState.CullNone;
            gd.BlendState        = BlendState.Additive;
            gd.DepthStencilState = DepthStencilState.DepthRead;

            PixelShader.Parameters["HighlightColor"].SetValue(color.ToVector4());
            PixelShader.Parameters["ObjTex"].SetValue(NhoodGrad);
            PixelShader.CurrentTechnique.Passes[0].Apply();

            gd.SetVertexBuffer(cell.Vertices);
            gd.Indices = cell.Indices;

            gd.SamplerStates[0] = SamplerState.LinearClamp;

            gd.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, cell.Indices.IndexCount / 3);
        }