Ejemplo n.º 1
0
        private void UpdateStats()
        {
            ProfilerShort.Begin("Updating stats");
            m_totalBlocks = ProjectedGrid.CubeBlocks.Count;

            m_remainingArmorBlocks = 0;
            m_remainingBlocksPerType.Clear();

            foreach (var projectedBlock in ProjectedGrid.CubeBlocks)
            {
                Vector3  worldPosition = ProjectedGrid.GridIntegerToWorld(projectedBlock.Position);
                Vector3I realPosition  = CubeGrid.WorldToGridInteger(worldPosition);
                var      realBlock     = CubeGrid.GetCubeBlock(realPosition);
                if (realBlock == null || projectedBlock.BlockDefinition.Id != realBlock.BlockDefinition.Id)
                {
                    if (projectedBlock.FatBlock == null)
                    {
                        m_remainingArmorBlocks++;
                    }
                    else
                    {
                        if (!m_remainingBlocksPerType.ContainsKey(projectedBlock.BlockDefinition))
                        {
                            m_remainingBlocksPerType.Add(projectedBlock.BlockDefinition, 1);
                        }
                        else
                        {
                            m_remainingBlocksPerType[projectedBlock.BlockDefinition]++;
                        }
                    }
                }
            }
            ProfilerShort.End();
        }
Ejemplo n.º 2
0
        public void QualityChanged(CETO_QUALITY_SETTING newQuality)
        {
            this.currentQualitySetting = newQuality;
            if (Ocean.Instance == null)
            {
                return;
            }
            WaveSpectrum  waveSpectrum  = Ocean.Instance.Spectrum as WaveSpectrum;
            ProjectedGrid projectedGrid = Ocean.Instance.Grid as ProjectedGrid;

            OceanQualitySettings.OceanSetting oceanSetting = this.CurrentSetting();
            if (waveSpectrum != null)
            {
                waveSpectrum.fourierSize = oceanSetting.fourierSize;
                waveSpectrum.disableFoam = !oceanSetting.spectrumFoamOn;
            }
            if (projectedGrid != null)
            {
                projectedGrid.resolution = oceanSetting.meshResolution;
                if (oceanSetting.topSideMaterial != null)
                {
                    projectedGrid.oceanTopSideMat = oceanSetting.topSideMaterial;
                }
                if (oceanSetting.underSideMaterial != null)
                {
                    projectedGrid.oceanUnderSideMat = oceanSetting.underSideMaterial;
                }
            }
        }
