예제 #1
0
    //=====================================================

    private static void AddSpawnPointOfType(eSpawnType type)
    {
        Object pfb;

        if (type != eSpawnType.RESPAWN)
        {
            pfb = ResourcesDoors.GetSpawnPointPrefab();
        }
        else
        {
            pfb = ResourcesDoors.GetRespawnPointPrefab();
        }

        if (pfb == null)
        {
            return;
        }

        // Create containers for collectables if they don't already exist
        var container      = GameObject.Find("SpawnPoints");
        var sceneStart     = GameObject.Find("SceneStarts");
        var respawn        = GameObject.Find("Respawns");
        var crawlThrough   = GameObject.Find("CrawlTroughs");
        var oblivionPortal = GameObject.Find("OblivionPortals");

        if (container == null)
        {
            container = CreateContainer("SpawnPoints");

            if (sceneStart == null)
            {
                sceneStart = CreateContainer("SceneStarts", container);
            }

            if (respawn == null)
            {
                respawn = CreateContainer("Respawns", container);
            }

            if (crawlThrough == null)
            {
                crawlThrough = CreateContainer("CrawlTroughs", container);
            }

            if (oblivionPortal == null)
            {
                oblivionPortal = CreateContainer("OblivionPortals", container);
            }
        }

        var prefab = PrefabUtility.InstantiatePrefab(pfb) as GameObject;

        if (prefab == null)
        {
            return;
        }

        var script = prefab.GetComponent <SpawnPoint>();

        switch (type)
        {
        case eSpawnType.SCENE_START:
            prefab.name             = "SpawnStart";
            prefab.transform.parent = sceneStart.transform;
            break;

        case eSpawnType.RESPAWN:
            prefab.name             = "Respawn";
            prefab.transform.parent = respawn.transform;
            break;

        case eSpawnType.CRAWL_THROUGH:
            prefab.name             = "SpawnCrawl";
            prefab.transform.parent = crawlThrough.transform;
            break;

        case eSpawnType.OBLIVION_PORTAL:
            prefab.name             = "SpawnPortal";
            prefab.transform.parent = oblivionPortal.transform;
            break;
        }

        if (script != null)
        {
            script.Type = type;
        }

        PositionObjectAndSelect(prefab);
    }
예제 #2
0
    //=====================================================
    //public void Init( GameObject doorModel, bool isDoubleDoor = false )
    public void Init(bool isDoubleDoor = false)
    {
        _isDoubleDoor = isDoubleDoor;
        var resetDoor = false;
        var mdlDoor   = ResourcesDoors.GetModel(_type, _model);

        if (_door == null)
        {
            resetDoor = true;
        }
        else if (_currentModelName != mdlDoor.name)
        {
            // Remove previous door instance
            DestroyImmediate(_door.gameObject);
            resetDoor = true;
        }
        // Hack to force oblivion / boss doors to update to new replacement door
        // (Late project updates - there is only one door model at present so can't switch between models to trigger refresh)
        else if (_type == eDoorType.OBLIVION_PORTAL || _type == eDoorType.BOSS)
        {
            // Remove previous door instance
            DestroyImmediate(_door.gameObject);
            resetDoor = true;
        }

        if (resetDoor == true)
        {
            _currentModelName = mdlDoor.name;

            var doorModel = Instantiate(mdlDoor) as GameObject;
            if (doorModel == null)
            {
                return;
            }

            _door        = doorModel.transform;
            _door.parent = _thisTransform;
            _door.name   = "Door";

            // Get collider to determine door size
            _collider = _door.GetComponent <Collider>();
        }

        // Store this door prefab's rotation then zero it out before updating door - doesn't handle double-doors yet
        Quaternion rot;

        if (_doubleDoorsContainer == null)
        {
            rot = _thisTransform.rotation;
            _thisTransform.rotation = Quaternion.identity;
        }
        else
        {
            rot = _doubleDoorsContainer.transform.rotation;
            _doubleDoorsContainer.transform.rotation = Quaternion.identity;
        }

        // Rotate and position door
        if (_hingePosition == eHingePosition.LEFT)
        {
            _door.localRotation = Quaternion.Euler(0.0f, 180.0f, 0.0f);
            _door.localPosition = new Vector3(_collider.bounds.size.x * 0.5f, _collider.bounds.size.y * 0.5f, 0.0f);
        }
        else
        {
            _door.localRotation = Quaternion.Euler(Vector3.zero);
            _door.localPosition = new Vector3(_collider.bounds.size.x * -0.5f, _collider.bounds.size.y * 0.5f, 0.0f);
        }

        // Initialize door-trigger (only for single / master door)
        if (_isDoubleDoor == false)
        {
            InitDoorTrigger();
        }
        else
        {
            // Disable double door's trigger
            _trigger.gameObject.SetActive(false);

            // Remove any double door instance in this double door - this shouldn't be required
            if (_doubleDoor == true)
            {
                Destroy(_doubleDoor);
                _doubleDoor = null;
            }
        }

        // Reset the door prefab rotation
        if (_doubleDoorsContainer == null)
        {
            _thisTransform.rotation = rot;
        }
        else
        {
            _doubleDoorsContainer.transform.rotation = rot;
        }
    }
