コード例 #1
0
    protected override void SetModel()
    {
        GameObject model;
        Quaternion prevRot = Quaternion.identity;

        if (transform.childCount != 0)
        {
            var p = transform.GetChild(0);
            prevRot = p.localRotation;
            Destroy(p.gameObject);
        }
        else
        {
            prevRot = Quaternion.Euler(0f, 45f * modelRotation, 0f);
        }
        if (level < 2)
        {
            model = Instantiate(Resources.Load <GameObject>("Structures/ZeppelinBasement"));
        }
        else
        {
            model = Instantiate(Resources.Load <GameObject>("Structures/Buildings/HQ_level_" + level.ToString()));
        }
        model.transform.parent        = transform;
        model.transform.localRotation = prevRot;
        model.transform.localPosition = Vector3.zero;
        if (!PoolMaster.useDefaultMaterials)
        {
            PoolMaster.ReplaceMaterials(model);
        }
    }
コード例 #2
0
ファイル: Zeppelin.cs プロジェクト: Hengle/VoxelGame
    void Start()
    {
        float   x    = Random.value * 360;
        float   cs   = Chunk.chunkSize / 2;
        Vector3 rpos = Quaternion.AngleAxis(x, Vector3.up) * Vector3.forward * cs * 1.5f * Block.QUAD_SIZE;

        rpos.y             = cs;
        rpos.x            += cs;
        rpos.z            += cs;
        transform.position = rpos;
        Vector3 v = GameMaster.sceneCenter - transform.position;

        v.y = 0;
        transform.forward = Quaternion.AngleAxis(-90, Vector3.up) * v;
        leftScrew.Rotate(0, Random.value * 360, 0);
        rightScrew.Rotate(0, Random.value * 360, 0);

        landingMarkObject = Instantiate(Resources.Load <GameObject>("Prefs/LandingX")) as GameObject;
        landingMarkObject.SetActive(false);
        lineDrawer = GetComponent <LineRenderer>();

        if (current != null)
        {
            Destroy(current);
        }
        current = this;
        if (PoolMaster.useAdvancedMaterials)
        {
            PoolMaster.ReplaceMaterials(gameObject, true);
        }
        UIController.current.BindLandButton(this);
    }
コード例 #3
0
    override protected void SetModel()
    {
        if (type == Settlement.SettlementStructureType.Empty)
        {
            return;
        }
        GameObject model;
        Quaternion prevRot = Quaternion.identity;

        if (transform.childCount != 0)
        {
            var p = transform.GetChild(0);
            prevRot = p.localRotation;
            Destroy(p.gameObject);
        }
        switch (type)
        {
        case Settlement.SettlementStructureType.House:
            switch (level)
            {
            case 8:
            case 7:
            case 6: model = Instantiate(Resources.Load <GameObject>("Structures/Settlement/housePart_lvl6")); break;

            case 5: model = Instantiate(Resources.Load <GameObject>("Structures/Settlement/housePart_lvl5")); break;

            case 4: model = Instantiate(Resources.Load <GameObject>("Structures/Settlement/housePart_lvl4")); break;

            case 3: model = Instantiate(Resources.Load <GameObject>("Structures/Settlement/housePart_lvl3")); break;

            case 2: model = Instantiate(Resources.Load <GameObject>("Structures/Settlement/housePart_lvl2")); break;

            default:  model = Instantiate(Resources.Load <GameObject>("Structures/Settlement/housePart_lvl1")); break;
            }
            break;

        case Settlement.SettlementStructureType.Shop:
            model = Instantiate(Resources.Load <GameObject>("Structures/Settlement/shopPart"));
            break;

        case Settlement.SettlementStructureType.Garden:
            model = Instantiate(Resources.Load <GameObject>("Structures/Settlement/parkPart"));
            // also using by Gardens.cs
            break;

        default:
            model = GameObject.CreatePrimitive(PrimitiveType.Cube);
            break;
        }
        model.transform.parent        = transform;
        model.transform.localRotation = prevRot;
        model.transform.localPosition = Vector3.zero;
        if (PoolMaster.useAdvancedMaterials)
        {
            PoolMaster.ReplaceMaterials(model, true);
        }
    }
