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