コード例 #1
0
    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);
    }
コード例 #2
0
 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);
 }
コード例 #3
0
    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);
            }
        }
    }