コード例 #4
0
ファイル: OakTree.cs プロジェクト: Hengle/VoxelGame
    static GameObject LoadModel(byte stage)
    {
        GameObject g = Instantiate(Resources.Load <GameObject>("Lifeforms/oak-" + stage.ToString()));

        if (PoolMaster.useAdvancedMaterials)
        {
            PoolMaster.ReplaceMaterials(g, true);
        }
        return(g);
    }
コード例 #5
0
    public static GameObject LoadModel(byte stage)
    {
        GameObject g = Instantiate(Resources.Load <GameObject>("Lifeforms/oak-" + stage.ToString()));

        if (!PoolMaster.useDefaultMaterials)
        {
            PoolMaster.ReplaceMaterials(g);
        }
        return(g);
    }
コード例 #6
0
    override public void SetBasement(Plane p, PixelPosByte pos)
    {
        if (p == null)
        {
            return;
        }
        //
        basement = p;
        if (transform.childCount == 0)
        {
            var fi = basement.faceIndex;
            if (fi == Block.SURFACE_FACE_INDEX || fi == Block.UP_FACE_INDEX || fi == Block.CEILING_FACE_INDEX || fi == Block.DOWN_FACE_INDEX)
            {
                model       = Instantiate(Resources.Load <GameObject>("Structures/Column"));
                surfaceRect = new SurfaceRect(0, 0, 4);
                surfaceRect = new SurfaceRect((byte)(PlaneExtension.INNER_RESOLUTION / 2 - surfaceRect.size / 2), (byte)(PlaneExtension.INNER_RESOLUTION / 2 - surfaceRect.size / 2), surfaceRect.size);
            }
            else
            {
                model = Instantiate(Resources.Load <GameObject>("Structures/ColumnEdge"));
                switch (fi)
                {
                case Block.FWD_FACE_INDEX: model.transform.rotation = Quaternion.Euler(0f, 180f, 0f); break;

                case Block.RIGHT_FACE_INDEX: model.transform.rotation = Quaternion.Euler(0f, -90f, 0f); break;

                case Block.LEFT_FACE_INDEX: model.transform.rotation = Quaternion.Euler(0f, 90f, 0f); break;

                case Block.BACK_FACE_INDEX: model.transform.rotation = Quaternion.Euler(Vector3.zero); break;
                }
                surfaceRect = SurfaceRect.full;
            }
            model.transform.parent        = transform;
            model.transform.localPosition = Vector3.zero;
            if (!PoolMaster.useDefaultMaterials)
            {
                PoolMaster.ReplaceMaterials(model);
            }
        }
        placeInCenter = true;
        basement.AddStructure(this);
        //
        if (!GameMaster.loading)
        {
            IPlanableSupportClass.AddBlockRepresentation(this, basement, ref myBlock, true);
        }
    }
コード例 #7
0
    override protected void SetModel()
    {
        if (type == Settlement.SettlementStructureType.Empty)
        {
            return;
        }
        GameObject model;
        Quaternion prevRot = Quaternion.identity;

        if (transform.childCount != 0)
        {
            var p = transform.GetChild(0);
            prevRot = p.localRotation;
            Destroy(p.gameObject);
        }
        bool replacementCheck = true;

        switch (type)
        {
        case Settlement.SettlementStructureType.House:
            model            = GetHouseModel(level);
            replacementCheck = false;
            break;

        case Settlement.SettlementStructureType.Shop:
            model = Instantiate(Resources.Load <GameObject>("Structures/Settlement/shopPart"));
            break;

        case Settlement.SettlementStructureType.Garden:
            model = Instantiate(Resources.Load <GameObject>("Structures/Settlement/parkPart"));
            // also using by Gardens.cs
            break;

        default:
            model = GameObject.CreatePrimitive(PrimitiveType.Cube);
            break;
        }
        model.transform.parent        = transform;
        model.transform.localRotation = prevRot;
        model.transform.localPosition = Vector3.zero;
        if (!PoolMaster.useDefaultMaterials & replacementCheck)
        {
            PoolMaster.ReplaceMaterials(model);
        }
    }
