示例#1
0
    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();
        ICellGridGenerator gridGenerator = (ICellGridGenerator)target;

        if (GUILayout.Button("Generate Grid"))
        {
            gridGenerator.GenerateGrid();
        }
        if (GUILayout.Button("Clear Grid"))
        {
            var children = new List <GameObject>();
            foreach (Transform cell in gridGenerator.CellsParent)
            {
                children.Add(cell.gameObject);
            }

            children.ForEach(c => DestroyImmediate(c));
        }
    }
示例#2
0
        void GenerateBaseStructure()
        {
            if (GridHelperUtils.CheckMissingParameters(parameterValues))
            {
                return;
            }

            GridHelperUtils.ClearScene();

            var mapType = mapTypes[mapTypeIndex];
            var camera  = Camera.main;

            if (camera == null)
            {
                var cameraObject = new GameObject("Main Camera");
                cameraObject.tag = "MainCamera";
                cameraObject.AddComponent <Camera>();
                camera = cameraObject.GetComponent <Camera>();
            }

            if (useMovableCamera)
            {
                camera.gameObject.AddComponent <CameraController>();
                camera.gameObject.GetComponent <CameraController>().ScrollSpeed = cameraScrollSpeed;
                camera.gameObject.GetComponent <CameraController>().ScrollEdge  = cameraScrollEdge;
            }

            cellGrid      = new GameObject("CellGrid");
            players       = new GameObject("Players");
            units         = new GameObject("Units");
            guiController = new GameObject("GUIController");

            directionalLight = new GameObject("DirectionalLight");
            var light = directionalLight.AddComponent <Light>();

            light.type = LightType.Directional;
            light.transform.Rotate(45f, 0, 0);

            for (int i = 0; i < nHumanPlayer; i++)
            {
                var player = new GameObject(string.Format("Player_{0}", players.transform.childCount));
                player.AddComponent <HumanPlayer>();
                player.GetComponent <Player>().PlayerNumber = players.transform.childCount;
                player.transform.parent = players.transform;
            }

            for (int i = 0; i < nComputerPlayer; i++)
            {
                var aiPlayer = new GameObject(string.Format("AI_Player_{0}", players.transform.childCount));
                aiPlayer.AddComponent <NaiveAiPlayer>();
                aiPlayer.GetComponent <Player>().PlayerNumber = players.transform.childCount;
                aiPlayer.transform.parent = players.transform;
            }

            Type selectedGenerator = generators[generatorIndex];

            var cellGridScript           = cellGrid.AddComponent <CellGrid>();
            ICellGridGenerator generator = (ICellGridGenerator)Activator.CreateInstance(selectedGenerator);

            generator.CellsParent = cellGrid.transform;

            var unitGenerator = cellGrid.AddComponent <CustomUnitGenerator>();

            unitGenerator.UnitsParent = units.transform;
            unitGenerator.CellsParent = cellGrid.transform;

            var guiControllerScript = guiController.AddComponent <GUIController>();

            guiControllerScript.CellGrid = cellGridScript;

            foreach (var fieldName in parameterValues.Keys)
            {
                FieldInfo prop = generator.GetType().GetField(fieldName);
                if (null != prop)
                {
                    prop.SetValue(generator, parameterValues[fieldName]);
                }
            }
            GridInfo gridInfo = generator.GenerateGrid();

            camera.transform.position  = gridInfo.Center;
            camera.transform.position -= new Vector3(0, 0, (gridInfo.Dimensions.x > gridInfo.Dimensions.y ? gridInfo.Dimensions.x : gridInfo.Dimensions.y) * Mathf.Sqrt(3) / 2);

            if (mapType.Equals(MAP_TYPE_3D))
            {
                var rotationVector = new Vector3(90f, 0f, 0f);

                camera.transform.parent = cellGrid.transform;
                cellGrid.transform.Rotate(rotationVector);
                players.transform.Rotate(rotationVector);
                units.transform.Rotate(rotationVector);
                directionalLight.transform.Rotate(rotationVector);

                camera.transform.parent = null;
                camera.transform.SetAsFirstSibling();
            }
        }