public class PlayerNetDomination extends PlayerNet
{
        
    /**
     * Nadpisuje ta metode, aby ustawic (a pozniej przywrocic)
     * flagomDomination flage _BLOCK_TRACE _COLLISION
     */
    TriggerObject GetActiveTrigger(Vector vStart, Vector vDir, float fDistance)
    {
        //wlaczamy bazom kolizje
        if ( GetGameInfo() != null )
            GetGameInfo().OnGetActiveTrigger();
        
        TriggerObject cRet = super.GetActiveTrigger( vStart, vDir, fDistance );
        
        //przywracamy stan flag
        if ( GetGameInfo() != null )
            GetGameInfo().OnPostGetActiveTrigger();
                           
        return cRet;
    }

    
    public void SetActiveTrigger(TriggerObject trigger)
    {
        if ( trigger instanceof DominationBase )
        {
            DominationBase cBase = (DominationBase)trigger;
            
            if ( Role == ERole._AUTHORITY )
                EventReachedBase( cBase );
            else
            {
                // klient poprosi serwera o wsparcie
                MsgSendServerBaseReached( cBase );
                // i sprawmy zeby przez chwilke nie byl obiekt aktywny
                cBase.ActiveOffForAWhile();
            }
        }
        else
            super.SetActiveTrigger( trigger );
    }
    
    static final int MSG_SERVER_BASE_REACHED   = 50; // klient wpadl na baze: SMD, TD
    
    /** Odebranie komunikatow przychodzacych z sieci
     */
    public void OnMessage()
    {
        switch ( MessageGetId() )
        {
        case MSG_SERVER_BASE_REACHED:
            MsgRecvServerBaseReached();
            break;
        
        default:
            super.OnMessage();
        }
    }
    
    void MsgSendServerBaseReached( DominationBase cBase )
    {
        if ( Role == ERole._AUTHORITY || cBase == null )
            return;
        
        MessageNew( MSG_SERVER_BASE_REACHED );
        MessagePackInt( cBase.GetNetId() );
        MessageSend();
    }
    
    void MsgRecvServerBaseReached()
    {
        int nBaseId = MessageUnPackInt();
        MessageEnd();
        
        DominationBase cBase = GetBaseByNetId( nBaseId );
        if ( cBase != null )
            EventReachedBase( cBase );
    }
    
    //do nadpisania
    void EventReachedBase( DominationBase cBase )
    {
    }
    
    DominationBase GetBaseByNetId(int nNetId)
    {
        GameObject object = GetObjectByNetId( nNetId );
        try 
        {
            DominationBase base = (DominationBase) object;
            return base;    
        } 
        catch( ClassCastException e) 
        {
            LogD(": Object "+object+" (id "+String.valueOf(nNetId)+") should have been inherited from  DominationBase\n");
        }
        
        return null;
    }
}