コード例 #8
0
    void Start()
    {
        float   x    = Random.value * 360;
        float   cs   = Chunk.chunkSize / 2;
        Vector3 rpos = Quaternion.AngleAxis(x, Vector3.up) * Vector3.forward * cs * 1.5f * Block.QUAD_SIZE;

        rpos.y             = cs;
        rpos.x            += cs;
        rpos.z            += cs;
        transform.position = rpos;
        Vector3 v = GameMaster.sceneCenter - transform.position;

        v.y = 0;
        transform.forward = Quaternion.AngleAxis(-90, Vector3.up) * v;
        leftScrew.Rotate(0, Random.value * 360, 0);
        rightScrew.Rotate(0, Random.value * 360, 0);

        landingMarkObject = Instantiate(Resources.Load <GameObject>("Prefs/LandingX")) as GameObject;
        landingMarkObject.SetActive(false);
        lineDrawer = GetComponent <LineRenderer>();

        if (current != null)
        {
            Destroy(current);
        }
        current = this;
        if (!PoolMaster.useDefaultMaterials)
        {
            PoolMaster.ReplaceMaterials(gameObject);
        }

        landingCanvas = Instantiate(Resources.Load <GameObject>("UIPrefs/landingCanvas")).transform;
        landingCanvas.GetComponentInChildren <UnityEngine.UI.Text>().text = Localization.GetWord(LocalizedWord.Land_verb);
        UIController.GetCurrent().AddSpecialCanvasToHolder(landingCanvas);
        landingCanvas.GetChild(0).GetComponent <UnityEngine.UI.Button>().onClick.AddListener(this.Raycasting);
        landButton = landingCanvas.GetChild(1).gameObject;
        landButton.SetActive(false);
        landButton.GetComponent <UnityEngine.UI.Button>().onClick.AddListener(this.LandActionAccepted);
    }
コード例 #9
0
    protected override void SetModel()
    {
        Transform model         = Instantiate(Resources.Load <GameObject>("Prefs/defaultContainer")).transform;
        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
            );
        model_id            = ContainerModelType.Default;
        model.parent        = transform;
        model.localPosition = Vector3.zero;
        model.localRotation = Quaternion.Euler(Vector3.zero);
        if (PoolMaster.useAdvancedMaterials)
        {
            PoolMaster.ReplaceMaterials(model.gameObject, true);
        }
    }
コード例 #10
0
    protected override void SetModel()
    {
        GameObject model;

        if (transform.childCount != 0)
        {
            Destroy(transform.GetChild(0).gameObject);
        }
        if (level < 2)
        {
            model = Instantiate(Resources.Load <GameObject>("Structures/ZeppelinBasement"));
        }
        else
        {
            model = Instantiate(Resources.Load <GameObject>("Structures/Buildings/HQ_level_" + level.ToString()));
        }
        model.transform.parent        = transform;
        model.transform.localRotation = Quaternion.Euler(0, 0, 0);
        model.transform.localPosition = Vector3.zero;
        if (PoolMaster.useAdvancedMaterials)
        {
            PoolMaster.ReplaceMaterials(model, true);
        }
    }
