public override bool Equals(object obj) { // Check for null values and compare run-time types. if (obj == null || GetType() != obj.GetType()) { return(false); } PlaneBoundLODModel b = (PlaneBoundLODModel)obj; return(basement == b.basement && model == b.model && spriter == b.spriter); }
override public void Annihilate(StructureAnnihilationOrder order) { if (destroyed) { return; } else { destroyed = true; } if (lodComponent != null) { lodComponent.PrepareToDestroy(); lodComponent = null; } PrepareStructureForDestruction(order); basement = null; Destroy(gameObject); }
protected override void SetModel() { if (transform.childCount == 0) { GameObject model; bool createSpriteLOD = false; LODRegisterInfo regInfo = new LODRegisterInfo(0, 0, 0); float height = 0; switch (model_id) { case ContainerModelType.DeadLifestone: { model = Instantiate(Resources.Load <GameObject>("Structures/LifeStone")); Destroy(model.transform.GetChild(0).gameObject); Destroy(model.transform.GetChild(1).gameObject); MeshRenderer[] mrrs = model.GetComponentsInChildren <MeshRenderer>(); foreach (MeshRenderer mr in mrrs) { mr.sharedMaterial = PoolMaster.GetMaterial(MaterialType.Basic); } break; } case ContainerModelType.DeadTreeOfLife: { model = Instantiate(Resources.Load <GameObject>("Lifeforms/deadTreeOfLife")); break; } case ContainerModelType.DeadOak4: { model = Instantiate(Resources.Load <GameObject>("Lifeforms/oak-4_dead")); createSpriteLOD = true; regInfo = new LODRegisterInfo(LODController.CONTAINER_MODEL_ID, (int)ContainerModelType.DeadOak4, 0); height = 0.211f; break; } case ContainerModelType.DeadOak5: { model = Instantiate(Resources.Load <GameObject>("Lifeforms/oak-6_dead")); createSpriteLOD = true; regInfo = new LODRegisterInfo(LODController.CONTAINER_MODEL_ID, (int)ContainerModelType.DeadOak5, 0); height = 0.211f; break; } case ContainerModelType.DeadOak6: { model = Instantiate(Resources.Load <GameObject>("Lifeforms/oak-6_dead")); createSpriteLOD = true; regInfo = new LODRegisterInfo(LODController.CONTAINER_MODEL_ID, (int)ContainerModelType.DeadOak6, 0); height = 0.211f; break; } case ContainerModelType.Pile: { model = Instantiate(Resources.Load <GameObject>("Prefs/pilePref")); createSpriteLOD = true; regInfo = new LODRegisterInfo((int)ContainerModelType.Pile, 0, mainResource.ID); height = 0.047f; Transform meshTransform = model.transform.GetChild(0); var mf = meshTransform.GetComponent <MeshFilter>(); var mr = meshTransform.GetComponent <MeshRenderer>(); PoolMaster.SetMaterialByID( ref mf, ref mr, mainResource.ID, 255 ); break; } case ContainerModelType.BerryBush: { model = Instantiate(Resources.Load <GameObject>("Prefs/berryBush")); //if (PoolMaster.shadowCasting) PoolMaster.ReplaceMaterials(model, true); break; } case ContainerModelType.Boulder: { model = Instantiate(Resources.Load <GameObject>("Prefs/boulderPref")); Transform meshTransform = model.transform.GetChild(0); var mf = meshTransform.GetComponent <MeshFilter>(); var mr = meshTransform.GetComponent <MeshRenderer>(); PoolMaster.SetMaterialByID( ref mf, ref mr, mainResource.ID, 255 ); regInfo = new LODRegisterInfo((int)ContainerModelType.Boulder, 0, mainResource.ID); createSpriteLOD = true; height = 0.047f; break; } default: { model = Instantiate(Resources.Load <GameObject>("Prefs/defaultContainer")); Transform meshTransform = model.transform.GetChild(0); var mf = meshTransform.GetComponent <MeshFilter>(); var mr = meshTransform.GetComponent <MeshRenderer>(); PoolMaster.SetMaterialByID( ref mf, ref mr, mainResource.ID, 255 ); break; } } if (createSpriteLOD) { SpriteRenderer sr = new GameObject("lod").AddComponent <SpriteRenderer>(); sr.transform.parent = model.transform; sr.transform.localPosition = Vector3.up * height; sr.sharedMaterial = !PoolMaster.useDefaultMaterials ? PoolMaster.billboardShadedMaterial : PoolMaster.billboardMaterial; if (PoolMaster.shadowCasting) { sr.receiveShadows = true; } LODController currentLC = LODController.GetCurrent(); LODPackType lpackType = LODPackType.Point; int indexInRegistered = currentLC.LOD_existanceCheck(regInfo); if (indexInRegistered == -1) { int resolution = 8; float size = 0.05f; Color backgroundColor = Color.gray; RenderPoint[] renderpoints = new RenderPoint[] { }; switch (model_id) { case ContainerModelType.Pile: { renderpoints = new RenderPoint[] { new RenderPoint(new Vector3(0, 0.084f, -0.063f), new Vector3(45, 0, 0)) }; break; } case ContainerModelType.Boulder: { renderpoints = new RenderPoint[] { new RenderPoint(new Vector3(0, 0.084f, -0.063f), new Vector3(45, 0, 0)) }; break; } case ContainerModelType.DeadOak4: { renderpoints = new RenderPoint[] { new RenderPoint(new Vector3(0, 0.222f, -0.48f), Vector3.zero), new RenderPoint(new Vector3(0, 0.479f, -0.434f), new Vector3(30, 0, 0)), new RenderPoint(new Vector3(0, 0.458f, -0.232f), new Vector3(45, 0, 0)), new RenderPoint(new Vector3(0, 0.551f, -0.074f), new Vector3(75, 0, 0)) }; size = 0.2f; resolution = 32; lpackType = LODPackType.OneSide; break; } case ContainerModelType.DeadOak5: { renderpoints = new RenderPoint[] { new RenderPoint(new Vector3(0, 0.222f, -0.48f), Vector3.zero), new RenderPoint(new Vector3(0, 0.479f, -0.434f), new Vector3(30, 0, 0)), new RenderPoint(new Vector3(0, 0.458f, -0.232f), new Vector3(45, 0, 0)), new RenderPoint(new Vector3(0, 0.551f, -0.074f), new Vector3(75, 0, 0)) }; size = 0.25f; resolution = 32; lpackType = LODPackType.OneSide; break; } case ContainerModelType.DeadOak6: { renderpoints = new RenderPoint[] { new RenderPoint(new Vector3(0, 0.222f, -0.48f), Vector3.zero), new RenderPoint(new Vector3(0, 0.479f, -0.434f), new Vector3(30, 0, 0)), new RenderPoint(new Vector3(0, 0.458f, -0.232f), new Vector3(45, 0, 0)), new RenderPoint(new Vector3(0, 0.551f, -0.074f), new Vector3(75, 0, 0)) }; size = 0.4f; resolution = 64; lpackType = LODPackType.OneSide; break; } } indexInRegistered = LODSpriteMaker.current.CreateLODPack(lpackType, model, renderpoints, resolution, size, backgroundColor, regInfo); } model.transform.parent = transform; model.transform.localPosition = Vector3.zero; model.transform.localRotation = Quaternion.Euler(Vector3.zero); lodComponent = currentLC.SetInControl(basement, model.transform.GetChild(0).gameObject, sr, indexInRegistered); } else { model.transform.parent = transform; model.transform.localPosition = Vector3.zero; model.transform.localRotation = Quaternion.Euler(Vector3.zero); } } }