예제 #1
0
    public void SnapCoords()
    {
        if (_manager == null)
        {
            _manager = GetManager();
        }

        // Getting renderer bounds' size. Get info once
        if (_w == 0f && _h == 0f)
        {
            _renderer = GetComponent <Renderer>();
            _w        = (float)Math.Round(_renderer.bounds.extents.x * 2f, 3);
            _h        = (float)Math.Round(_renderer.bounds.extents.z * 2f, 3);
        }

        _coords = transform.position;

        _xVal = _coords.x;
        _xVal = Mathf.Round(_xVal / _w) * _w;

        _zVal = _coords.z;
        _zVal = Mathf.Round(_zVal / _h) * _h;

        _coords.x = (float)Math.Round(_xVal, 3);
        _coords.y = 0f;
        _coords.z = (float)Math.Round(_zVal, 3);

        transform.position = _coords;

        CheckValidPosition();
    }
예제 #2
0
    public void CheckValidPosition()
    {
        if (_manager == null)
        {
            _manager = GetManager();
        }

        _coords         = transform.position;
        _xVal           = _coords.x;
        _validPositions = _manager.GetValidPositions;

        bool positionFound = false;

        for (int i = 0; i < _validPositions.Length; i++)
        {
            if (_xVal == _validPositions[i])
            {
                positionFound = true;
                break;
            }
        }

        if (_renderer == null)
        {
            _renderer = GetComponent <Renderer>();
        }

        if (positionFound)
        {
            _renderer.material = _validMaterial;
            _manager.SetZValue(_coords.z);
        }
        else
        {
            _renderer.material = _invalidMaterial;
        }

        _isValid = positionFound;
    }
예제 #3
0
    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();

        _manager = target as StageBlockManager;
        _manager.ForcePosition();

        if (_manager.GetMaxLanes < _manager.GetMinLanes || _manager.GetMaxLanes % 2 == 0)
        {
            if (_supportedLanes == 0)
            {
                _supportedLanes = _manager.GetMinLanes;
            }

            _manager.SetMaxLanes(_supportedLanes);
        }

        if (_supportedLanes != _manager.GetMaxLanes)
        {
            _manager.GenerateValidPositions();
            _manager.CheckValidPositions();
            _supportedLanes = _manager.GetMaxLanes;
        }

        GUILayout.Label("Create Blocks will result in: " + _manager.GetCreateRows * _manager.GetMaxLanes + " blocks.");
        if (GUILayout.Button("Create Blocks"))
        {
            _manager.CreateBlocks();
        }

        GUILayout.Label("\nRegister blocks layout.\nRemove overlaped and invalid position blocks.\nRecalculate stage length (in blocks).");
        if (GUILayout.Button("Cleanup & Update Layout"))
        {
            _manager.StageCleanup();
        }

        string label = "Destroy all Blocks";

        if (_warningCount > 0)
        {
            label = "ARE YOU SURE?!";
        }

        if (GUILayout.Button(label))
        {
            _warningCount++;

            if (_warningCount > 1)
            {
                _warningCount = 0;
                _manager.DestroyAllBlocks();
                _manager.StageCleanup();
            }
        }

        GUILayout.Label("Length (in blocks): " + _manager.SetStageLength());
        GUILayout.Label("Total blocks: " + _manager.GetTotalBlocks().Length);

        GUILayout.Label("\nFinal step. Creates a gameobject with the original\nlayout, but now with skin assets applied.");
        if (GUILayout.Button("Build Stage"))
        {
            Selection.activeGameObject = _manager.ConstructFinalStage();
        }

        GUILayout.Label("\nDon't forget to save your built stage inside your\nlevel Resource.prefab gameObject.");
    }
예제 #4
0
 public void SetManager(StageBlockManager comp)
 {
     _manager = comp;
 }