コード例 #11
0
    /// <summary>
    /// Make checks before invoking
    /// </summary>
    public int CreateLODPack(LODPackType i_lpackType, GameObject model, RenderPoint[] renderPoints, int resolution, float shotSize, Color backgroundColor, LODRegisterInfo regInfo)
    {
        backgroundColor.a = 0;
        LODController lcontroller = LODController.GetCurrent();

        backgroundColor.a = 0;
        int savedLayer  = model.layer;
        var layerNumber = 8;

        Renderer[] allObjects = model.transform.GetComponentsInChildren <Renderer>();
        foreach (Renderer r in allObjects)
        {
            r.gameObject.layer = layerNumber;
        }
        if (!PoolMaster.useDefaultMaterials)
        {
            PoolMaster.ReplaceMaterials(allObjects);
        }

        cam.orthographicSize = shotSize;
        cam.backgroundColor  = backgroundColor;

        RenderTexture m_RenderTexture = new RenderTexture(resolution, resolution, 8, RenderTextureFormat.ARGB32);

        cam.transform.parent        = model.transform;
        cam.transform.localRotation = Quaternion.Euler(Vector3.up * 180);

        cam.enabled = true;
        Texture2D atlas;

        switch (i_lpackType)
        {
        case LODPackType.Point:
        {
            cam.transform.localPosition = renderPoints[0].position;
            cam.transform.localRotation = Quaternion.Euler(renderPoints[0].rotation);
            m_RenderTexture.Create();
            cam.targetTexture = m_RenderTexture;
            cam.Render();
            RenderTexture.active = m_RenderTexture;
            atlas = new Texture2D(resolution, resolution);
            atlas.ReadPixels(new Rect(0, 0, resolution, resolution), 0, 0);
            atlas.Apply();
            break;
        }

        case LODPackType.OneSide:
        {
            Texture2D[] spriteRenders = new Texture2D[4];
            // 0 degrees
            cam.transform.localPosition = renderPoints[0].position;
            cam.transform.localRotation = Quaternion.Euler(renderPoints[0].rotation);
            m_RenderTexture.Create();
            cam.targetTexture = m_RenderTexture;
            cam.Render();
            RenderTexture.active = m_RenderTexture;
            spriteRenders[0]     = new Texture2D(resolution, resolution);
            spriteRenders[0].ReadPixels(new Rect(0, 0, resolution, resolution), 0, 0);
            spriteRenders[0].Apply();
            // 22.5 degrees
            cam.transform.localPosition = renderPoints[1].position;
            cam.transform.localRotation = Quaternion.Euler(renderPoints[1].rotation);
            m_RenderTexture.Create();
            cam.targetTexture = m_RenderTexture;
            cam.Render();
            RenderTexture.active = m_RenderTexture;
            spriteRenders[1]     = new Texture2D(resolution, resolution);
            spriteRenders[1].ReadPixels(new Rect(0, 0, resolution, resolution), 0, 0);
            spriteRenders[1].Apply();
            // 45 degrees
            cam.transform.localPosition = renderPoints[2].position;
            cam.transform.localRotation = Quaternion.Euler(renderPoints[2].rotation);
            m_RenderTexture.Create();
            cam.targetTexture = m_RenderTexture;
            cam.Render();
            RenderTexture.active = m_RenderTexture;
            spriteRenders[2]     = new Texture2D(resolution, resolution);
            spriteRenders[2].ReadPixels(new Rect(0, 0, resolution, resolution), 0, 0);
            spriteRenders[2].Apply();
            // 85 degrees
            cam.transform.localPosition = renderPoints[3].position;
            cam.transform.localRotation = Quaternion.Euler(renderPoints[3].rotation);
            m_RenderTexture.Create();
            cam.targetTexture = m_RenderTexture;
            cam.Render();
            RenderTexture.active = m_RenderTexture;
            spriteRenders[3]     = new Texture2D(resolution, resolution);
            spriteRenders[3].ReadPixels(new Rect(0, 0, resolution, resolution), 0, 0);
            spriteRenders[3].Apply();

            atlas = new Texture2D(2 * resolution, 2 * resolution);
            atlas.PackTextures(spriteRenders, 0, 2 * resolution, false);
            break;
        }

        case LODPackType.Full:
        {
            Texture2D[] spriteRenders = new Texture2D[32];
            int         index         = 0;
            for (int i = 0; i < 8; i++)
            {
                // 0 degrees
                cam.transform.localPosition = renderPoints[index].position;
                cam.transform.localRotation = Quaternion.Euler(renderPoints[index].rotation);
                m_RenderTexture.Create();
                cam.targetTexture = m_RenderTexture;
                cam.Render();
                RenderTexture.active = m_RenderTexture;
                spriteRenders[index] = new Texture2D(resolution, resolution);
                spriteRenders[index].ReadPixels(new Rect(0, 0, resolution, resolution), 0, 0);
                spriteRenders[index].Apply();
                index++;
                // 22.5 degrees
                cam.transform.localPosition = renderPoints[index].position;
                cam.transform.localRotation = Quaternion.Euler(renderPoints[index].rotation);
                m_RenderTexture.Create();
                cam.targetTexture = m_RenderTexture;
                cam.Render();
                RenderTexture.active = m_RenderTexture;
                spriteRenders[index] = new Texture2D(resolution, resolution);
                spriteRenders[index].ReadPixels(new Rect(0, 0, resolution, resolution), 0, 0);
                spriteRenders[index].Apply();
                index++;
                // 45 degrees
                cam.transform.localPosition = renderPoints[index].position;
                cam.transform.localRotation = Quaternion.Euler(renderPoints[index].rotation);
                m_RenderTexture.Create();
                cam.targetTexture = m_RenderTexture;
                cam.Render();
                RenderTexture.active = m_RenderTexture;
                spriteRenders[index] = new Texture2D(resolution, resolution);
                spriteRenders[index].ReadPixels(new Rect(0, 0, resolution, resolution), 0, 0);
                spriteRenders[index].Apply();
                index++;
                // 85 degrees
                cam.transform.localPosition = renderPoints[index].position;
                cam.transform.localRotation = Quaternion.Euler(renderPoints[index].rotation);
                m_RenderTexture.Create();
                cam.targetTexture = m_RenderTexture;
                cam.Render();
                RenderTexture.active = m_RenderTexture;
                spriteRenders[index] = new Texture2D(resolution, resolution);
                spriteRenders[index].ReadPixels(new Rect(0, 0, resolution, resolution), 0, 0);
                spriteRenders[index].Apply();
                index++;
            }
            atlas = new Texture2D(4 * resolution, 8 * resolution);
            atlas.PackTextures(spriteRenders, 0, 8 * resolution, false);
            break;
        }

        default: return(-1);
        }


        cam.enabled          = false;
        cam.transform.parent = null;
        RenderTexture.active = null;

        foreach (Renderer r in allObjects)
        {
            r.gameObject.layer = savedLayer;
        }
        if (!PoolMaster.useDefaultMaterials)
        {
            PoolMaster.ReplaceMaterials(allObjects);
        }
        return(lcontroller.RegisterLOD(new LODRegistrationTicket(regInfo, atlas, i_lpackType)));
    }
