public void Update(float dt) { Camera activeCamera = m_componentPlayer.GameWidget.ActiveCamera; Ray3? ray = m_componentPlayer.ComponentInput.IsControlledByVr ? m_componentPlayer.ComponentInput.CalculateVrHandRay() : new Ray3?(new Ray3(activeCamera.ViewPosition, activeCamera.ViewDirection)); NearbyEditableCell = null; if (ray.HasValue) { m_highlightRaycastResult = m_componentPlayer.ComponentMiner.Raycast(ray.Value, RaycastMode.Digging); if (!(m_highlightRaycastResult is TerrainRaycastResult)) { return; } TerrainRaycastResult terrainRaycastResult = (TerrainRaycastResult)m_highlightRaycastResult; if (terrainRaycastResult.Distance < 3f) { Point3 point = terrainRaycastResult.CellFace.Point; int cellValue = m_subsystemTerrain.Terrain.GetCellValue(point.X, point.Y, point.Z); Block obj = BlocksManager.Blocks[Terrain.ExtractContents(cellValue)]; if (obj is CrossBlock) { terrainRaycastResult.Distance = MathUtils.Max(terrainRaycastResult.Distance, 0.1f); m_highlightRaycastResult = terrainRaycastResult; } if (obj.IsEditable) { NearbyEditableCell = terrainRaycastResult.CellFace.Point; } } } else { m_highlightRaycastResult = null; } }
public override bool OnInteract(TerrainRaycastResult raycastResult, ComponentMiner componentMiner) { var blockEntity = Utils.GetBlockEntity(raycastResult.CellFace.Point); if (blockEntity == null || componentMiner.ComponentPlayer == null) { return(false); } switch (Terrain.ExtractContents(raycastResult.Value)) { case BlastFurnaceBlock.Index: componentMiner.ComponentPlayer.ComponentGui.ModalPanelWidget = new BlastFurnaceWidget(componentMiner.Inventory, blockEntity.Entity.FindComponent <ComponentBlastFurnace>(true)); break; case CovenBlock.Index: componentMiner.ComponentPlayer.ComponentGui.ModalPanelWidget = new CovenWidget(componentMiner.Inventory, blockEntity.Entity.FindComponent <ComponentCoven>(true)); break; case HearthFurnaceBlock.Index: componentMiner.ComponentPlayer.ComponentGui.ModalPanelWidget = new CovenWidget(componentMiner.Inventory, blockEntity.Entity.FindComponent <ComponentHearthFurnace>(true), "Widgets/HearthFurnaceWidget"); break; case TankBlock.Index: if (TankBlock.GetType(raycastResult.Value) == TankBlock.Type.FractionatingTower) { componentMiner.ComponentPlayer.ComponentGui.ModalPanelWidget = new FractionalTowerWidget(componentMiner.Inventory, blockEntity.Entity.FindComponent <ComponentFractionalTower>(true)); break; } return(false); default: return(false); } AudioManager.PlaySound("Audio/UI/ButtonClick", 1f, 0f, 0f); return(true); }
public void DrawReticleHighlight(Camera camera) { if (camera.Eye.HasValue && m_highlightRaycastResult is TerrainRaycastResult) { TerrainRaycastResult terrainRaycastResult = (TerrainRaycastResult)m_highlightRaycastResult; Vector3 vector = terrainRaycastResult.HitPoint(); Vector3 vector2 = (!(BlocksManager.Blocks[Terrain.ExtractContents(terrainRaycastResult.Value)] is CrossBlock)) ? CellFace.FaceToVector3(terrainRaycastResult.CellFace.Face) : (-terrainRaycastResult.Ray.Direction); float num = Vector3.Distance(camera.ViewPosition, vector); float s = 0.03f + MathUtils.Min(0.008f * num, 0.04f); float s2 = 0.01f * num; Vector3 v = (MathUtils.Abs(Vector3.Dot(vector2, Vector3.UnitY)) < 0.5f) ? Vector3.UnitY : Vector3.UnitX; Vector3 vector3 = Vector3.Normalize(Vector3.Cross(vector2, v)); Vector3 v2 = Vector3.Normalize(Vector3.Cross(vector2, vector3)); Subtexture subtexture = ContentManager.Get <Subtexture>("Textures/Atlas/Reticle"); TexturedBatch3D texturedBatch3D = m_primitivesRenderer3D.TexturedBatch(subtexture.Texture, useAlphaTest: false, 0, DepthStencilState.DepthRead, null, null, SamplerState.LinearClamp); Vector3 p = vector + s * (-vector3 + v2) + s2 * vector2; Vector3 p2 = vector + s * (vector3 + v2) + s2 * vector2; Vector3 p3 = vector + s * (vector3 - v2) + s2 * vector2; Vector3 p4 = vector + s * (-vector3 - v2) + s2 * vector2; Vector2 texCoord = new Vector2(subtexture.TopLeft.X, subtexture.TopLeft.Y); Vector2 texCoord2 = new Vector2(subtexture.BottomRight.X, subtexture.TopLeft.Y); Vector2 texCoord3 = new Vector2(subtexture.BottomRight.X, subtexture.BottomRight.Y); Vector2 texCoord4 = new Vector2(subtexture.TopLeft.X, subtexture.BottomRight.Y); texturedBatch3D.QueueQuad(p, p2, p3, p4, texCoord, texCoord2, texCoord3, texCoord4, Color.White); texturedBatch3D.Flush(camera.ViewProjectionMatrix); } }
public override bool OnInteract(TerrainRaycastResult raycastResult, ComponentMiner componentMiner) { if (AddFuel(raycastResult.CellFace.X, raycastResult.CellFace.Y, raycastResult.CellFace.Z, componentMiner.ActiveBlockValue, 1)) { componentMiner.RemoveActiveTool(1); } return(true); }
public override bool OnInteract(TerrainRaycastResult raycastResult, ComponentMiner componentMiner) { CellFace cellFace = base.CellFaces[0]; base.SubsystemElectricity.SubsystemTerrain.SubsystemFurnitureBlockBehavior.SwitchToNextState(cellFace.X, cellFace.Y, cellFace.Z, playSound: false); base.SubsystemElectricity.SubsystemAudio.PlaySound("Audio/Click", 1f, 0f, new Vector3(cellFace.X, cellFace.Y, cellFace.Z), 2f, autoDelay: true); return(true); }
public override bool OnInteract(TerrainRaycastResult raycastResult, ComponentMiner componentMiner) { CellFace cellFace = base.CellFaces[0]; int cellValue = base.SubsystemElectricity.SubsystemTerrain.Terrain.GetCellValue(cellFace.X, cellFace.Y, cellFace.Z); int value = SwitchBlock.SetLeverState(cellValue, !SwitchBlock.GetLeverState(cellValue)); base.SubsystemElectricity.SubsystemTerrain.ChangeCell(cellFace.X, cellFace.Y, cellFace.Z, value); base.SubsystemElectricity.SubsystemAudio.PlaySound("Audio/Click", 1f, 0f, new Vector3(cellFace.X, cellFace.Y, cellFace.Z), 2f, autoDelay: true); return(true); }
public bool OnInteract(TerrainRaycastResult raycastResult, ComponentMiner componentMiner) { ComponentPlayer = componentMiner.ComponentPlayer; if (!Powered || ComponentPlayer == null) { return(false); } DialogsManager.ShowDialog(ComponentPlayer.View.GameWidget, new TextBoxDialog("Enter Code", lastcode, int.MaxValue, Execute)); return(true); }
public override bool OnInteract(TerrainRaycastResult raycastResult, ComponentMiner componentMiner) { var entity = Utils.GetBlockEntity(raycastResult.CellFace.Point); if (entity == null || componentMiner.ComponentPlayer == null) { return(false); } componentMiner.ComponentPlayer.ComponentGui.ModalPanelWidget = GetWidget(componentMiner.Inventory, entity.Entity.FindComponent <T>(true)); AudioManager.PlaySound("Audio/UI/ButtonClick", 1f, 0f, 0f); return(true); }
public override bool OnInteract(TerrainRaycastResult raycastResult, ComponentMiner componentMiner) { ComponentBlockEntity blockEntity = base.SubsystemTerrain.Project.FindSubsystem <SubsystemBlockEntities>(throwOnError: true).GetBlockEntity(raycastResult.CellFace.X, raycastResult.CellFace.Y, raycastResult.CellFace.Z); if (blockEntity != null && componentMiner.ComponentPlayer != null) { ComponentCraftingTable componentCraftingTable = blockEntity.Entity.FindComponent <ComponentCraftingTable>(throwOnError: true); componentMiner.ComponentPlayer.ComponentGui.ModalPanelWidget = new CraftingTableWidget(componentMiner.Inventory, componentCraftingTable); AudioManager.PlaySound("Audio/UI/ButtonClick", 1f, 0f, 0f); return(true); } return(false); }
public override bool OnInteract(TerrainRaycastResult raycastResult, ComponentMiner componentMiner) { if (m_subsystemGameInfo.WorldSettings.GameMode != GameMode.Adventure) { ComponentBlockEntity blockEntity = m_subsystemBlockEntities.GetBlockEntity(raycastResult.CellFace.X, raycastResult.CellFace.Y, raycastResult.CellFace.Z); if (blockEntity != null && componentMiner.ComponentPlayer != null) { ComponentDispenser componentDispenser = blockEntity.Entity.FindComponent <ComponentDispenser>(throwOnError: true); componentMiner.ComponentPlayer.ComponentGui.ModalPanelWidget = new DispenserWidget(componentMiner.Inventory, componentDispenser); AudioManager.PlaySound("Audio/UI/ButtonClick", 1f, 0f, 0f); return(true); } } return(false); }
public bool Place(TerrainRaycastResult raycastResult) { if (Place1 != null) { return(Place1(raycastResult)); } if (Place(raycastResult, ActiveBlockValue)) { if (Inventory != null) { Inventory.RemoveSlotItems(Inventory.ActiveSlotIndex, 1); } return(true); } return(false); }
public override bool OnInteract(TerrainRaycastResult raycastResult, ComponentMiner componentMiner) { int cellValue = base.SubsystemTerrain.Terrain.GetCellValue(raycastResult.CellFace.X, raycastResult.CellFace.Y, raycastResult.CellFace.Z); if (Terrain.ExtractContents(cellValue) == 227) { int designIndex = FurnitureBlock.GetDesignIndex(Terrain.ExtractData(cellValue)); FurnitureDesign design = GetDesign(designIndex); if (design != null && (design.InteractionMode == FurnitureInteractionMode.Multistate || design.InteractionMode == FurnitureInteractionMode.ConnectedMultistate)) { SwitchToNextState(raycastResult.CellFace.X, raycastResult.CellFace.Y, raycastResult.CellFace.Z, playSound: true); return(true); } } return(false); }
public override bool OnInteract(TerrainRaycastResult raycastResult, ComponentMiner componentMiner) { AudioManager.PlaySound("Audio/UI/ButtonClick", 1f, 0f, 0f); Point3 point = new Point3(raycastResult.CellFace.X, raycastResult.CellFace.Y, raycastResult.CellFace.Z); if (m_subsystemGameInfo.WorldSettings.GameMode == GameMode.Adventure) { SignData signData = GetSignData(point); if (signData != null && !string.IsNullOrEmpty(signData.Url)) { WebBrowserManager.LaunchBrowser(signData.Url); } } else if (componentMiner.ComponentPlayer != null) { DialogsManager.ShowDialog(componentMiner.ComponentPlayer.GuiWidget, new EditSignDialog(this, point)); } return(true); }
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 bool Dig(TerrainRaycastResult raycastResult) { if (Dig1 != null) { return(Dig1(raycastResult)); } bool result = false; m_lastDigFrameIndex = Time.FrameIndex; CellFace cellFace = raycastResult.CellFace; int cellValue = m_subsystemTerrain.Terrain.GetCellValue(cellFace.X, cellFace.Y, cellFace.Z); int num = Terrain.ExtractContents(cellValue); Block block = BlocksManager.Blocks[num]; int activeBlockValue = ActiveBlockValue; int num2 = Terrain.ExtractContents(activeBlockValue); Block block2 = BlocksManager.Blocks[num2]; if (!DigCellFace.HasValue || DigCellFace.Value.X != cellFace.X || DigCellFace.Value.Y != cellFace.Y || DigCellFace.Value.Z != cellFace.Z) { m_digStartTime = m_subsystemTime.GameTime; DigCellFace = cellFace; } float num3 = CalculateDigTime(cellValue, num2); m_digProgress = ((num3 > 0f) ? MathUtils.Saturate((float)(m_subsystemTime.GameTime - m_digStartTime) / num3) : 1f); if (!CanUseTool(activeBlockValue)) { m_digProgress = 0f; if (m_subsystemTime.PeriodicGameTimeEvent(5.0, m_digStartTime + 1.0)) { ComponentPlayer?.ComponentGui.DisplaySmallMessage(string.Format(LanguageControl.Get(fName, 1), block2.PlayerLevelRequired, block2.GetDisplayName(m_subsystemTerrain, activeBlockValue)), Color.White, blinking: true, playNotificationSound: true); } } bool flag = ComponentPlayer != null && !ComponentPlayer.ComponentInput.IsControlledByTouch && m_subsystemGameInfo.WorldSettings.GameMode == GameMode.Creative; if (flag || (m_lastPokingPhase <= 0.5f && PokingPhase > 0.5f)) { if (m_digProgress >= 1f) { DigCellFace = null; if (flag) { Poke(forceRestart: true); } BlockPlacementData digValue = block.GetDigValue(m_subsystemTerrain, this, cellValue, activeBlockValue, raycastResult); m_subsystemTerrain.DestroyCell(block2.ToolLevel, digValue.CellFace.X, digValue.CellFace.Y, digValue.CellFace.Z, digValue.Value, noDrop: false, noParticleSystem: false); m_subsystemSoundMaterials.PlayImpactSound(cellValue, new Vector3(cellFace.X, cellFace.Y, cellFace.Z), 2f); DamageActiveTool(1); if (ComponentCreature.PlayerStats != null) { ComponentCreature.PlayerStats.BlocksDug++; } result = true; } else { m_subsystemSoundMaterials.PlayImpactSound(cellValue, new Vector3(cellFace.X, cellFace.Y, cellFace.Z), 1f); BlockDebrisParticleSystem particleSystem = block.CreateDebrisParticleSystem(m_subsystemTerrain, raycastResult.HitPoint(0.1f), cellValue, 0.35f); base.Project.FindSubsystem <SubsystemParticles>(throwOnError: true).AddParticleSystem(particleSystem); } } return(result); }