예제 #3
0
    //=====================================================

    private static void AddDoorOfType(eDoorType type)
    {
        var pfb = ResourcesDoors.GetPrefab();
        var mdl = ResourcesDoors.GetModel(type, 0);

        if (pfb == null)
        {
            return;
        }

        var prefab = PrefabUtility.InstantiatePrefab(pfb) as GameObject;

        if (prefab == null)
        {
            return;
        }

        var script = prefab.GetComponent <Door>();

        switch (type)
        {
        case eDoorType.BASIC:
            prefab.name = "BasicDoor";
            break;

        case eDoorType.BASIC_DOUBLE:
            prefab.name = "DoubleDoor";
            break;

        case eDoorType.CRAWL:
            prefab.name = "CrawlDoor";
            break;

        case eDoorType.OBLIVION_PORTAL:
            prefab.name = "OblivionPortal";
            break;

        case eDoorType.PUZZLE_LOCKED:
            prefab.name = "LockedPuzzleDoor";
            break;

        case eDoorType.PUZZLE_ENTRANCE:
            prefab.name = "PuzzleRoomDoor";
            break;

        case eDoorType.PLAYER_HUB:
            prefab.name = "MainHallDoor";
            break;

        case eDoorType.BOSS:
            prefab.name = "BossRoomDoor";
            break;
        }

        if (script != null)
        {
            script.Type = type;

            if (mdl != null)
            {
                //var model = PrefabUtility.InstantiatePrefab( mdl ) as GameObject;
                //script.Init( model );
                script.Init();
            }
        }

        PositionObjectAndSelect(prefab);
    }
예제 #4
0
    //=====================================================

    private void CreateDoubleDoor()
    {
        // Get content from resources
        var mdlDoor = ResourcesDoors.GetModel(_type, _model);

        if (mdlDoor == null)
        {
            return;
        }

        if (_doubleDoor != null && _currentModelName == mdlDoor.name)
        {
            // Do nothing
        }
        else
        {
            // Get content from resources
            var pfbDoor = ResourcesDoors.GetPrefab();
            if (pfbDoor == null)
            {
                return;
            }

            if (_doubleDoor != null)
            {
                DestroyImmediate(_doubleDoor);
            }

            // Add second door
            _doubleDoor = Instantiate(pfbDoor) as GameObject;
            if (_doubleDoor == null)
            {
                return;
            }

            // Rename door
            _doubleDoor.name = "Door 2";

            // Get script
            _doubleDoorScript = _doubleDoor.GetComponent <Door>();
            if (_doubleDoorScript == null)
            {
                return;
            }

            // Init door
            _doubleDoorScript.Type = _type;
            //var doorModel = Instantiate( mdlDoor ) as GameObject;
            _doubleDoorScript.HingePosition = eHingePosition.RIGHT;
        }

        // Init door
        _doubleDoorScript.Model = _model;
        _doubleDoorScript.Init(true);

        // Match other door parameters
        _doubleDoorScript.RotateOpenBy   = _rotateOpenBy;
        _doubleDoorScript.RotateDuration = _rotateDuration;
        _doubleDoorScript.AutoClose      = _autoClose;
        _doubleDoorScript.AutoCloseDelay = _autoCloseDelay;
        _doubleDoorScript.OpenInAndOut   = _openInAndOut;
        _doubleDoorScript.KeyLevel       = _keyLevel;
        _doubleDoorScript.FairyRequired  = _fairyRequired;
    }