コード例 #1
0
 public GridModel(GridScriptableObject gridSO)
 {
     noOfRows       = gridSO.noOfRows;
     noOfColumns    = gridSO.noOfColumns;
     cellGap        = gridSO.cellGap;
     cellPrefab     = gridSO.cellPrefab;
     isCircularGrid = gridSO.isCircularGrid;
 }
コード例 #2
0
    public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
    {
        Event guiEvent = Event.current;
        LevelObstacle levelObstacle = (LevelObstacle)fieldInfo.GetValue(property.serializedObject.targetObject);

        labelWidth = GUI.skin.label.CalcSize(label).x;
        labelHeight = GUI.skin.label.CalcSize(label).y;
        
        propertyWidth = EditorGUIUtility.currentViewWidth - 35f;

        Rect labelRect = new Rect(position.x, position.y, propertyWidth, labelHeight);
        GUI.Label(labelRect, label);

        GUIContent guiContent = new GUIContent("Width");

        labelRect.y += labelHeight + verticalSpacing;
        labelRect.x = position.x;
        guiContent.text = "Number Of Block Types: ";
        GUI.Label(labelRect, guiContent);
        labelRect.x += GUI.skin.label.CalcSize(guiContent).x;
        labelRect.width = propertyWidth - GUI.skin.label.CalcSize(guiContent).x;
        int newNumberOfBlockTypes = EditorGUI.IntField(labelRect, levelObstacle.NumberOfBlockTypes);
        if (newNumberOfBlockTypes != levelObstacle.NumberOfBlockTypes) levelObstacle.NumberOfBlockTypes = newNumberOfBlockTypes;

        labelRect.y += labelHeight + verticalSpacing;
        labelRect.x = position.x;
        guiContent.text = "Number Of Collectable Types: ";
        GUI.Label(labelRect, guiContent);
        labelRect.x += GUI.skin.label.CalcSize(guiContent).x;
        labelRect.width = propertyWidth - GUI.skin.label.CalcSize(guiContent).x;
        int newNumberOfCollectableTypes = EditorGUI.IntField(labelRect, levelObstacle.NumberOfGrabbableTypes);
        if (newNumberOfCollectableTypes != levelObstacle.NumberOfGrabbableTypes) levelObstacle.NumberOfGrabbableTypes = newNumberOfCollectableTypes;

        labelRect.y += labelHeight + verticalSpacing;
        labelRect.x = position.x;
        guiContent.text = "Width: ";
        GUI.Label(labelRect, guiContent);
        labelRect.x += GUI.skin.label.CalcSize(guiContent).x;
        labelRect.width = propertyWidth - GUI.skin.label.CalcSize(guiContent).x;
        int newWidth = EditorGUI.IntField(labelRect, levelObstacle.Width);
        if (newWidth != levelObstacle.Width) levelObstacle.Width = newWidth;

        labelRect.y += labelHeight + verticalSpacing;
        labelRect.x = position.x;
        guiContent.text = "Length: ";
        GUI.Label(labelRect, guiContent);
        labelRect.x += GUI.skin.label.CalcSize(guiContent).x;
        labelRect.width = propertyWidth - GUI.skin.label.CalcSize(guiContent).x;
        int newLength = EditorGUI.IntField(labelRect, levelObstacle.Length);
        if (newLength != levelObstacle.Length) levelObstacle.Length = newLength;


        labelRect.y += labelHeight + verticalSpacing;
        labelRect.x = position.x;
        guiContent.text = "Grid Data: ";
        GUI.Label(labelRect, guiContent);
        labelRect.x += GUI.skin.label.CalcSize(guiContent).x;
        labelRect.width = propertyWidth - GUI.skin.label.CalcSize(guiContent).x;
        
        GridScriptableObject gridData = EditorGUI.ObjectField(labelRect, levelObstacle.gridData, typeof(GridScriptableObject), false) as GridScriptableObject;
        if (true/*(gridData != levelObstacle.gridData || levelObstacle.gridData == null) && gridData != null*/)
        {
            levelObstacle.gridData = gridData;
            //levelObstacle.LoadGrid(gridData.obstacleGrid, gridData.numberOfBlockTypes);
        }

        int numberOfButtons = 4;
        float percentOfWholeSpace = 1f / numberOfButtons;

        labelRect.y += labelHeight + verticalSpacing;
        labelRect.x = position.x;
        labelRect.width = propertyWidth * percentOfWholeSpace;
        if (GUI.Button(labelRect, new GUIContent("Load", "Load data from selected scriptable object"))){
            if (gridData != null)
            {
                //levelObstacle.LoadGrid(gridData.obstacleGrid, gridData.numberOfBlockTypes, gridData.collectableGrid, gridData.numberOfGrabbableTypes);
                levelObstacle.LoadGrid(gridData.auxObstacleGrid, gridData.auxCollectableGrid, gridData.length, gridData.width, gridData.numberOfBlockTypes, gridData.numberOfGrabbableTypes);
            }
        }

        labelRect.x += propertyWidth * percentOfWholeSpace;
        if (GUI.Button(labelRect, new GUIContent("Save", "Save data to selected scriptable object")))
        {
            if (gridData != null)
            {
                levelObstacle.SaveGrid();
                EditorUtility.SetDirty(levelObstacle.gridData);
                //AssetDatabase.SaveAssets();
                //EditorApplication.SaveAssets();
            }
        }

        labelRect.x += propertyWidth * percentOfWholeSpace;
        if (GUI.Button(labelRect, new GUIContent("Basic Floor", "Reset grid to basic floor in all positions")))
        {
            levelObstacle.ResetGridToBasicFloor();
        }

        labelRect.x += propertyWidth * percentOfWholeSpace;
        if (GUI.Button(labelRect, new GUIContent("Reset", "Reset grid to empty in all positions")))
        {
            levelObstacle.ResetGrid();
        }

        labelRect.x = position.x;
        labelRect.width = propertyWidth;

        labelRect.y += labelHeight + verticalSpacing;

        GUIStyle style = new GUIStyle();
        style.normal.background = levelObstacle.GenerateTexture();
        Rect textureRect = new Rect(position.x, labelRect.y, propertyWidth, GetTextureGuiHeight(property));
        GUI.Label(textureRect, GUIContent.none, style);

        if (guiEvent.type == EventType.MouseDown && (guiEvent.button == 0 || guiEvent.button == 1))
        {
            if (textureRect.Contains(guiEvent.mousePosition))
            {
                int posI = (int)(((guiEvent.mousePosition.y - textureRect.y) / textureRect.height) * levelObstacle.Length);
                int posJ = (int)(((guiEvent.mousePosition.x - textureRect.x) / textureRect.width) * levelObstacle.Width);
                
                levelObstacle.GenerateTexture(posI, posJ, guiEvent.button);
                foreach (var item in ActiveEditorTracker.sharedTracker.activeEditors)
                    if (item.serializedObject == property.serializedObject)
                    { item.Repaint(); break; } 
            }
        }

    }
コード例 #3
0
        public CellController[,] cells; // array of cellControllers in grid

        public GridController(GridScriptableObject gridSO)
        {
            model = new GridModel(gridSO);
            view  = GameObject.Instantiate(gridSO.gridPrefab, new Vector2(0, 0), Quaternion.identity);
            SpawnCells();
        }