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;
            }
        }
Пример #2
0
        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);
 }
Пример #5
0
        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);
        }
Пример #7
0
 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);
 }
Пример #8
0
        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);
        }
Пример #10
0
 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);
 }
Пример #11
0
 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);
 }
Пример #12
0
        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);
        }
Пример #13
0
        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);
        }
Пример #15
0
        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);
        }