public void DrawRayHighlight(Camera camera) { if (!camera.Eye.HasValue) { return; } Ray3 ray = default(Ray3); float num; if (m_highlightRaycastResult is TerrainRaycastResult) { TerrainRaycastResult obj = (TerrainRaycastResult)m_highlightRaycastResult; ray = obj.Ray; num = MathUtils.Min(obj.Distance, 2f); } else if (m_highlightRaycastResult is BodyRaycastResult) { BodyRaycastResult obj2 = (BodyRaycastResult)m_highlightRaycastResult; ray = obj2.Ray; num = MathUtils.Min(obj2.Distance, 2f); } else if (m_highlightRaycastResult is MovingBlocksRaycastResult) { MovingBlocksRaycastResult obj3 = (MovingBlocksRaycastResult)m_highlightRaycastResult; ray = obj3.Ray; num = MathUtils.Min(obj3.Distance, 2f); } else { if (!(m_highlightRaycastResult is Ray3)) { return; } ray = (Ray3)m_highlightRaycastResult; num = 2f; } Color color = Color.White * 0.5f; Color color2 = Color.Lerp(color, Color.Transparent, MathUtils.Saturate(num / 2f)); FlatBatch3D flatBatch3D = m_primitivesRenderer3D.FlatBatch(); flatBatch3D.QueueLine(ray.Position, ray.Position + ray.Direction * num, color, color2); flatBatch3D.Flush(camera.ViewProjectionMatrix); }
public void DrawLightning(Camera camera) { if (!m_lightningStrikePosition.HasValue) { return; } FlatBatch3D flatBatch3D = m_primitivesRenderer3d.FlatBatch(0, DepthStencilState.DepthRead, null, BlendState.Additive); Vector3 value = m_lightningStrikePosition.Value; Vector3 unitY = Vector3.UnitY; Vector3 v = Vector3.Normalize(Vector3.Cross(camera.ViewDirection, unitY)); Viewport viewport = Display.Viewport; float num = Vector4.Transform(new Vector4(value, 1f), camera.ViewProjectionMatrix).W * 2f / ((float)viewport.Width * camera.ProjectionMatrix.M11); for (int i = 0; i < (int)(m_lightningStrikeBrightness * 30f); i++) { float s = m_random.NormalFloat(0f, 1f * num); float s2 = m_random.NormalFloat(0f, 1f * num); Vector3 v2 = s * v + s2 * unitY; float num2 = 260f; while (num2 > value.Y) { uint num3 = MathUtils.Hash((uint)(m_lightningStrikePosition.Value.X + 100f * m_lightningStrikePosition.Value.Z + 200f * num2)); float num4 = MathUtils.Lerp(4f, 10f, (float)(double)(num3 & 0xFF) / 255f); float s3 = ((num3 & 1) == 0) ? 1 : (-1); float s4 = MathUtils.Lerp(0.05f, 0.2f, (float)(double)((num3 >> 8) & 0xFF) / 255f); float num5 = num2; float num6 = num5 - num4 * MathUtils.Lerp(0.45f, 0.55f, (float)(double)((num3 >> 16) & 0xFF) / 255f); float num7 = num5 - num4 * MathUtils.Lerp(0.45f, 0.55f, (float)(double)((num3 >> 24) & 0xFF) / 255f); float num8 = num5 - num4; Vector3 p = new Vector3(value.X, num5, value.Z) + v2; Vector3 vector = new Vector3(value.X, num6, value.Z) + v2 - num4 * v * s3 * s4; Vector3 vector2 = new Vector3(value.X, num7, value.Z) + v2 + num4 * v * s3 * s4; Vector3 p2 = new Vector3(value.X, num8, value.Z) + v2; Color color = Color.White * 0.2f * MathUtils.Saturate((260f - num5) * 0.2f); Color color2 = Color.White * 0.2f * MathUtils.Saturate((260f - num6) * 0.2f); Color color3 = Color.White * 0.2f * MathUtils.Saturate((260f - num7) * 0.2f); Color color4 = Color.White * 0.2f * MathUtils.Saturate((260f - num8) * 0.2f); flatBatch3D.QueueLine(p, vector, color, color2); flatBatch3D.QueueLine(vector, vector2, color2, color3); flatBatch3D.QueueLine(vector2, p2, color3, color4); num2 -= num4; } } float num9 = MathUtils.Lerp(0.3f, 0.75f, 0.5f * (float)MathUtils.Sin(MathUtils.Remainder(1.0 * m_subsystemTime.GameTime, 6.2831854820251465)) + 0.5f); m_lightningStrikeBrightness -= m_subsystemTime.GameTimeDelta / num9; if (m_lightningStrikeBrightness <= 0f) { m_lightningStrikePosition = null; m_lightningStrikeBrightness = 0f; } }
public void Draw(Camera camera, int drawOrder) { this.cam = camera; if (Point1.HasValue && Point2.HasValue && WorldEditMenu.IsChecked) // Выделение зоны между точками 1 и 2 { int startX = Math.Min(Point1.Value.CellFace.Point.X, Point2.Value.CellFace.Point.X); int endX = Math.Max(Point1.Value.CellFace.Point.X, Point2.Value.CellFace.Point.X); int startY = Math.Min(Point1.Value.CellFace.Point.Y, Point2.Value.CellFace.Point.Y); int endY = Math.Max(Point1.Value.CellFace.Point.Y, Point2.Value.CellFace.Point.Y); int startZ = Math.Min(Point1.Value.CellFace.Point.Z, Point2.Value.CellFace.Point.Z); int endZ = Math.Max(Point1.Value.CellFace.Point.Z, Point2.Value.CellFace.Point.Z); PrimitivesRenderer3D PrimitivesRenderer3D = new PrimitivesRenderer3D(); Vector3 pointStart = new Vector3(startX, startY, startZ); Vector3 pointEnd = new Vector3(endX + 1, endY + 1, endZ + 1); BoundingBox boundingBox = new BoundingBox(pointStart, pointEnd); PrimitivesRenderer3D.FlatBatch(-1, DepthStencilState.None, (RasterizerState)null, (BlendState)null).QueueBoundingBox(boundingBox, Color.Green); PrimitivesRenderer3D.Flush(cam.ViewProjectionMatrix, true); } if (Point3.HasValue && WorldEditMenu.IsChecked) // Выделение зоны вставки { int startX = Math.Min(Point1.Value.CellFace.Point.X, Point2.Value.CellFace.Point.X); int endX = Math.Max(Point1.Value.CellFace.Point.X, Point2.Value.CellFace.Point.X); int startY = Math.Min(Point1.Value.CellFace.Point.Y, Point2.Value.CellFace.Point.Y); int endY = Math.Max(Point1.Value.CellFace.Point.Y, Point2.Value.CellFace.Point.Y); int startZ = Math.Min(Point1.Value.CellFace.Point.Z, Point2.Value.CellFace.Point.Z); int endZ = Math.Max(Point1.Value.CellFace.Point.Z, Point2.Value.CellFace.Point.Z); startX += Point3.Value.CellFace.Point.X - Point1.Value.CellFace.Point.X; startY += Point3.Value.CellFace.Point.Y - Point1.Value.CellFace.Point.Y; startZ += Point3.Value.CellFace.Point.Z - Point1.Value.CellFace.Point.Z; endX += Point3.Value.CellFace.Point.X - Point1.Value.CellFace.Point.X; endY += Point3.Value.CellFace.Point.Y - Point1.Value.CellFace.Point.Y; endZ += Point3.Value.CellFace.Point.Z - Point1.Value.CellFace.Point.Z; PrimitivesRenderer3D primitivesRenderer3D = new PrimitivesRenderer3D(); Vector3 pointStart = new Vector3(startX, startY, startZ); Vector3 pointEnd = new Vector3(endX + 1, endY + 1, endZ + 1); BoundingBox boundingBox = new BoundingBox(pointStart, pointEnd); primitivesRenderer3D.FlatBatch(-1, DepthStencilState.None, (RasterizerState)null, (BlendState)null).QueueBoundingBox(boundingBox, Color.Red); primitivesRenderer3D.Flush(cam.ViewProjectionMatrix, true); } PrimitivesRenderer3D.Flush(camera.ViewProjectionMatrix, true, int.MaxValue); PrimitivesRenderer2D.Flush(true); }
internal static void WorldEditModApi() { if (!(ScreensManager.GetScreenName(ScreensManager.CurrentScreen) == "Game")) // Выходим, если мы не в игре { return; } // Показазывеем контейнер с кнопками, если активирована кнопка WorldEditMenu ScreensManager.CurrentScreen.ScreenWidget.FindWidget<StackPanelWidget>("WorldEditMenuContainerTop", true).IsVisible = ScreensManager.CurrentScreen.ScreenWidget.FindWidget<BitmapButtonWidget>("WorldEditMenu", true).IsChecked; ScreensManager.CurrentScreen.ScreenWidget.FindWidget<StackPanelWidget>("WorldEditMenuContainerBottom", true).IsVisible = ScreensManager.CurrentScreen.ScreenWidget.FindWidget<BitmapButtonWidget>("WorldEditMenu", true).IsChecked; // Смена режима управления if (ScreensManager.CurrentScreen.ScreenWidget.FindWidget<BitmapButtonWidget>("WorldEditMenu", true).IsTapped) { if (ScreensManager.CurrentScreen.ScreenWidget.FindWidget<BitmapButtonWidget>("WorldEditMenu", true).IsChecked) { OldLookControlMode = (int) SettingsManager.LookControlMode; SettingsManager.LookControlMode = LookControlMode.SplitTouch; } else { SettingsManager.LookControlMode = (LookControlMode) OldLookControlMode; } } if ((Engine.Input.Keyboard.IsKeyDown(Engine.Input.Key.F1)) || (ScreensManager.CurrentScreen.ScreenWidget.FindWidget<BitmapButtonWidget>("F1", true).IsTapped)) // Выделение 1 точки { ComponentMiner componentMiner = Subsystems.Player.ComponentPlayer.ComponentMiner; Point1 = componentMiner.PickTerrainForDigging(Subsystems.Drawing.ViewPosition, Subsystems.Drawing.ViewDirection); if (Point1.HasValue) { SCModApi.Gui.DisplayMessage("Set position 1 on: " + Point1.Value.CellFace.X + ", " + Point1.Value.CellFace.Y + ", " + Point1.Value.CellFace.Z, false); SelectedBlock = World.GetBlock(Point1.Value.CellFace.X, Point1.Value.CellFace.Y, Point1.Value.CellFace.Z); return; } } if ((Engine.Input.Keyboard.IsKeyDown(Engine.Input.Key.F2)) || (ScreensManager.CurrentScreen.ScreenWidget.FindWidget<BitmapButtonWidget>("F2", true).IsTapped)) // Выделение 2 точки { ComponentMiner componentMiner = Subsystems.Player.ComponentPlayer.ComponentMiner; Point2 = componentMiner.PickTerrainForDigging(Subsystems.Drawing.ViewPosition, Subsystems.Drawing.ViewDirection); if (Point2.HasValue) { SCModApi.Gui.DisplayMessage("Set position 2 on: " + Point1.Value.CellFace.X + ", " + Point1.Value.CellFace.Y + ", " + Point1.Value.CellFace.Z, false); ReplaceableBlock = Subsystems.Terrain.TerrainData.GetCellValue(Point2.Value.CellFace.X, Point2.Value.CellFace.Y, Point2.Value.CellFace.Z); return; } } if ((Engine.Input.Keyboard.IsKeyDown(Engine.Input.Key.F3)) || (ScreensManager.CurrentScreen.ScreenWidget.FindWidget<BitmapButtonWidget>("F3", true).IsTapped)) // Выделение 3 точки { ComponentMiner componentMiner = Subsystems.Player.ComponentPlayer.ComponentMiner; Point3 = componentMiner.PickTerrainForDigging(Subsystems.Drawing.ViewPosition, Subsystems.Drawing.ViewDirection); if (Point3.HasValue) { SCModApi.Gui.DisplayMessage("Set position 3 on: " + Point1.Value.CellFace.X + ", " + Point1.Value.CellFace.Y + ", " + Point1.Value.CellFace.Z, false); return; } } if (Point1.HasValue && Point2.HasValue && ScreensManager.CurrentScreen.ScreenWidget.FindWidget<BitmapButtonWidget>("WorldEditMenu", true).IsChecked) // Выделение зоны между точками 1 и 2 { int startX = Math.Min(Point1.Value.CellFace.Point.X, Point2.Value.CellFace.Point.X); int endX = Math.Max(Point1.Value.CellFace.Point.X, Point2.Value.CellFace.Point.X); int startY = Math.Min(Point1.Value.CellFace.Point.Y, Point2.Value.CellFace.Point.Y); int endY = Math.Max(Point1.Value.CellFace.Point.Y, Point2.Value.CellFace.Point.Y); int startZ = Math.Min(Point1.Value.CellFace.Point.Z, Point2.Value.CellFace.Point.Z); int endZ = Math.Max(Point1.Value.CellFace.Point.Z, Point2.Value.CellFace.Point.Z); PrimitivesRenderer3D PrimitivesRenderer3D = new PrimitivesRenderer3D(); Vector3 pointStart = new Vector3(startX, startY, startZ); Vector3 pointEnd = new Vector3(endX + 1, endY + 1, endZ + 1); BoundingBox boundingBox = new BoundingBox(pointStart, pointEnd); PrimitivesRenderer3D.FlatBatch(-1, DepthStencilState.None, (RasterizerState)null, (BlendState)null).QueueBoundingBox(boundingBox, Color.Green); PrimitivesRenderer3D.Flush(Subsystems.Drawing.ViewProjectionMatrix, true); } if (Point3.HasValue && ScreensManager.CurrentScreen.ScreenWidget.FindWidget<BitmapButtonWidget>("WorldEditMenu", true).IsChecked) // Выделение зоны вставки { int startX = Math.Min(Point1.Value.CellFace.Point.X, Point2.Value.CellFace.Point.X); int endX = Math.Max(Point1.Value.CellFace.Point.X, Point2.Value.CellFace.Point.X); int startY = Math.Min(Point1.Value.CellFace.Point.Y, Point2.Value.CellFace.Point.Y); int endY = Math.Max(Point1.Value.CellFace.Point.Y, Point2.Value.CellFace.Point.Y); int startZ = Math.Min(Point1.Value.CellFace.Point.Z, Point2.Value.CellFace.Point.Z); int endZ = Math.Max(Point1.Value.CellFace.Point.Z, Point2.Value.CellFace.Point.Z); startX += Point3.Value.CellFace.Point.X - Point1.Value.CellFace.Point.X; startY += Point3.Value.CellFace.Point.Y - Point1.Value.CellFace.Point.Y; startZ += Point3.Value.CellFace.Point.Z - Point1.Value.CellFace.Point.Z; endX += Point3.Value.CellFace.Point.X - Point1.Value.CellFace.Point.X; endY += Point3.Value.CellFace.Point.Y - Point1.Value.CellFace.Point.Y; endZ += Point3.Value.CellFace.Point.Z - Point1.Value.CellFace.Point.Z; PrimitivesRenderer3D primitivesRenderer3D = new PrimitivesRenderer3D(); Vector3 pointStart = new Vector3(startX, startY, startZ); Vector3 pointEnd = new Vector3(endX + 1, endY + 1, endZ + 1); BoundingBox boundingBox = new BoundingBox(pointStart, pointEnd); primitivesRenderer3D.FlatBatch(-1, DepthStencilState.None, (RasterizerState)null, (BlendState)null).QueueBoundingBox(boundingBox, Color.Red); primitivesRenderer3D.Flush(Subsystems.Drawing.ViewProjectionMatrix, true); } if ((Engine.Input.Keyboard.IsKeyDownOnce(Engine.Input.Key.F5)) || (ScreensManager.CurrentScreen.ScreenWidget.FindWidget<BitmapButtonWidget>("F5", true).IsTapped)) // Копирование выделенной зоны { if (Point1 == null) { Gui.DisplayMessage("You have not selected point 1", false); } else if (Point2 == null) { Gui.DisplayMessage("You have not selected point 2", false); } else if (Point3 == null) { Gui.DisplayMessage("You have not selected point 3", false); } else { int startX = Math.Min(Point1.Value.CellFace.Point.X, Point2.Value.CellFace.Point.X); int endX = Math.Max(Point1.Value.CellFace.Point.X, Point2.Value.CellFace.Point.X); int startY = Math.Min(Point1.Value.CellFace.Point.Y, Point2.Value.CellFace.Point.Y); int endY = Math.Max(Point1.Value.CellFace.Point.Y, Point2.Value.CellFace.Point.Y); int startZ = Math.Min(Point1.Value.CellFace.Point.Z, Point2.Value.CellFace.Point.Z); int endZ = Math.Max(Point1.Value.CellFace.Point.Z, Point2.Value.CellFace.Point.Z); for (int y = 0; y <= endY - startY; y++) { for (int z = 0; z <= endZ - startZ; z++) { for (int x = 0; x <= endX - startX; x++) { int targetX, targetY, targetZ; int PlaceX, PlaceY, PlaceZ; if (Point1.Value.CellFace.Point.X > Point2.Value.CellFace.Point.X) { targetX = Point1.Value.CellFace.Point.X - x; PlaceX = Point3.Value.CellFace.Point.X - x; } else { targetX = Point1.Value.CellFace.Point.X + x; PlaceX = Point3.Value.CellFace.Point.X + x; } if (Point1.Value.CellFace.Point.Y > Point2.Value.CellFace.Point.Y) { targetY = Point1.Value.CellFace.Point.Y - y; PlaceY = Point3.Value.CellFace.Point.Y - y; } else { targetY = Point1.Value.CellFace.Point.Y + y; PlaceY = Point3.Value.CellFace.Point.Y + y; } if (Point1.Value.CellFace.Point.Z > Point2.Value.CellFace.Point.Z) { targetZ = Point1.Value.CellFace.Point.Z - z; PlaceZ = Point3.Value.CellFace.Point.Z - z; } else { targetZ = Point1.Value.CellFace.Point.Z + z; PlaceZ = Point3.Value.CellFace.Point.Z + z; } int block = World.GetBlock(targetX, targetY, targetZ); // 15360 - Air if (block != 15360) World.SetBlock(PlaceX, PlaceY, PlaceZ, block); } } } } return; } if ((Engine.Input.Keyboard.IsKeyDownOnce(Engine.Input.Key.F6)) || (ScreensManager.CurrentScreen.ScreenWidget.FindWidget<BitmapButtonWidget>("F6", true).IsTapped)) // Заполнение зоны { if (Point1 == null) { Gui.DisplayMessage("You have not selected point 1", false); } else if (Point2 == null) { Gui.DisplayMessage("You have not selected point 2", false); } else { int startX = Math.Min(Point1.Value.CellFace.Point.X, Point2.Value.CellFace.Point.X); int endX = Math.Max(Point1.Value.CellFace.Point.X, Point2.Value.CellFace.Point.X); int startY = Math.Min(Point1.Value.CellFace.Point.Y, Point2.Value.CellFace.Point.Y); int endY = Math.Max(Point1.Value.CellFace.Point.Y, Point2.Value.CellFace.Point.Y); int startZ = Math.Min(Point1.Value.CellFace.Point.Z, Point2.Value.CellFace.Point.Z); int endZ = Math.Max(Point1.Value.CellFace.Point.Z, Point2.Value.CellFace.Point.Z); for (int x = startX; x <= endX; x++) { for (int y = startY; y <= endY; y++) { for (int z = startZ; z <= endZ; z++) { World.SetBlock(x, y, z, SelectedBlock); } } } } return; } if ((Engine.Input.Keyboard.IsKeyDownOnce(Engine.Input.Key.F7)) || (ScreensManager.CurrentScreen.ScreenWidget.FindWidget<BitmapButtonWidget>("F7", true).IsTapped)) // Замена зоны { if (Point1 == null) { Gui.DisplayMessage("You have not selected point 1", false); } else if (Point2 == null) { Gui.DisplayMessage("You have not selected point 2", false); } else { int startX = Math.Min(Point1.Value.CellFace.Point.X, Point2.Value.CellFace.Point.X); int endX = Math.Max(Point1.Value.CellFace.Point.X, Point2.Value.CellFace.Point.X); int startY = Math.Min(Point1.Value.CellFace.Point.Y, Point2.Value.CellFace.Point.Y); int endY = Math.Max(Point1.Value.CellFace.Point.Y, Point2.Value.CellFace.Point.Y); int startZ = Math.Min(Point1.Value.CellFace.Point.Z, Point2.Value.CellFace.Point.Z); int endZ = Math.Max(Point1.Value.CellFace.Point.Z, Point2.Value.CellFace.Point.Z); for (int x = startX; x <= endX; x++) { for (int y = startY; y <= endY; y++) { for (int z = startZ; z <= endZ; z++) { if (World.GetBlock(x, y, z) == ReplaceableBlock) World.SetBlock(x, y, z, SelectedBlock); } } } } return; } if ((Engine.Input.Keyboard.IsKeyDownOnce(Engine.Input.Key.F8)) || (ScreensManager.CurrentScreen.ScreenWidget.FindWidget<BitmapButtonWidget>("F8", true).IsTapped)) // Очистка зоны { if (Point1 == null) { Gui.DisplayMessage("You have not selected point 1", false); } else if (Point2 == null) { Gui.DisplayMessage("You have not selected point 2", false); } else { int startX = Math.Min(Point1.Value.CellFace.Point.X, Point2.Value.CellFace.Point.X); int endX = Math.Max(Point1.Value.CellFace.Point.X, Point2.Value.CellFace.Point.X); int startY = Math.Min(Point1.Value.CellFace.Point.Y, Point2.Value.CellFace.Point.Y); int endY = Math.Max(Point1.Value.CellFace.Point.Y, Point2.Value.CellFace.Point.Y); int startZ = Math.Min(Point1.Value.CellFace.Point.Z, Point2.Value.CellFace.Point.Z); int endZ = Math.Max(Point1.Value.CellFace.Point.Z, Point2.Value.CellFace.Point.Z); for (int x = startX; x <= endX; x++) { for (int y = startY; y <= endY; y++) { for (int z = startZ; z <= endZ; z++) { World.SetBlock(x, y, z, 0); } } } } return; } if ((Engine.Input.Keyboard.IsKeyDownOnce(Engine.Input.Key.F9)) || (ScreensManager.CurrentScreen.ScreenWidget.FindWidget<BitmapButtonWidget>("F9", true).IsTapped)) // Копирование зоны в память { if (Point1 == null) { Gui.DisplayMessage("You have not selected point 1", false); } else if (Point2 == null) { Gui.DisplayMessage("You have not selected point 2", false); } else { int startX = Math.Min(Point1.Value.CellFace.Point.X, Point2.Value.CellFace.Point.X); int endX = Math.Max(Point1.Value.CellFace.Point.X, Point2.Value.CellFace.Point.X); int startY = Math.Min(Point1.Value.CellFace.Point.Y, Point2.Value.CellFace.Point.Y); int endY = Math.Max(Point1.Value.CellFace.Point.Y, Point2.Value.CellFace.Point.Y); int startZ = Math.Min(Point1.Value.CellFace.Point.Z, Point2.Value.CellFace.Point.Z); int endZ = Math.Max(Point1.Value.CellFace.Point.Z, Point2.Value.CellFace.Point.Z); blockCount = 0; BlockList.Clear(); for (int x = 0; x <= endX - startX; x++) { for (int y = 0; y <= endY - startY; y++) { for (int z = 0; z <= endZ - startZ; z++) { BlockMem blmem = new BlockMem(); int X, Y, Z; if (Point1.Value.CellFace.Point.X > Point2.Value.CellFace.Point.X) { blmem.x = - x; X = Point1.Value.CellFace.Point.X - x; } else { blmem.x = x; X = Point1.Value.CellFace.Point.X + x; } if (Point1.Value.CellFace.Point.Y > Point2.Value.CellFace.Point.Y) { blmem.y = - y; Y = Point1.Value.CellFace.Point.Y - y; } else { blmem.y = y; Y = Point1.Value.CellFace.Point.Y + y; } if (Point1.Value.CellFace.Point.Z > Point2.Value.CellFace.Point.Z) { blmem.z = - z; Z = Point1.Value.CellFace.Point.Z - z; } else { blmem.z = z; Z = Point1.Value.CellFace.Point.Z + z; } blmem.id = World.GetBlock(X, Y, Z); BlockList.Add(blmem); blockCount++; } } } } Gui.DisplayMessage("Copied " + blockCount + " blocks", false); return; } if ((Engine.Input.Keyboard.IsKeyDownOnce(Engine.Input.Key.F10)) || (ScreensManager.CurrentScreen.ScreenWidget.FindWidget<BitmapButtonWidget>("F10", true).IsTapped)) // Вставка зоны из памяти { if (Point3 == null) Gui.DisplayMessage("You have not selected point 3", false); else { for (var i = 0; i < blockCount; i++) { var xPos = Point3.Value.CellFace.X + BlockList[i].x; var yPos = Point3.Value.CellFace.Y + BlockList[i].y; var zPos = Point3.Value.CellFace.Z + BlockList[i].z; World.SetBlock(xPos, yPos, zPos, BlockList[i].id); } Gui.DisplayMessage("Pasted " + blockCount + " blocks", false); } } }
public override void Load(ValuesDictionary valuesDictionary, IdToEntityMap idToEntityMap) { flatBatch = primitivesRenderer.FlatBatch(); componentPlayer = base.Entity.FindComponent <ComponentPlayer>(throwOnError: true); subsystemTerrain = base.Entity.Project.FindSubsystem <SubsystemTerrain>(throwOnError: true); subsystemPlantBlock = base.Entity.Project.FindSubsystem <SubsystemPlantBlockBehavior>(throwOnError: true); creatureSpawn = Project.FindSubsystem <SubsystemCreatureSpawn>(); modelsRenderer = base.Entity.Project.FindSubsystem <SubsystemModelsRenderer>(); subsystemBodies = Project.FindSubsystem <SubsystemBodies>(); jeiBehavior = base.Entity.Project.FindSubsystem <SubsystemXjJeiBehavior>(); jump.Texture = TextureAtlasManager.GetSubtexture("JEITextures/JEI_Jump").Texture; jumpcanvas.Children.Add(touch); jumpcanvas.Children.Add(jump); jumpcanvas.DesiredSize = SubsystemXjJeiBehavior.jumpsize; jump.DesiredSize = SubsystemXjJeiBehavior.jumpsize; jumpcanvas.IsVisible = SubsystemXjJeiBehavior.showjump; messageInfo.setPlayer(componentPlayer); if (componentPlayer != null) { msginfobtn.NormalSubtexture = new Subtexture(ContentManager.Get <Texture2D>("JEITextures/JEI_MSG"), Vector2.Zero, Vector2.One); msginfobtn.ClickedSubtexture = new Subtexture(ContentManager.Get <Texture2D>("JEITextures/JEI_MSG_P"), Vector2.Zero, Vector2.One); componentPlayer.GuiWidget.Children.Find <CanvasWidget>("ControlsContainer").Children.Add(infoDialog); componentPlayer.GuiWidget.Children.Find <CanvasWidget>("ControlsContainer").Children.Add(messageInfo); componentPlayer.GuiWidget.Children.Find <CanvasWidget>("ControlsContainer").Children.Add(moreInfo); componentPlayer.GuiWidget.Children.Find <StackPanelWidget>("RightControlsContainer").Children.Add(msginfobtn); componentPlayer.GuiWidget.Children.Find <CanvasWidget>("ControlsContainer").Children.Add(jumpcanvas); } int num = 0; try { List <string> namelist = new List <string>(); Dictionary <string, List <string> > depancys = new Dictionary <string, List <string> >(); List <uint> verList = new List <uint>(); foreach (ModInfo modInfo in ModsManager.LoadedMods) { if (!namelist.Contains(modInfo.Name)) { if (!string.IsNullOrEmpty(modInfo.Dependency)) { string[] mm = modInfo.Dependency.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); List <string> mlist = new List <string>(); if (mm.Length == 1) { mlist.Add(modInfo.Dependency); } else { foreach (string mmsa in mm) { mlist.Add(mmsa); } } depancys.Add(modInfo.Name, mlist); } namelist.Add(modInfo.Name); verList.Add(modInfo.Version); } } messageInfo.addMessage("[color=yellow]欢迎使用[/color][color=red]SCCRF合成书[/color][color=yellow]模组![/color]"); messageInfo.addMessage($"[color=green]<SCCRF>:[/color]使用一根[color=red]木棍[/color]开始你的[color=green]合成之旅[/color]"); messageInfo.addMessage($"[color=green]<SCCRF>:[/color]电脑端按下[color=red]TAB[/color]快捷打开[color=green]消息框[/color]"); messageInfo.addMessage($"[color=green]<SCCRF>:[/color]电脑端按下[color=red]B[/color]快捷打开[color=green]合成谱[/color]"); messageInfo.addMessage($"[color=green]<SCCRF>:[/color]输入[color=red]/help[/color]使用[color=green]命令[/color]帮助"); messageInfo.addMessage($"[color=green]并且您已安装([/color][color=red]{namelist.Count}[/color][color=green])个模组[/color]"); foreach (string modInfo in namelist) { messageInfo.addMessage($"[color=blue]{num+1}.[/color] {modInfo.Replace('[','{').Replace(']','}')} [color=yellow]{parseVersion(verList[num])}[/color]"); num++; } num = 0; foreach (KeyValuePair <string, List <string> > kkop in depancys) { foreach (string huap in kkop.Value) { if (!namelist.Contains(huap)) { if (huap == "zh-cn" && namelist.Contains("NewBlocks_SC")) { continue; } messageInfo.addMessage($"[color=yellow]<警告>[/color]:使用[color=blue]{kkop.Key}[/color]需要安装依赖MOD [color=green]{huap}[/color]"); } } ++num; } messageInfo.IsVisible = false; } catch (Exception e) { messageInfo.addMessage(e.ToString()); } infoDialog.IsVisible = false; base.Load(valuesDictionary, idToEntityMap); }
internal static void WorldEditModApi() { if (!(ScreensManager.GetScreenName(ScreensManager.CurrentScreen) == "Game")) // Выходим, если мы не в игре { return; } // Показазывеем контейнер с кнопками, если активирована кнопка WorldEditMenu ScreensManager.CurrentScreen.ScreenWidget.FindWidget <StackPanelWidget>("WorldEditMenuContainerTop", true).IsVisible = ScreensManager.CurrentScreen.ScreenWidget.FindWidget <BitmapButtonWidget>("WorldEditMenu", true).IsChecked; ScreensManager.CurrentScreen.ScreenWidget.FindWidget <StackPanelWidget>("WorldEditMenuContainerBottom", true).IsVisible = ScreensManager.CurrentScreen.ScreenWidget.FindWidget <BitmapButtonWidget>("WorldEditMenu", true).IsChecked; // Смена режима управления if (ScreensManager.CurrentScreen.ScreenWidget.FindWidget <BitmapButtonWidget>("WorldEditMenu", true).IsTapped) { if (ScreensManager.CurrentScreen.ScreenWidget.FindWidget <BitmapButtonWidget>("WorldEditMenu", true).IsChecked) { OldLookControlMode = (int)SettingsManager.LookControlMode; SettingsManager.LookControlMode = LookControlMode.SplitTouch; } else { SettingsManager.LookControlMode = (LookControlMode)OldLookControlMode; } } if ((Engine.Input.Keyboard.IsKeyDown(Engine.Input.Key.F1)) || (ScreensManager.CurrentScreen.ScreenWidget.FindWidget <BitmapButtonWidget>("F1", true).IsTapped)) // Выделение 1 точки { ComponentMiner componentMiner = Subsystems.Player.ComponentPlayer.ComponentMiner; Point1 = componentMiner.PickTerrainForDigging(Subsystems.Drawing.ViewPosition, Subsystems.Drawing.ViewDirection); if (Point1.HasValue) { SCModApi.Gui.DisplayMessage("Set position 1 on: " + Point1.Value.CellFace.X + ", " + Point1.Value.CellFace.Y + ", " + Point1.Value.CellFace.Z, false); SelectedBlock = World.GetBlock(Point1.Value.CellFace.X, Point1.Value.CellFace.Y, Point1.Value.CellFace.Z); return; } } if ((Engine.Input.Keyboard.IsKeyDown(Engine.Input.Key.F2)) || (ScreensManager.CurrentScreen.ScreenWidget.FindWidget <BitmapButtonWidget>("F2", true).IsTapped)) // Выделение 2 точки { ComponentMiner componentMiner = Subsystems.Player.ComponentPlayer.ComponentMiner; Point2 = componentMiner.PickTerrainForDigging(Subsystems.Drawing.ViewPosition, Subsystems.Drawing.ViewDirection); if (Point2.HasValue) { SCModApi.Gui.DisplayMessage("Set position 2 on: " + Point1.Value.CellFace.X + ", " + Point1.Value.CellFace.Y + ", " + Point1.Value.CellFace.Z, false); ReplaceableBlock = Subsystems.Terrain.TerrainData.GetCellValue(Point2.Value.CellFace.X, Point2.Value.CellFace.Y, Point2.Value.CellFace.Z); return; } } if ((Engine.Input.Keyboard.IsKeyDown(Engine.Input.Key.F3)) || (ScreensManager.CurrentScreen.ScreenWidget.FindWidget <BitmapButtonWidget>("F3", true).IsTapped)) // Выделение 3 точки { ComponentMiner componentMiner = Subsystems.Player.ComponentPlayer.ComponentMiner; Point3 = componentMiner.PickTerrainForDigging(Subsystems.Drawing.ViewPosition, Subsystems.Drawing.ViewDirection); if (Point3.HasValue) { SCModApi.Gui.DisplayMessage("Set position 3 on: " + Point1.Value.CellFace.X + ", " + Point1.Value.CellFace.Y + ", " + Point1.Value.CellFace.Z, false); return; } } if (Point1.HasValue && Point2.HasValue && ScreensManager.CurrentScreen.ScreenWidget.FindWidget <BitmapButtonWidget>("WorldEditMenu", true).IsChecked) // Выделение зоны между точками 1 и 2 { int startX = Math.Min(Point1.Value.CellFace.Point.X, Point2.Value.CellFace.Point.X); int endX = Math.Max(Point1.Value.CellFace.Point.X, Point2.Value.CellFace.Point.X); int startY = Math.Min(Point1.Value.CellFace.Point.Y, Point2.Value.CellFace.Point.Y); int endY = Math.Max(Point1.Value.CellFace.Point.Y, Point2.Value.CellFace.Point.Y); int startZ = Math.Min(Point1.Value.CellFace.Point.Z, Point2.Value.CellFace.Point.Z); int endZ = Math.Max(Point1.Value.CellFace.Point.Z, Point2.Value.CellFace.Point.Z); PrimitivesRenderer3D PrimitivesRenderer3D = new PrimitivesRenderer3D(); Vector3 pointStart = new Vector3(startX, startY, startZ); Vector3 pointEnd = new Vector3(endX + 1, endY + 1, endZ + 1); BoundingBox boundingBox = new BoundingBox(pointStart, pointEnd); PrimitivesRenderer3D.FlatBatch(-1, DepthStencilState.None, (RasterizerState)null, (BlendState)null).QueueBoundingBox(boundingBox, Color.Green); PrimitivesRenderer3D.Flush(Subsystems.Drawing.ViewProjectionMatrix, true); } if (Point3.HasValue && ScreensManager.CurrentScreen.ScreenWidget.FindWidget <BitmapButtonWidget>("WorldEditMenu", true).IsChecked) // Выделение зоны вставки { int startX = Math.Min(Point1.Value.CellFace.Point.X, Point2.Value.CellFace.Point.X); int endX = Math.Max(Point1.Value.CellFace.Point.X, Point2.Value.CellFace.Point.X); int startY = Math.Min(Point1.Value.CellFace.Point.Y, Point2.Value.CellFace.Point.Y); int endY = Math.Max(Point1.Value.CellFace.Point.Y, Point2.Value.CellFace.Point.Y); int startZ = Math.Min(Point1.Value.CellFace.Point.Z, Point2.Value.CellFace.Point.Z); int endZ = Math.Max(Point1.Value.CellFace.Point.Z, Point2.Value.CellFace.Point.Z); startX += Point3.Value.CellFace.Point.X - Point1.Value.CellFace.Point.X; startY += Point3.Value.CellFace.Point.Y - Point1.Value.CellFace.Point.Y; startZ += Point3.Value.CellFace.Point.Z - Point1.Value.CellFace.Point.Z; endX += Point3.Value.CellFace.Point.X - Point1.Value.CellFace.Point.X; endY += Point3.Value.CellFace.Point.Y - Point1.Value.CellFace.Point.Y; endZ += Point3.Value.CellFace.Point.Z - Point1.Value.CellFace.Point.Z; PrimitivesRenderer3D primitivesRenderer3D = new PrimitivesRenderer3D(); Vector3 pointStart = new Vector3(startX, startY, startZ); Vector3 pointEnd = new Vector3(endX + 1, endY + 1, endZ + 1); BoundingBox boundingBox = new BoundingBox(pointStart, pointEnd); primitivesRenderer3D.FlatBatch(-1, DepthStencilState.None, (RasterizerState)null, (BlendState)null).QueueBoundingBox(boundingBox, Color.Red); primitivesRenderer3D.Flush(Subsystems.Drawing.ViewProjectionMatrix, true); } if ((Engine.Input.Keyboard.IsKeyDownOnce(Engine.Input.Key.F5)) || (ScreensManager.CurrentScreen.ScreenWidget.FindWidget <BitmapButtonWidget>("F5", true).IsTapped)) // Копирование выделенной зоны { if (Point1 == null) { Gui.DisplayMessage("You have not selected point 1", false); } else if (Point2 == null) { Gui.DisplayMessage("You have not selected point 2", false); } else if (Point3 == null) { Gui.DisplayMessage("You have not selected point 3", false); } else { int startX = Math.Min(Point1.Value.CellFace.Point.X, Point2.Value.CellFace.Point.X); int endX = Math.Max(Point1.Value.CellFace.Point.X, Point2.Value.CellFace.Point.X); int startY = Math.Min(Point1.Value.CellFace.Point.Y, Point2.Value.CellFace.Point.Y); int endY = Math.Max(Point1.Value.CellFace.Point.Y, Point2.Value.CellFace.Point.Y); int startZ = Math.Min(Point1.Value.CellFace.Point.Z, Point2.Value.CellFace.Point.Z); int endZ = Math.Max(Point1.Value.CellFace.Point.Z, Point2.Value.CellFace.Point.Z); for (int y = 0; y <= endY - startY; y++) { for (int z = 0; z <= endZ - startZ; z++) { for (int x = 0; x <= endX - startX; x++) { int targetX, targetY, targetZ; int PlaceX, PlaceY, PlaceZ; if (Point1.Value.CellFace.Point.X > Point2.Value.CellFace.Point.X) { targetX = Point1.Value.CellFace.Point.X - x; PlaceX = Point3.Value.CellFace.Point.X - x; } else { targetX = Point1.Value.CellFace.Point.X + x; PlaceX = Point3.Value.CellFace.Point.X + x; } if (Point1.Value.CellFace.Point.Y > Point2.Value.CellFace.Point.Y) { targetY = Point1.Value.CellFace.Point.Y - y; PlaceY = Point3.Value.CellFace.Point.Y - y; } else { targetY = Point1.Value.CellFace.Point.Y + y; PlaceY = Point3.Value.CellFace.Point.Y + y; } if (Point1.Value.CellFace.Point.Z > Point2.Value.CellFace.Point.Z) { targetZ = Point1.Value.CellFace.Point.Z - z; PlaceZ = Point3.Value.CellFace.Point.Z - z; } else { targetZ = Point1.Value.CellFace.Point.Z + z; PlaceZ = Point3.Value.CellFace.Point.Z + z; } int block = World.GetBlock(targetX, targetY, targetZ); // 15360 - Air if (block != 15360) { World.SetBlock(PlaceX, PlaceY, PlaceZ, block); } } } } } return; } if ((Engine.Input.Keyboard.IsKeyDownOnce(Engine.Input.Key.F6)) || (ScreensManager.CurrentScreen.ScreenWidget.FindWidget <BitmapButtonWidget>("F6", true).IsTapped)) // Заполнение зоны { if (Point1 == null) { Gui.DisplayMessage("You have not selected point 1", false); } else if (Point2 == null) { Gui.DisplayMessage("You have not selected point 2", false); } else { int startX = Math.Min(Point1.Value.CellFace.Point.X, Point2.Value.CellFace.Point.X); int endX = Math.Max(Point1.Value.CellFace.Point.X, Point2.Value.CellFace.Point.X); int startY = Math.Min(Point1.Value.CellFace.Point.Y, Point2.Value.CellFace.Point.Y); int endY = Math.Max(Point1.Value.CellFace.Point.Y, Point2.Value.CellFace.Point.Y); int startZ = Math.Min(Point1.Value.CellFace.Point.Z, Point2.Value.CellFace.Point.Z); int endZ = Math.Max(Point1.Value.CellFace.Point.Z, Point2.Value.CellFace.Point.Z); for (int x = startX; x <= endX; x++) { for (int y = startY; y <= endY; y++) { for (int z = startZ; z <= endZ; z++) { World.SetBlock(x, y, z, SelectedBlock); } } } } return; } if ((Engine.Input.Keyboard.IsKeyDownOnce(Engine.Input.Key.F7)) || (ScreensManager.CurrentScreen.ScreenWidget.FindWidget <BitmapButtonWidget>("F7", true).IsTapped)) // Замена зоны { if (Point1 == null) { Gui.DisplayMessage("You have not selected point 1", false); } else if (Point2 == null) { Gui.DisplayMessage("You have not selected point 2", false); } else { int startX = Math.Min(Point1.Value.CellFace.Point.X, Point2.Value.CellFace.Point.X); int endX = Math.Max(Point1.Value.CellFace.Point.X, Point2.Value.CellFace.Point.X); int startY = Math.Min(Point1.Value.CellFace.Point.Y, Point2.Value.CellFace.Point.Y); int endY = Math.Max(Point1.Value.CellFace.Point.Y, Point2.Value.CellFace.Point.Y); int startZ = Math.Min(Point1.Value.CellFace.Point.Z, Point2.Value.CellFace.Point.Z); int endZ = Math.Max(Point1.Value.CellFace.Point.Z, Point2.Value.CellFace.Point.Z); for (int x = startX; x <= endX; x++) { for (int y = startY; y <= endY; y++) { for (int z = startZ; z <= endZ; z++) { if (World.GetBlock(x, y, z) == ReplaceableBlock) { World.SetBlock(x, y, z, SelectedBlock); } } } } } return; } if ((Engine.Input.Keyboard.IsKeyDownOnce(Engine.Input.Key.F8)) || (ScreensManager.CurrentScreen.ScreenWidget.FindWidget <BitmapButtonWidget>("F8", true).IsTapped)) // Очистка зоны { if (Point1 == null) { Gui.DisplayMessage("You have not selected point 1", false); } else if (Point2 == null) { Gui.DisplayMessage("You have not selected point 2", false); } else { int startX = Math.Min(Point1.Value.CellFace.Point.X, Point2.Value.CellFace.Point.X); int endX = Math.Max(Point1.Value.CellFace.Point.X, Point2.Value.CellFace.Point.X); int startY = Math.Min(Point1.Value.CellFace.Point.Y, Point2.Value.CellFace.Point.Y); int endY = Math.Max(Point1.Value.CellFace.Point.Y, Point2.Value.CellFace.Point.Y); int startZ = Math.Min(Point1.Value.CellFace.Point.Z, Point2.Value.CellFace.Point.Z); int endZ = Math.Max(Point1.Value.CellFace.Point.Z, Point2.Value.CellFace.Point.Z); for (int x = startX; x <= endX; x++) { for (int y = startY; y <= endY; y++) { for (int z = startZ; z <= endZ; z++) { World.SetBlock(x, y, z, 0); } } } } return; } if ((Engine.Input.Keyboard.IsKeyDownOnce(Engine.Input.Key.F9)) || (ScreensManager.CurrentScreen.ScreenWidget.FindWidget <BitmapButtonWidget>("F9", true).IsTapped)) // Копирование зоны в память { if (Point1 == null) { Gui.DisplayMessage("You have not selected point 1", false); } else if (Point2 == null) { Gui.DisplayMessage("You have not selected point 2", false); } else { int startX = Math.Min(Point1.Value.CellFace.Point.X, Point2.Value.CellFace.Point.X); int endX = Math.Max(Point1.Value.CellFace.Point.X, Point2.Value.CellFace.Point.X); int startY = Math.Min(Point1.Value.CellFace.Point.Y, Point2.Value.CellFace.Point.Y); int endY = Math.Max(Point1.Value.CellFace.Point.Y, Point2.Value.CellFace.Point.Y); int startZ = Math.Min(Point1.Value.CellFace.Point.Z, Point2.Value.CellFace.Point.Z); int endZ = Math.Max(Point1.Value.CellFace.Point.Z, Point2.Value.CellFace.Point.Z); blockCount = 0; BlockList.Clear(); for (int x = 0; x <= endX - startX; x++) { for (int y = 0; y <= endY - startY; y++) { for (int z = 0; z <= endZ - startZ; z++) { BlockMem blmem = new BlockMem(); int X, Y, Z; if (Point1.Value.CellFace.Point.X > Point2.Value.CellFace.Point.X) { blmem.x = -x; X = Point1.Value.CellFace.Point.X - x; } else { blmem.x = x; X = Point1.Value.CellFace.Point.X + x; } if (Point1.Value.CellFace.Point.Y > Point2.Value.CellFace.Point.Y) { blmem.y = -y; Y = Point1.Value.CellFace.Point.Y - y; } else { blmem.y = y; Y = Point1.Value.CellFace.Point.Y + y; } if (Point1.Value.CellFace.Point.Z > Point2.Value.CellFace.Point.Z) { blmem.z = -z; Z = Point1.Value.CellFace.Point.Z - z; } else { blmem.z = z; Z = Point1.Value.CellFace.Point.Z + z; } blmem.id = World.GetBlock(X, Y, Z); BlockList.Add(blmem); blockCount++; } } } } Gui.DisplayMessage("Copied " + blockCount + " blocks", false); return; } if ((Engine.Input.Keyboard.IsKeyDownOnce(Engine.Input.Key.F10)) || (ScreensManager.CurrentScreen.ScreenWidget.FindWidget <BitmapButtonWidget>("F10", true).IsTapped)) // Вставка зоны из памяти { if (Point3 == null) { Gui.DisplayMessage("You have not selected point 3", false); } else { for (var i = 0; i < blockCount; i++) { var xPos = Point3.Value.CellFace.X + BlockList[i].x; var yPos = Point3.Value.CellFace.Y + BlockList[i].y; var zPos = Point3.Value.CellFace.Z + BlockList[i].z; World.SetBlock(xPos, yPos, zPos, BlockList[i].id); } Gui.DisplayMessage("Pasted " + blockCount + " blocks", false); } } }
public override void Draw(DrawContext dc) { if (Design == null) { return; } Matrix matrix; if (Mode == ViewMode.Perspective) { Viewport viewport = Display.Viewport; Vector3 vector = new Vector3(0.5f, 0.5f, 0.5f); Matrix m = Matrix.CreateLookAt(2.65f * m_direction + vector, vector, Vector3.UnitY); Matrix m2 = Matrix.CreatePerspectiveFieldOfView(1.2f, base.ActualSize.X / base.ActualSize.Y, 0.4f, 4f); Matrix m3 = MatrixUtils.CreateScaleTranslation(base.ActualSize.X, 0f - base.ActualSize.Y, base.ActualSize.X / 2f, base.ActualSize.Y / 2f) * base.GlobalTransform * MatrixUtils.CreateScaleTranslation(2f / (float)viewport.Width, -2f / (float)viewport.Height, -1f, 1f); matrix = m * m2 * m3; FlatBatch3D flatBatch3D = m_primitivesRenderer3d.FlatBatch(1, DepthStencilState.DepthRead); for (int i = 0; i <= Design.Resolution; i++) { float num = (float)i / (float)Design.Resolution; Color color = (i % 2 == 0) ? new Color(56, 56, 56, 56) : new Color(28, 28, 28, 28); color *= base.GlobalColorTransform; flatBatch3D.QueueLine(new Vector3(num, 0f, 0f), new Vector3(num, 0f, 1f), color); flatBatch3D.QueueLine(new Vector3(0f, 0f, num), new Vector3(1f, 0f, num), color); flatBatch3D.QueueLine(new Vector3(0f, num, 0f), new Vector3(0f, num, 1f), color); flatBatch3D.QueueLine(new Vector3(0f, 0f, num), new Vector3(0f, 1f, num), color); flatBatch3D.QueueLine(new Vector3(0f, num, 1f), new Vector3(1f, num, 1f), color); flatBatch3D.QueueLine(new Vector3(num, 0f, 1f), new Vector3(num, 1f, 1f), color); } Color color2 = new Color(64, 64, 64, 255) * base.GlobalColorTransform; FontBatch3D fontBatch3D = m_primitivesRenderer3d.FontBatch(ContentManager.Get <BitmapFont>("Fonts/Pericles"), 1); fontBatch3D.QueueText("Front", new Vector3(0.5f, 0f, 0f), 0.004f * new Vector3(-1f, 0f, 0f), 0.004f * new Vector3(0f, 0f, -1f), color2, TextAnchor.HorizontalCenter); fontBatch3D.QueueText("Side", new Vector3(1f, 0f, 0.5f), 0.004f * new Vector3(0f, 0f, -1f), 0.004f * new Vector3(1f, 0f, 0f), color2, TextAnchor.HorizontalCenter); if (DrawDebugFurniture) { DebugDraw(); } } else { Vector3 position; Vector3 up; if (Mode == ViewMode.Side) { position = new Vector3(1f, 0f, 0f); up = new Vector3(0f, 1f, 0f); } else if (Mode != ViewMode.Top) { position = new Vector3(0f, 0f, -1f); up = new Vector3(0f, 1f, 0f); } else { position = new Vector3(0f, 1f, 0f); up = new Vector3(0f, 0f, 1f); } Viewport viewport2 = Display.Viewport; float num2 = MathUtils.Min(base.ActualSize.X, base.ActualSize.Y); Matrix m4 = Matrix.CreateLookAt(position, new Vector3(0f, 0f, 0f), up); Matrix m5 = Matrix.CreateOrthographic(2f, 2f, -10f, 10f); Matrix m6 = MatrixUtils.CreateScaleTranslation(num2, 0f - num2, base.ActualSize.X / 2f, base.ActualSize.Y / 2f) * base.GlobalTransform * MatrixUtils.CreateScaleTranslation(2f / (float)viewport2.Width, -2f / (float)viewport2.Height, -1f, 1f); matrix = Matrix.CreateTranslation(-0.5f, -0.5f, -0.5f) * m4 * m5 * m6; FlatBatch2D flatBatch2D = m_primitivesRenderer2d.FlatBatch(); Matrix m7 = base.GlobalTransform; for (int j = 1; j < Design.Resolution; j++) { float num3 = (float)j / (float)Design.Resolution; Vector2 v = new Vector2(base.ActualSize.X * num3, 0f); Vector2 v2 = new Vector2(base.ActualSize.X * num3, base.ActualSize.Y); Vector2 v3 = new Vector2(0f, base.ActualSize.Y * num3); Vector2 v4 = new Vector2(base.ActualSize.X, base.ActualSize.Y * num3); Vector2.Transform(ref v, ref m7, out v); Vector2.Transform(ref v2, ref m7, out v2); Vector2.Transform(ref v3, ref m7, out v3); Vector2.Transform(ref v4, ref m7, out v4); Color color3 = (j % 2 == 0) ? new Color(0, 0, 0, 56) : new Color(0, 0, 0, 28); Color color4 = (j % 2 == 0) ? new Color(56, 56, 56, 56) : new Color(28, 28, 28, 28); color3 *= base.GlobalColorTransform; color4 *= base.GlobalColorTransform; flatBatch2D.QueueLine(v, v2, 0f, (j % 2 == 0) ? color3 : (color3 * 0.75f)); flatBatch2D.QueueLine(v + new Vector2(1f, 0f), v2 + new Vector2(1f, 0f), 0f, color4); flatBatch2D.QueueLine(v3, v4, 0f, color3); flatBatch2D.QueueLine(v3 + new Vector2(0f, 1f), v4 + new Vector2(0f, 1f), 0f, color4); } } Matrix matrix2 = Matrix.Identity; FurnitureGeometry geometry = Design.Geometry; for (int k = 0; k < 6; k++) { Color globalColorTransform = base.GlobalColorTransform; if (Mode == ViewMode.Perspective) { float num4 = LightingManager.LightIntensityByLightValueAndFace[15 + 16 * CellFace.OppositeFace(k)]; globalColorTransform *= new Color(num4, num4, num4); } if (geometry.SubsetOpaqueByFace[k] != null) { BlocksManager.DrawMeshBlock(m_primitivesRenderer3d, geometry.SubsetOpaqueByFace[k], globalColorTransform, 1f, ref matrix2, null); } if (geometry.SubsetAlphaTestByFace[k] != null) { BlocksManager.DrawMeshBlock(m_primitivesRenderer3d, geometry.SubsetAlphaTestByFace[k], globalColorTransform, 1f, ref matrix2, null); } } m_primitivesRenderer3d.Flush(matrix); m_primitivesRenderer2d.Flush(); }