//===================================================== 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); }
//===================================================== //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; } }
//===================================================== 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); }
//===================================================== 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; }