コード例 #12
0
ファイル: Gardens.cs プロジェクト: Hengle/VoxelGame
    override protected void SetModel()
    {
        //switch skin index
        GameObject model;
        Quaternion prevRot = Quaternion.identity;

        if (transform.childCount != 0)
        {
            return;
        }
        model = new GameObject("gardenModel");
        model.transform.parent        = transform;
        model.transform.localRotation = prevRot;
        model.transform.localPosition = Vector3.zero;

        //generating model info
        if (modelsInfo == null)
        {
            var   milist = new List <byte>();
            float f = Random.value;
            byte  modelCode = 0, posCodeX = 0, posCodeZ = 0;
            // 0-8, 0-8
            if (f > 0.5f)
            {
                f *= 2f;
                if (f <= 0.4f) // small
                {
                    f /= 0.4f;
                    if (f > 0.6f)
                    {
                        if (f > 0.9f)
                        {
                            modelCode = SMALL_TOWER_ID;
                        }
                        else
                        {
                            modelCode = SMALL_TANK_ID;
                        }
                    }
                    else
                    {
                        if (f < 0.4f)
                        {
                            modelCode = SMALL_HIGHTREE_ID;
                        }
                        else
                        {
                            modelCode = SMALL_PARK_ID;
                        }
                    }
                    f = Random.value;
                    if (f > 0.5f)
                    {
                        if (f > 0.75f)
                        {
                            posCodeX = 0; posCodeZ = 4;
                        }
                        else
                        {
                            posCodeX = 0; posCodeZ = 0;
                        }
                    }
                    else
                    {
                        if (f > 0.25f)
                        {
                            posCodeX = 4; posCodeZ = 0;
                        }
                        else
                        {
                            posCodeX = 4; posCodeZ = 4;
                        }
                    }
                }
                else
                {
                    if (f >= 0.8f) // big
                    {
                        f = (f - 0.8f) / 0.2f;
                        if (f > 0.65f)
                        {
                            modelCode = BIG_HIGHPARK_ID;
                        }
                        else
                        {
                            modelCode = BIG_MIDPARK_ID;
                        }
                        posCodeX = 0;
                        posCodeZ = 0;
                    }
                    else // double
                    {
                        f = (f - 0.4f) / 0.4f;
                        if (f > 0.65f)
                        {
                            modelCode = DOUBLE_HIGHPARK_ID;
                        }
                        else
                        {
                            modelCode = DOUBLE_MIDPARK_ID;
                        }
                        posCodeX = 0;
                        posCodeZ = 0;
                    }
                }
                milist.Add(posCodeX);
                milist.Add(posCodeZ);
                milist.Add(modelCode);
            }
            // 8-16, 0-8
            f = Random.value;
            if (f > 0.5f)
            {
                f *= 2f;
                if (f <= 0.4f) // small
                {
                    f /= 0.4f;
                    if (f > 0.6f)
                    {
                        if (f > 0.9f)
                        {
                            modelCode = SMALL_TOWER_ID;
                        }
                        else
                        {
                            modelCode = SMALL_TANK_ID;
                        }
                    }
                    else
                    {
                        if (f < 0.4f)
                        {
                            modelCode = SMALL_HIGHTREE_ID;
                        }
                        else
                        {
                            modelCode = SMALL_PARK_ID;
                        }
                    }
                    f = Random.value;
                    if (f > 0.5f)
                    {
                        if (f > 0.75f)
                        {
                            posCodeX = 8; posCodeZ = 4;
                        }
                        else
                        {
                            posCodeX = 8; posCodeZ = 0;
                        }
                    }
                    else
                    {
                        if (f > 0.25f)
                        {
                            posCodeX = 12; posCodeZ = 0;
                        }
                        else
                        {
                            posCodeX = 12; posCodeZ = 4;
                        }
                    }
                }
                else
                {
                    if (f >= 0.8f) // big
                    {
                        f = (f - 0.8f) / 0.2f;
                        if (f > 0.65f)
                        {
                            modelCode = BIG_HIGHPARK_ID;
                        }
                        else
                        {
                            modelCode = BIG_MIDPARK_ID;
                        }
                        posCodeX = 8;
                        posCodeZ = 0;
                    }
                    else // double
                    {
                        f = (f - 0.4f) / 0.4f;
                        if (f > 0.65f)
                        {
                            modelCode = DOUBLE_HIGHPARK_ID;
                        }
                        else
                        {
                            modelCode = DOUBLE_MIDPARK_ID;
                        }
                        posCodeX = 8;
                        posCodeZ = 0;
                    }
                }
                milist.Add(posCodeX);
                milist.Add(posCodeZ);
                milist.Add(modelCode);
            }
            // 0-8, 8-16
            f = Random.value;
            if (f > 0.5f)
            {
                f *= 2f;
                if (f <= 0.4f) // small
                {
                    f /= 0.4f;
                    if (f > 0.6f)
                    {
                        if (f > 0.9f)
                        {
                            modelCode = SMALL_TOWER_ID;
                        }
                        else
                        {
                            modelCode = SMALL_TANK_ID;
                        }
                    }
                    else
                    {
                        if (f < 0.4f)
                        {
                            modelCode = SMALL_HIGHTREE_ID;
                        }
                        else
                        {
                            modelCode = SMALL_PARK_ID;
                        }
                    }
                    f = Random.value;
                    if (f > 0.5f)
                    {
                        if (f > 0.75f)
                        {
                            posCodeX = 0; posCodeZ = 12;
                        }
                        else
                        {
                            posCodeX = 0; posCodeZ = 8;
                        }
                    }
                    else
                    {
                        if (f > 0.25f)
                        {
                            posCodeX = 4; posCodeZ = 8;
                        }
                        else
                        {
                            posCodeX = 4; posCodeZ = 12;
                        }
                    }
                }
                else
                {
                    if (f >= 0.8f) // big
                    {
                        f = (f - 0.8f) / 0.2f;
                        if (f > 0.65f)
                        {
                            modelCode = BIG_HIGHPARK_ID;
                        }
                        else
                        {
                            modelCode = BIG_MIDPARK_ID;
                        }
                        posCodeX = 0;
                        posCodeZ = 8;
                    }
                    else // double
                    {
                        f = (f - 0.4f) / 0.4f;
                        if (f > 0.65f)
                        {
                            modelCode = DOUBLE_HIGHPARK_ID;
                        }
                        else
                        {
                            modelCode = DOUBLE_MIDPARK_ID;
                        }
                        posCodeX = 0;
                        posCodeZ = 8;
                    }
                }
                milist.Add(posCodeX);
                milist.Add(posCodeZ);
                milist.Add(modelCode);
            }
            // 8- 16, 8 - 16
            f = Random.value;
            if (f <= 0.4f) // small
            {
                f /= 0.4f;
                if (f > 0.6f)
                {
                    if (f > 0.9f)
                    {
                        modelCode = SMALL_TOWER_ID;
                    }
                    else
                    {
                        modelCode = SMALL_TANK_ID;
                    }
                }
                else
                {
                    if (f < 0.4f)
                    {
                        modelCode = SMALL_HIGHTREE_ID;
                    }
                    else
                    {
                        modelCode = SMALL_PARK_ID;
                    }
                }
                f = Random.value;
                if (f > 0.5f)
                {
                    if (f > 0.75f)
                    {
                        posCodeX = 8; posCodeZ = 12;
                    }
                    else
                    {
                        posCodeX = 8; posCodeZ = 8;
                    }
                }
                else
                {
                    if (f > 0.25f)
                    {
                        posCodeX = 12; posCodeZ = 8;
                    }
                    else
                    {
                        posCodeX = 12; posCodeZ = 12;
                    }
                }
            }
            else
            {
                if (f >= 0.8f) // big
                {
                    f = (f - 0.8f) / 0.2f;
                    if (f > 0.65f)
                    {
                        modelCode = BIG_HIGHPARK_ID;
                    }
                    else
                    {
                        modelCode = BIG_MIDPARK_ID;
                    }
                    posCodeX = 8;
                    posCodeZ = 8;
                }
                else // double
                {
                    f = (f - 0.4f) / 0.4f;
                    if (f > 0.65f)
                    {
                        modelCode = DOUBLE_HIGHPARK_ID;
                    }
                    else
                    {
                        modelCode = DOUBLE_MIDPARK_ID;
                    }
                    posCodeX = 8;
                    posCodeZ = 8;
                }
            }
            milist.Add(posCodeX);
            milist.Add(posCodeZ);
            milist.Add(modelCode);
            //
            modelsInfo = milist.ToArray();
        }
        //constructing model
        int        i      = 0;
        byte       size   = 0;
        var        mlist  = new List <GameObject>();
        GameObject g      = null;
        Transform  parent = model.transform;
        float      ir     = (float)PlaneExtension.INNER_RESOLUTION;

        while (i < modelsInfo.Length)
        {
            switch (modelsInfo[i])
            {
            case SMALL_PARK_ID:
                g = Instantiate(Resources.Load <GameObject>("Structures/Settlement/parkPart"));
                break;

            case SMALL_TOWER_ID:
                g = Instantiate(Resources.Load <GameObject>("Prefs/Gardenparts/small_mast"));
                break;

            case SMALL_TANK_ID:
                g = Instantiate(Resources.Load <GameObject>("Prefs/Gardenparts/small_tank"));
                break;

            case SMALL_HIGHTREE_ID:
                g = Instantiate(Resources.Load <GameObject>("Prefs/Gardenparts/small_hightree"));
                break;

            case DOUBLE_HIGHPARK_ID:
                size = 2;
                g    = Instantiate(Resources.Load <GameObject>("Prefs/Gardenparts/double_highpark"));
                break;

            case DOUBLE_MIDPARK_ID:
                size = 2;
                g    = Instantiate(Resources.Load <GameObject>("Prefs/Gardenparts/double_midhpark"));
                break;

            case BIG_HIGHPARK_ID:
                size = 1;
                g    = Instantiate(Resources.Load <GameObject>("Prefs/Gardenparts/big_highpark"));
                break;

            case BIG_MIDPARK_ID:
                size = 1;
                g    = Instantiate(Resources.Load <GameObject>("Prefs/Gardenparts/big_midpark"));
                break;
            }
            if (g != null)
            {
                g.transform.parent        = parent;
                g.transform.localPosition =
                    (Vector3.right * (modelsInfo[i + 1] / ir - 0.5f)) * Block.QUAD_SIZE +
                    (Vector3.forward * (modelsInfo[i + 2] / ir - 0.5f)) * Block.QUAD_SIZE;
            }
            i += 3;
        }
        //
        if (PoolMaster.useAdvancedMaterials)
        {
            PoolMaster.ReplaceMaterials(model, true);
        }
    }
