예제 #1
0
    public DockRequestResult MidwayDock(ShipBase requester, out DockSessionBase session, int direction)
    {
        Debug.LogError("Midway dock " + ID);
        if (direction == -1)
        {
            if (_dockingStageA > 0 || _sessionA != null)
            {
                session = null;
                return(DockRequestResult.Busy);
            }
            DockingEffectA.SetStage(2);
            _dockingStageA = 3;
            _sessionA      = new TLTransitSession(requester, -1, this);
            session        = _sessionA;
            _sessionA.StartMidwaySession();
            return(DockRequestResult.Accept);
        }
        else if (direction == 1)
        {
            if (_dockingStageB > 0 || _sessionB != null)
            {
                session = null;
                return(DockRequestResult.Busy);
            }
            DockingEffectB.SetStage(2);
            _dockingStageB = 3;
            _sessionB      = new TLTransitSession(requester, 1, this);
            session        = _sessionB;
            _sessionB.StartMidwaySession();
            return(DockRequestResult.Accept);
        }

        session = null;
        return(DockRequestResult.Deny);
    }
예제 #2
0
 public int GetTLSessionDockingStage(TLTransitSession session)
 {
     if (_sessionA == session)
     {
         return(_dockingStageA);
     }
     if (_sessionB == session)
     {
         return(_dockingStageB);
     }
     return(-1);
 }
예제 #3
0
 public bool IsSessionOnMe(TLTransitSession session)
 {
     if (_sessionA == session)
     {
         return(true);
     }
     if (_sessionB == session)
     {
         return(true);
     }
     return(false);
 }
예제 #4
0
 public void AssignLiveSession(int direction, TLTransitSession session)
 {
     if (direction < 0)
     {
         _sessionA = session;
         DockingEffectA.SetStage(1);
         _dockingStageA = 3;
         _dockingTimerA = 0;
     }
     else
     {
         _sessionB = session;
         DockingEffectB.SetStage(1);
         _dockingStageB = 3;
         _dockingTimerB = 0;
     }
 }
예제 #5
0
 public void ClearSession(int direction)
 {
     //Debug.Log("Clearing session, direction " + direction + " I am " + ID);
     if (direction < 0)
     {
         _sessionA = null;
         DockingEffectA.SetStage(0);
         _dockingStageA = 0;
         _dockingTimerA = 0;
     }
     else
     {
         _sessionB = null;
         DockingEffectB.SetStage(0);
         _dockingStageB = 0;
         _dockingTimerB = 0;
     }
 }
예제 #6
0
    public override DockRequestResult Dock(ShipBase requester, out DockSessionBase session)
    {
        //determine direction from requester's location
        float angleA = Vector3.Angle(TriggerA.transform.forward, TriggerA.transform.position - requester.transform.position);
        float angleB = Vector3.Angle(TriggerB.transform.forward, TriggerB.transform.position - requester.transform.position);



        if (angleA < 90 && IsTerminalAorB >= 0)
        {
            //Debug.Log("Docking requested to go to A");
            //direction is going towards A
            //check if anyone is already docking A
            if (_dockingStageA > 0 || _sessionA != null)
            {
                session = null;
                return(DockRequestResult.Busy);
            }
            DockingEffectA.SetStage(1);
            _dockingStageA = 1;
            _sessionA      = new TLTransitSession(requester, -1, this);
            session        = _sessionA;
            return(DockRequestResult.Accept);
        }
        else if (angleB < 90 && IsTerminalAorB <= 0)
        {
            Debug.Log("Docking requested to go to B");
            //directoin is going towards B
            if (_dockingStageB > 0 || _sessionB != null)
            {
                session = null;
                return(DockRequestResult.Busy);
            }
            DockingEffectB.SetStage(1);
            _dockingStageB = 1;
            _sessionB      = new TLTransitSession(requester, 1, this);
            session        = _sessionB;
            return(DockRequestResult.Accept);
        }

        session = null;
        return(DockRequestResult.Deny);
    }