Ejemplo n.º 3
0
        void previewGrid_OnBlockAdded(MySlimBlock obj)
        {
            m_shouldUpdateProjection = true;
            m_shouldUpdateTexts      = true; // Text should always be updated, not only when terminal block is added, armor blocks etc also count!

            //Update groups
            if (m_originalGridBuilder == null || !IsProjecting())
            {
                return;
            }

            Vector3I transformed = ProjectedGrid.WorldToGridInteger(CubeGrid.GridIntegerToWorld(obj.Position));

            var terminalBlock = obj.FatBlock as MyTerminalBlock;

            if (terminalBlock != null)
            {
                foreach (var groupBuilder in m_originalGridBuilder.BlockGroups)
                {
                    foreach (var block in groupBuilder.Blocks)
                    {
                        if (transformed == block)
                        {
                            //Search if group already exits and add the terminal block to it
                            bool found = false;
                            for (int i = 0; i < CubeGrid.BlockGroups.Count; i++)
                            {
                                var group = CubeGrid.BlockGroups[i];
                                if (group.Name.ToString() == groupBuilder.Name)
                                {
                                    if (!group.Blocks.Contains(terminalBlock))
                                    {
                                        MyBlockGroup newGroup = new MyBlockGroup(CubeGrid);
                                        newGroup.Name = group.Name;
                                        newGroup.Blocks.Add(terminalBlock);
                                        newGroup.Blocks.AddList(group.Blocks);

                                        CubeGrid.RemoveGroup(group);

                                        CubeGrid.AddGroup(newGroup);
                                    }
                                    found = true;
                                    break;
                                }
                            }

                            //Group was not found
                            if (!found)
                            {
                                MyBlockGroup newGroup = new MyBlockGroup(CubeGrid);
                                newGroup.Name = new StringBuilder(groupBuilder.Name);
                                newGroup.Blocks.Add(terminalBlock);
                                CubeGrid.AddGroup(newGroup);
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 4
0
        private void HideIntersectedBlock()
        {
            if (m_instantBuildingEnabled)
            {
                return;
            }

            var character = MySession.Static.LocalCharacter;

            if (character == null)
            {
                return;
            }

            Vector3D position = character.GetHeadMatrix(true).Translation;

            if (ProjectedGrid == null)
            {
                return;
            }

            Vector3I    gridPosition = ProjectedGrid.WorldToGridInteger(position);
            MySlimBlock cubeBlock    = ProjectedGrid.GetCubeBlock(gridPosition);

            if (cubeBlock != null)
            {
                if (Math.Abs(cubeBlock.Dithering) < 1.0f)
                {
                    if (m_hiddenBlock != cubeBlock)
                    {
                        if (m_hiddenBlock != null)
                        {
                            ShowCube(m_hiddenBlock, CanBuild(m_hiddenBlock));
                        }
                        HideCube(cubeBlock);
                        m_hiddenBlock = cubeBlock;
                    }
                }
            }
            else
            {
                if (m_hiddenBlock != null)
                {
                    ShowCube(m_hiddenBlock, CanBuild(m_hiddenBlock));
                    m_hiddenBlock = null;
                }
            }
        }
        // Context: Server
        private void InstantSpawn(ulong activator)
        {
            ProjectedGrid grid;

            if (ProjectedGrid.TryCreate(activator, me, _settings.LooseArea, out grid))
            {
                Timer       = GetBlueprintTimer(grid.BlockCount);
                pending     = grid;
                NeedsUpdate = MyEntityUpdateEnum.EACH_FRAME;
                buildPower  = GetPower();
                BuildState  = State.Waiting;
                StringBuilder sb = new StringBuilder(Constants.msgTime);
                AppendTime(sb, Timer);
                Constants.Notify(sb.ToString(), grid.Activator);
            }
        }
Ejemplo n.º 6
0
        private void TriggerChanged()
        {
            if (Ocean.Instance == null)
            {
                return;
            }
            WaveSpectrum  waveSpectrum  = Ocean.Instance.Spectrum as WaveSpectrum;
            UnderWater    underWater    = Ocean.Instance.UnderWater as UnderWater;
            ProjectedGrid projectedGrid = Ocean.Instance.Grid as ProjectedGrid;

            OceanQualitySettings.OceanSetting oceanSetting = this.CurrentSetting();
            if (waveSpectrum != null)
            {
                if (this.m_playerInTrigger)
                {
                    waveSpectrum.foamAmount -= Time.deltaTime * this.whiteCapFadeRate;
                    waveSpectrum.foamAmount  = Mathf.Max(0f, waveSpectrum.foamAmount);
                    if (this.disableSpectrumOnTrigger)
                    {
                        waveSpectrum.disableDisplacements = true;
                        waveSpectrum.disableSlopes        = true;
                        if (waveSpectrum.foamAmount <= 0f)
                        {
                            waveSpectrum.disableFoam = true;
                        }
                    }
                }
                else
                {
                    waveSpectrum.foamAmount          += Time.deltaTime * this.whiteCapFadeRate;
                    waveSpectrum.foamAmount           = Mathf.Min(this.whiteCapAmount, waveSpectrum.foamAmount);
                    waveSpectrum.disableDisplacements = false;
                    waveSpectrum.disableSlopes        = false;
                    waveSpectrum.disableFoam          = !oceanSetting.spectrumFoamOn;
                }
            }
            if (underWater != null)
            {
                if (this.m_playerInTrigger)
                {
                    if (this.disableUnderWaterOnTrigger)
                    {
                        underWater.enabled = false;
                    }
                }
                else
                {
                    underWater.enabled = true;
                }
            }
            if (projectedGrid != null)
            {
                if (this.m_playerInTrigger)
                {
                    projectedGrid.resolution = this.meshResolutionOnTrigger;
                }
                else
                {
                    projectedGrid.resolution = oceanSetting.meshResolution;
                }
            }
        }
Ejemplo n.º 7
0
        private void UpdateProjection()
        {
            if (m_instantBuildingEnabled)
            {
                if (ProjectedGrid != null)
                {
                    foreach (var projectedBlock in ProjectedGrid.CubeBlocks)
                    {
                        ShowCube(projectedBlock, true);
                    }

                    m_clipboard.HasPreviewBBox = true;
                }
            }
            else
            {
                m_hiddenBlock = null;
                if (m_clipboard.PreviewGrids.Count == 0)
                {
                    return;
                }

                m_remainingBlocks = ProjectedGrid.CubeBlocks.Count;

                ProjectedGrid.Render.Transparency = 0f;

                m_buildableBlocksCount = 0;

                m_visibleBlocks.Clear();
                m_buildableBlocks.Clear();
                m_hiddenBlocks.Clear();

                ProfilerShort.Begin("Update cube visibility");
                foreach (var projectedBlock in ProjectedGrid.CubeBlocks)
                {
                    Vector3  worldPosition = ProjectedGrid.GridIntegerToWorld(projectedBlock.Position);
                    Vector3I realPosition  = CubeGrid.WorldToGridInteger(worldPosition);
                    var      realBlock     = CubeGrid.GetCubeBlock(realPosition);
                    if (realBlock != null && projectedBlock.BlockDefinition.Id == realBlock.BlockDefinition.Id)
                    {
                        m_hiddenBlocks.Add(projectedBlock);
                        m_remainingBlocks--;
                    }
                    else
                    {
                        bool canBuild = CanBuild(projectedBlock);
                        if (canBuild)
                        {
                            m_buildableBlocks.Add(projectedBlock);
                            m_buildableBlocksCount++;
                        }
                        else
                        {
                            if (m_showOnlyBuildable)
                            {
                                m_hiddenBlocks.Add(projectedBlock);
                            }
                            else
                            {
                                m_visibleBlocks.Add(projectedBlock);
                            }
                        }
                    }
                }

                foreach (var block in m_visibleBlocks)
                {
                    ShowCube(block, false);
                }
                foreach (var block in m_buildableBlocks)
                {
                    ShowCube(block, true);
                }
                foreach (var block in m_hiddenBlocks)
                {
                    HideCube(block);
                }
                ProfilerShort.End();


                if (m_remainingBlocks == 0 && !m_keepProjection)
                {
                    RemoveProjection(m_keepProjection);
                }
                else
                {
                    UpdateEmissivity();
                }

                m_statsDirty = true;
                if (m_shouldUpdateTexts)
                {
                    UpdateText();
                    m_shouldUpdateTexts = false;
                }

                m_clipboard.HasPreviewBBox = false;
            }
        }