Example #1
0
    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;
        }
    }
Example #2
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);
    }
Example #3
0
    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);
    }
Example #4
0
    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);
    }