コード例 #13
0
    public static GameObject GetHouseModel(byte lvl)
    {
        GameObject m;

        switch (lvl)
        {
        case 8:
        case 7:
        case 6:
            if (housesPrefs[5] == null)
            {
                housesPrefs[5] = Resources.Load <GameObject>("Structures/Settlement/housePart_lvl6");
            }
            m = Instantiate(housesPrefs[5]);
            break;

        case 5:
            if (housesPrefs[4] == null)
            {
                housesPrefs[4] = Resources.Load <GameObject>("Structures/Settlement/housePart_lvl5");
            }
            m = Instantiate(housesPrefs[4]);
            break;

        case 4:
            if (housesPrefs[3] == null)
            {
                housesPrefs[3] = Resources.Load <GameObject>("Structures/Settlement/housePart_lvl4");
            }
            m = Instantiate(housesPrefs[3]);
            break;

        case 3:
            if (housesPrefs[2] == null)
            {
                housesPrefs[2] = Resources.Load <GameObject>("Structures/Settlement/housePart_lvl3");
            }
            m = Instantiate(housesPrefs[2]);
            break;

        case 2:
            if (housesPrefs[1] == null)
            {
                housesPrefs[1] = Resources.Load <GameObject>("Structures/Settlement/housePart_lvl2");
            }
            m = Instantiate(housesPrefs[1]);
            break;

        default:
            if (housesPrefs[0] == null)
            {
                housesPrefs[0] = Resources.Load <GameObject>("Structures/Settlement/housePart_lvl1");
            }
            m = Instantiate(housesPrefs[0]);
            break;
        }
        if (!PoolMaster.useDefaultMaterials)
        {
            PoolMaster.ReplaceMaterials(m);
        }
        return(m);
    }