private void OnTransitionComplete(RoomManager.Room from, RoomManager.Room to) { Transform dest = RoomManager.GetExitPosition(to, from); TransitionFader.WipeFromBlack(dest.position, RoomManager.animationTime); SpawnPlayerAt(dest.position, dest.rotation * Quaternion.AngleAxis(180.0f, Vector3.up)); }
private void OnTransitionComplete(RoomManager.Room from, RoomManager.Room to) { AudioSource current; AudioSource next; if (_sourceA.isPlaying) { current = _sourceA; next = _sourceB; } else { current = _sourceB; next = _sourceA; } switch (to) { case RoomManager.Room.MainHub: next.clip = mainHub; break; case RoomManager.Room.Library: next.clip = library; break; case RoomManager.Room.Observatory: next.clip = observatory; break; default: throw new ArgumentOutOfRangeException(nameof(to), to, null); } next.volume = 0.0f; next.time = current.time; next.Play(); StartCoroutine(CrossfadeAmbient(current, next, fadeTime)); }
public Node GetRandomWalkableNode(Node _node) { RoomManager.Room _room = RoomManager.GetInstance().GetRoom(_node.RoomIndex); Int2 _randomNodeGridPos; Node _randomNode; do { _randomNodeGridPos = new Int2(Random.Range(0, GameGrid.SIZE.x), Random.Range(0, GameGrid.SIZE.y)); _randomNode = TryGetNode(_randomNodeGridPos); } while(_randomNodeGridPos == _node.GridPos || _randomNode == null || !_randomNode.GetIsWalkable()); // do{ // _randomNodeGridPos = _room.NodeGridPositions[Random.Range(0, _room.NodeGridPositions.Count)]; // _randomNode = TryGetNode(_randomNodeGridPos); // } while (_randomNodeGridPos == _node.GridPos || _randomNode == null || !_randomNode.GetIsWalkable()); return(_randomNode); }
public void SetNodeLightingDirty(Node _node) { if (_node == null) { return; } AddNodeToUpdate(_node.GridPos, _hasDirtyLighting: true, _hasDirtyIncandescence: null); RoomManager.Room _room = RoomManager.GetInstance().GetRoom(_node.RoomIndex); if (_room != null) { for (int i = 0; i < _room.NodeGridPositions.Count; i++) { AddNodeToUpdate(_room.NodeGridPositions[i], _hasDirtyLighting: true, _hasDirtyIncandescence: null); } for (int i = 0; i < _room.WallNodeGridPositions.Count; i++) { AddNodeToUpdate(_room.WallNodeGridPositions[i], _hasDirtyLighting: null, _hasDirtyIncandescence: null); } } }
internal Room(RoomManager.Room vroom) => VanillaRoom = vroom;
public override void UpdateLate() { foreach (KeyValuePair <Int2, NodeDetails> _nodeDetails in nodesToUpdate) { Node _node = GameGrid.GetInstance().TryGetNode(_nodeDetails.Key); RoomManager.Room _room = RoomManager.GetInstance().GetRoom(_node.RoomIndex); if (_room == null) { continue; } Color32 _lightColor = new Color32(0, 0, 0, 0); if (_nodeDetails.Value.HasDirtyLighting) { for (int _lampIndex = 0; _lampIndex < _room.Lamps.Count; _lampIndex++) { Lamp _lamp = _room.Lamps[_lampIndex]; if (_node.RoomIndex != _lamp.GetRoomIndex()) { Debug.LogErrorFormat("Somehow Node({0}) found {1} despite being in different rooms ({2} and {3})!", _node.GridPos, _lamp.name, _node.RoomIndex, _lamp.GetRoomIndex()); continue; } Int2 _distance = _node.GridPos - _lamp.GetNode().GridPos; if (Mathf.Abs(_distance.x) > _lamp.GetRadius() || Mathf.Abs(_distance.y) > _lamp.GetRadius()) { continue; } float _pathLength; bool _hasFoundPath = Task.FindPath.TryGetPathLength(_node, _lamp.GetNode(), out _pathLength); if (!_hasFoundPath) { continue; } if (_pathLength > _lamp.GetRadius()) { continue; } float _lightFromLamp = 1.0f - _pathLength / (float)_lamp.GetRadius(); _lightColor = new Color32( (byte)(_lamp.GetColor().r *_lightFromLamp), (byte)(_lamp.GetColor().g *_lightFromLamp), (byte)(_lamp.GetColor().b *_lightFromLamp), (byte)(255 * _lightFromLamp) ); } } if (_nodeDetails.Value.HasDirtyIncandescence && _node.ChemicalContainer.IsIncandescent()) { Chemical.Blob _chem_0 = _node.ChemicalContainer.Contents[0]; Chemical.Blob _chem_1 = _node.ChemicalContainer.Contents[1]; Chemical.Blob _chem_2 = _node.ChemicalContainer.Contents[2]; Color _incandescence = _node.ChemicalContainer.GetIncandescence(); _lightColor.r = (byte)Mathf.Max(_lightColor.r, _incandescence.r * 255.0f); _lightColor.g = (byte)Mathf.Max(_lightColor.g, _incandescence.g * 255.0f); _lightColor.b = (byte)Mathf.Max(_lightColor.b, _incandescence.b * 255.0f); _lightColor.a = (byte)Mathf.Max(_lightColor.a, _incandescence.a * 255.0f); } _node.SetLighting(_lightColor); } for (int i = 0; i < wallNodesToUpdate.Count; i++) { Node _node = GameGrid.GetInstance().TryGetNode(wallNodesToUpdate[i]); _node.SetLightingBasedOnNeighbors(); } nodesToUpdate.Clear(); }