Пример #1
0
    public static void SaveGame(string name, List <GameObject> _mapData)
    {
        if (!(Directory.Exists(Application.persistentDataPath + "/Saves/" + name)))
        {
            Directory.CreateDirectory(Application.persistentDataPath + "/Saves/" + name);
        }

        MapData _myMap = new MapData();

        foreach (GameObject _go in _mapData)
        {
            if (_go != null)
            {
                GOData     _goD = _go.GetComponent <GOData>();
                BlockEntry bE   = new BlockEntry();
                bE.blockName      = _goD.blockTypeName;
                bE.blockPosition  = _goD.position;
                bE.blockYRotation = _goD.yRotation;
                bE.coloured       = _goD.coloured;
                _myMap.mapBlocks.Add(bE);
            }
        }

        XmlSerializer serialiser = new XmlSerializer(typeof(MapData));
        FileStream    stream     = new FileStream(Application.persistentDataPath + "/Saves/" + name + "/block_data.xml", FileMode.Create);

        serialiser.Serialize(stream, _myMap);
        stream.Close();
        Debug.Log("Successfully Saved Level: " + name + " At " + Application.persistentDataPath + "/Saves/" + name + "/block_data.xml");
    }
Пример #2
0
    GameObject CreateBlock(GameObject _prefab, Vector3 _position, float _yRotation)
    {
        GameObject newInst = Instantiate(_prefab);

        newInst.transform.position = _position;
        newInst.transform.RotateAround(newInst.transform.position, Vector3.up, _yRotation);
        newInst.transform.SetParent(transform, false);
        GOData goD = newInst.AddComponent <GOData>();

        goD.blockTypeName = _prefab.name;
        goD.position      = newInst.transform.position;
        goD.yRotation     = _yRotation;
        newInst.name      = _prefab.name + ", X:" + newInst.transform.position.x + ", Y:" + newInst.transform.position.y + ", Z:" + newInst.transform.position.z;
        newInst.GetComponentInChildren <MeshRenderer>().gameObject.AddComponent <NavMeshSourceTag>();
        Util.AddAllMeshCollidersToRenderers(newInst);
        mapData.Add(newInst);
        return(newInst);
    }
Пример #3
0
    private void Update()
    {
        DoBlockPlacer();


        if (Input.GetKeyDown(KeyCode.G))
        {
            GameObject   zombieGO = GameObject.Instantiate((GameObject)Resources.Load("Enemy/ENEMY_ZOMBIE"));
            NavMeshAgent NVA      = zombieGO.AddComponent <NavMeshAgent>();
            NVA.radius = 7.46f;
            NVA.height = 16f;
            zombieGO.AddComponent <EnemyZombieAI>();
        }
        if (noColPaintMode)
        {
            //No colour paint mode
            RaycastHit _hit;
            Ray        _ray = Camera.main.ScreenPointToRay(Input.mousePosition);

            if (Physics.Raycast(_ray, out _hit, Mathf.Infinity))
            {
                if (Vector3.Distance(_hit.point, Camera.main.transform.position) > minToCamera)
                {
                    if (Input.GetKeyDown(KeyCode.Mouse0))
                    {
                        //Colour object
                        if (_hit.collider.gameObject != null)
                        {
                            Transform mainObj = Util.getInitialParent(_hit.collider.transform, this.transform.name);
                            Debug.Log("Painting " + mainObj.name + " To have no colour");
                            GOData god = mainObj.GetComponent <GOData>();
                            if (god != null)
                            {
                                god.coloured = false;
                            }
                            //Add block to non-coloured layer
                            Util.MoveToLayer(mainObj, 10);
                        }
                    }
                    else
                    {
                        //Preview Selection
                        if (_hit.collider.gameObject != null)
                        {
                            Transform mainObj = Util.getInitialParent(_hit.collider.transform, this.transform.name);
                        }
                    }
                }
            }
        }
        else if (colourPaintMode)
        {
            //Colour paint mode
            RaycastHit _hit;
            Ray        _ray = Camera.main.ScreenPointToRay(Input.mousePosition);

            if (Physics.Raycast(_ray, out _hit, Mathf.Infinity))
            {
                if (Vector3.Distance(_hit.point, Camera.main.transform.position) > minToCamera)
                {
                    if (Input.GetKeyDown(KeyCode.Mouse0))
                    {
                        //Colour Object
                        if (_hit.collider.gameObject != null)
                        {
                            Transform mainObj = Util.getInitialParent(_hit.collider.transform, this.transform.name);
                            Debug.Log("Painting " + mainObj.name + " To have colour");
                            GOData god = mainObj.GetComponent <GOData>();
                            if (god != null)
                            {
                                god.coloured = true;
                            }
                            //Add block to coloured layer
                            Util.MoveToLayer(mainObj, 9);
                        }
                    }
                    else
                    {
                        //Preview Selection
                        if (_hit.collider.gameObject != null)
                        {
                            Transform mainObj = Util.getInitialParent(_hit.collider.transform, this.transform.name);
                        }
                    }
                }
            }
        }
        else if (demolishMode)
        {
            //Demolish mode
            RaycastHit _hit;
            Ray        _ray = Camera.main.ScreenPointToRay(Input.mousePosition);

            if (Physics.Raycast(_ray, out _hit, Mathf.Infinity))
            {
                if (Vector3.Distance(_hit.point, Camera.main.transform.position) > minToCamera)
                {
                    if (Input.GetKeyDown(KeyCode.Mouse0))
                    {
                        //Delete object
                        if (_hit.collider.gameObject != null)
                        {
                            Transform mainObj = Util.getInitialParent(_hit.collider.transform, this.transform.name);
                            Debug.Log("Deleting: " + mainObj.name);
                            if (mapData.Contains(mainObj.gameObject))
                            {
                                mapData.Remove(mainObj.gameObject); Destroy(mainObj.gameObject);
                            }
                        }
                    }
                    else
                    {
                        //Preview Selection
                        if (_hit.collider.gameObject != null)
                        {
                            Transform      mainObj = Util.getInitialParent(_hit.collider.transform, this.transform.name);
                            MeshRenderer[] mr      = mainObj.GetComponentsInChildren <MeshRenderer>();
                            lastSelectedPreview = mainObj.gameObject;
                            foreach (MeshRenderer _mr in mr)
                            {
                                ShowPreview sp = _mr.gameObject.AddComponent <ShowPreview>();
                                sp.Load(mainObj.gameObject, this, _mr);
                            }
                        }
                    }
                }
            }
        }
    }