void Awake()
    {
        // Check if this is the First created Instance
        // Destroy it if not
        if (Instance == null)
        {
            Instance = this;

            // Copy all original Unit Image into current play Unit Image container
            for (int i = 0; i < UnitsPrefabsContainer.Length; i++)
            {
                SpriteRenderer originalUnitSprite = UnitsOriginalPrefabsContainer[i].GetComponent<SpriteRenderer>();
                Texture2D originalTexture = originalUnitSprite.sprite.texture;
                SpriteRenderer unitSprite = UnitsPrefabsContainer[i].GetComponent<SpriteRenderer>();
                float pixelsPerUnit = originalUnitSprite.sprite.pixelsPerUnit;

                unitSprite.sprite = Sprite.Create(originalTexture, new Rect(0, 0, originalTexture.width, originalTexture.height), new Vector2(0, 0), pixelsPerUnit);
            }
        }

        //if (Instance != null && Instance != this)
        //{
        //    Destroy(gameObject);
        //    //print("destroy");
        //}

        else if (Instance != this)
        {
            Destroy(gameObject);
            //print("destroy");
        }

        DontDestroyOnLoad(gameObject);
    }
Пример #2
0
    void Awake()
    {
        // Check if this is the First created Instance
        // Destroy it if not
        if (Instance == null)
        {
            Instance = this;

            // Copy all original Unit Image into current play Unit Image container
            for (int i = 0; i < UnitsPrefabsContainer.Length; i++)
            {
                SpriteRenderer originalUnitSprite = UnitsOriginalPrefabsContainer[i].GetComponent <SpriteRenderer>();
                Texture2D      originalTexture    = originalUnitSprite.sprite.texture;
                SpriteRenderer unitSprite         = UnitsPrefabsContainer[i].GetComponent <SpriteRenderer>();
                float          pixelsPerUnit      = originalUnitSprite.sprite.pixelsPerUnit;

                unitSprite.sprite = Sprite.Create(originalTexture, new Rect(0, 0, originalTexture.width, originalTexture.height), new Vector2(0, 0), pixelsPerUnit);
            }
        }

        //if (Instance != null && Instance != this)
        //{
        //    Destroy(gameObject);
        //    //print("destroy");
        //}

        else if (Instance != this)
        {
            Destroy(gameObject);
            //print("destroy");
        }

        DontDestroyOnLoad(gameObject);
    }
