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