override public void SetRenderBitmask(byte x) { if (renderMask == x) { return; } else { renderMask = x; if (visibilityMask == 0) { return; } else { //#surface block visibility check if (renderMask != 0 && structureBlock != null) { structureBlock.SetRenderBitmask(x); } bool allSidesInvisible = ((visibilityMask & 15) == 0); if ((visibilityMask & renderMask & 32) == 0 & allSidesInvisible) { surfaceRenderer.GetComponent <Collider>().enabled = false; surfaceRenderer.enabled = false; } else { surfaceRenderer.GetComponent <Collider>().enabled = true; surfaceRenderer.enabled = true; } //eo sblock vis check } } }
/// <summary> /// Do not use directly, use "Set Basement" instead /// </summary> /// <param name="s">S.</param> public void AddStructure(Structure s) // with autoreplacing { if (s == null) { return; } if (s.innerPosition.x > INNER_RESOLUTION | s.innerPosition.z > INNER_RESOLUTION) { print("error in structure size"); return; } if (s.innerPosition.size == 1 && s.innerPosition.size == 1) { AddCellStructure(s, new PixelPosByte(s.innerPosition.x, s.innerPosition.z)); return; } Structure savedBasementForNow = null; if (cellsStatus != 0) { SurfaceRect sr = s.innerPosition; int i = 0; if (sr == SurfaceRect.full) // destroy everything there //print("fullscale"); { ClearSurface(false); // false так как не нужна лишняя установка коллайдера surfaceRenderer.GetComponent <Collider>().enabled = false; } else { while (i < surfaceObjects.Count) { SurfaceRect a = surfaceObjects[i].innerPosition; int leftX = -1, rightX = -1; if (a.x > sr.x) { leftX = a.x; } else { leftX = sr.x; } if (a.x + a.size > sr.x + sr.size) { rightX = sr.x + sr.size; } else { rightX = a.x + a.size; } if (leftX >= rightX) { i++; continue; } int topZ = -1, downZ = -1; if (a.z > sr.z) { downZ = a.z; } else { downZ = sr.z; } if (a.z + a.size > sr.z + sr.size) { topZ = sr.z + sr.size; } else { topZ = a.z + a.size; } if (topZ <= downZ) { i++; continue; } else { if (surfaceObjects[i].isBasement) { savedBasementForNow = surfaceObjects[i]; } else { surfaceObjects[i].Annihilate(false); } i++; } } } } surfaceObjects.Add(s); s.transform.parent = transform; s.transform.localPosition = GetLocalPosition(s.innerPosition); if (visibilityMask == 0) { s.SetVisibility(false); } else { s.SetVisibility(true); } BlockRendererController brc = s.transform.GetChild(0).GetComponent <BlockRendererController>(); if (brc != null) { structureBlock = brc; brc.SetRenderBitmask(renderMask); brc.SetVisibilityMask(visibilityMask); } else { s.transform.localRotation = Quaternion.Euler(0, s.modelRotation * 45, 0); } if (s.isArtificial) { artificialStructures++; } CellsStatusUpdate(); if (savedBasementForNow != null) { savedBasementForNow.Annihilate(true); } }