Пример #3
0
    void Start()
    {
        destroyUnit           = DestroyChainedUnit.Instance;
        unitImageControl      = UnitImageController.Instance;
        _unitPrefabsContainer = unitImageControl.UnitsPrefabsContainer;

        _unitsHolder  = new GameObject("Units Holder").transform;
        _borderHolder = new GameObject("Borders Holder").transform;

        // Identify some information of the Puzzle
        _unitHeight = _unitPrefabsContainer[0].GetComponent <SpriteRenderer>().bounds.size.y;
        _unitWidth  = _unitPrefabsContainer[0].GetComponent <SpriteRenderer>().bounds.size.x;
        float cameraHeight = Camera.main.orthographicSize * 2;
        float cameraWidth  = cameraHeight * Camera.main.aspect;

        float _pixelUnitHeight  = _unitPrefabsContainer[0].GetComponent <SpriteRenderer>().sprite.texture.height;
        float _pixelUnitWidth   = _unitPrefabsContainer[0].GetComponent <SpriteRenderer>().sprite.texture.width;
        float pixelCameraHeight = Camera.main.pixelHeight;
        float pixelCameraWidth  = Camera.main.pixelWidth;

        // Puzzle starting's position
        float pixelYOffset = (cameraHeight - _unitHeight * _rows) / 2 * (pixelCameraHeight / cameraHeight);
        float pixelXOffset = (cameraWidth - _unitWidth * _columns) / 2 * (pixelCameraWidth / cameraWidth);

        _YOffset = Camera.main.ScreenToWorldPoint(new Vector3(0, pixelYOffset, 0)).y;
        _XOffset = Camera.main.ScreenToWorldPoint(new Vector3(pixelXOffset, 0, 0)).x;

        // Scale foreground covering to fit current puzzle
        float fillSize = cameraHeight - (_unitHeight * (_rows + 1) + _YOffset);

        _coverForeground.GetComponent <Image>().fillAmount = (fillSize / cameraHeight);

        // Generating value matrix
        _valueARR = generateValueMatrix();

        // Init Unit position Array
        _unitPosARR = new Vector3[_columns, _rows];

        // Init Unit gameobject Array
        _unitARR = new GameObject[_columns, _rows];

        // Identify each Unit infomation and Instantiate It
        for (int YIndex = 0; YIndex < _rows; YIndex++)
        {
            for (int XIndex = 0; XIndex < _columns; XIndex++)
            {
                // Identify position for each Unit
                _unitPosARR[XIndex, YIndex] = new Vector3(_XOffset + _unitWidth * XIndex,
                                                          _YOffset + _unitHeight * YIndex,
                                                          _unitPrefabsContainer[0].transform.position.z);
                // Instantiate Unit
                _unitARR[XIndex, YIndex] = Instantiate(_unitPrefabsContainer[_valueARR[XIndex, YIndex]._value],
                                                       _unitPosARR[XIndex, YIndex],
                                                       Quaternion.identity) as GameObject;
                _unitARR[XIndex, YIndex].transform.SetParent(_unitsHolder);
                // Set information for each Unit
                _unitARR[XIndex, YIndex].GetComponent <UnitInfo>()._value  = _valueARR[XIndex, YIndex]._value;
                _unitARR[XIndex, YIndex].GetComponent <UnitInfo>()._XIndex = XIndex;
                _unitARR[XIndex, YIndex].GetComponent <UnitInfo>()._YIndex = YIndex;
            }
        }

        #region Insantiate Puzzle border

        // Left side border
        for (int Yindex = 0; Yindex < _rows; Yindex++)
        {
            GameObject portalGate = Instantiate(_portalGatePrefab,
                                                new Vector2(_unitPosARR[0, Yindex].x, _unitPosARR[0, Yindex].y + _unitHeight),
                                                Quaternion.Euler(0, 0, 180)) as GameObject;
            portalGate.transform.SetParent(_borderHolder);
        }
        // Right side border
        for (int Yindex = 0; Yindex < _rows; Yindex++)
        {
            GameObject portalGate = Instantiate(_portalGatePrefab,
                                                new Vector2(_unitPosARR[_columns - 1, Yindex].x + _unitWidth, _unitPosARR[_columns - 1, Yindex].y),
                                                Quaternion.identity) as GameObject;
            portalGate.transform.SetParent(_borderHolder);
        }
        // Lower side border
        for (int Xindex = 0; Xindex < _columns; Xindex++)
        {
            GameObject portalGate = Instantiate(_portalGatePrefab,
                                                new Vector2(_unitPosARR[Xindex, 0].x, _unitPosARR[Xindex, 0].y),
                                                Quaternion.Euler(0, 0, -90)) as GameObject;
            portalGate.transform.SetParent(_borderHolder);
        }
        // Upper side border
        for (int Xindex = 0; Xindex < _columns; Xindex++)
        {
            GameObject portalGate = Instantiate(_portalGatePrefab,
                                                new Vector2(_unitPosARR[Xindex, _rows - 1].x + _unitWidth, _unitPosARR[Xindex, _rows - 1].y + _unitHeight),
                                                Quaternion.Euler(0, 0, 90)) as GameObject;
            portalGate.transform.SetParent(_borderHolder);
        }
        // Four border corner
        GameObject portalCorner = Instantiate(_portalCornerPrefab,
                                              new Vector2(_unitPosARR[0, 0].x - _unitWidth, _unitPosARR[0, 0].y - _unitHeight),
                                              Quaternion.identity) as GameObject;
        portalCorner.transform.SetParent(_borderHolder);
        portalCorner = Instantiate(_portalCornerPrefab,
                                   new Vector2(_unitPosARR[_columns - 1, 0].x + _unitWidth, _unitPosARR[_columns - 1, 0].y - _unitHeight),
                                   Quaternion.identity) as GameObject;
        portalCorner.transform.SetParent(_borderHolder);
        portalCorner = Instantiate(_portalCornerPrefab,
                                   new Vector2(_unitPosARR[0, _rows - 1].x - _unitWidth, _unitPosARR[0, _rows - 1].y + _unitHeight),
                                   Quaternion.identity) as GameObject;
        portalCorner.transform.SetParent(_borderHolder);
        portalCorner = Instantiate(_portalCornerPrefab,
                                   new Vector2(_unitPosARR[_columns - 1, _rows - 1].x + _unitWidth, _unitPosARR[_columns - 1, _rows - 1].y + _unitHeight),
                                   Quaternion.identity) as GameObject;
        portalCorner.transform.SetParent(_borderHolder);
        #endregion
    }