public DockingSession(DockGate gate, ShipBase requester, StationBase parent, bool isUndocking) { Gate = gate; Requester = requester; ParentStation = parent; if (!isUndocking) { Stage = DockingSessionStage.Granted; //if requester is player, turn light green if (requester == GameManager.Inst.PlayerControl.PlayerShip) { gate.SetGreenLight(); _dockEnterTarget = Gate.DockingTrigger.transform.position + Gate.DockingTrigger.transform.forward * 2; } else { gate.SetRedLight(); _dockEnterTarget = Gate.DockingTrigger.transform.position + Gate.DockingTrigger.transform.forward * 20; } gate.Open(); gate.DockingTrigger.isTrigger = false; } else { Stage = DockingSessionStage.UndockWaiting; //place requester in the gate Vector3 enterTarget = gate.DockingTrigger.transform.position - gate.DockingTrigger.transform.forward * 4f; requester.transform.position = enterTarget; requester.transform.LookAt(gate.DockingTrigger.transform, gate.DockingTrigger.transform.up); gate.Open(); gate.DockingTrigger.isTrigger = false; if (Requester == GameManager.Inst.PlayerControl.PlayerShip) { gate.DockingTrigger.isTrigger = true; GameManager.Inst.PlayerControl.PlayerShip.IsInPortal = true; } else { requester.Show(); } _waitTimer = 0; } }
public override DockRequestResult Undock(ShipBase requester, out DockSessionBase session) { //find an available gate DockGate selectedGate = FindAvailableGate(); if (selectedGate == null) { session = null; return(DockRequestResult.Busy); } session = new DockingSession(selectedGate, requester, this, true); _dockingSessions.Add((DockingSession)session); return(DockRequestResult.Accept); }
public override DockRequestResult Dock(ShipBase requester, out DockSessionBase session) { //check if requester is allowed to dock //find an available gate DockGate selectedGate = FindAvailableGate(); if (selectedGate == null) { session = null; return(DockRequestResult.Busy); } DockingSession stationSession = new DockingSession(selectedGate, requester, this, false); _dockingSessions.Add(stationSession); session = stationSession; return(DockRequestResult.Accept); }
private DockGate FindAvailableGate() { DockGate selectedGate = null; foreach (DockGate gate in DockGates) { selectedGate = gate; foreach (DockingSession s in _dockingSessions) { if (s.Gate == selectedGate) { selectedGate = null; } } if (selectedGate != null) { break; } } return(selectedGate); }