private Boolean TryOpenDoor(GridSlot p_slot, EDirection p_dir) { List <InteractiveObject> doors = p_slot.GetDoors(); for (Int32 i = 0; i < doors.Count; i++) { Door door = (Door)doors[i]; if (door.Location == p_dir && door.State == EInteractiveObjectState.DOOR_CLOSED && door.Commands.Count > 0) { door.Execute(LegacyLogic.Instance.MapLoader.Grid); door.Update(); return(true); } } GridSlot neighborSlot = p_slot.GetNeighborSlot(LegacyLogic.Instance.MapLoader.Grid, p_dir); doors = neighborSlot.GetDoors(); for (Int32 j = 0; j < doors.Count; j++) { Door door2 = (Door)doors[j]; if (door2.Location == EDirectionFunctions.GetOppositeDir(p_dir) && door2.State == EInteractiveObjectState.DOOR_CLOSED && door2.Commands.Count > 0) { door2.Execute(LegacyLogic.Instance.MapLoader.Grid); door2.Update(); return(true); } } return(false); }
protected override void SetStates() { if (m_targetDoor == null) { throw new InvalidOperationException("Tried to open or close something that is not a door!"); } if (!m_delayStateChange) { m_targetDoor.ToggleState(); m_leaveTransition.ToggleState(); if (m_enterTransition != null) { m_enterTransition.ToggleState(); } GridSlot neighborSlot = Grid.GetSlot(m_targetDoor.Position).GetNeighborSlot(Grid, m_targetDoor.Location); if (neighborSlot != null) { List <InteractiveObject> doors = neighborSlot.GetDoors(); for (Int32 i = 0; i < doors.Count; i++) { if (doors[i].Type == EObjectType.DOOR && EDirectionFunctions.GetOppositeDir(doors[i].Location) == m_targetDoor.Location) { Door door = (Door)doors[i]; if (m_targetDoor.State == EInteractiveObjectState.DOOR_OPEN) { door.Open(); } else { door.Close(); } break; } } } } else { m_delayStateChange = true; } }