×
Меню
Индекс

MSFD Она на меня смотрит?

А вот прекрасный скрипт от Horatio, позволяющий обнаружить, смотрит ли Актер на прямо игрока:
 
Begin PCLookAtMe
 
float fPCX
float fPCY
float fPCAngle
float fdx
float fdy
float fRatio
 
short sPCLookAtMe
 
set sPCLookAtMe to 1
 
;можно добавить GetLOS здесь
;у меня GetLOS никогда правильно не работал...хотя я не очень старался
 
;если игрок далеко
if ( GetDistance, Player > 8000 )
        set sPCLookAtMe to 0
else
       
;ёо, тригонометрия
;это по-губому подсчитывает направления взгляда игрока относительно
;актера, использыет шаг в 45 градусов
    
 
        set fPCX to ( player->GetPos, X )
        set fPCY to ( player->GetPos, Y )
        set fPCAngle to ( player->GetAngle, Z )
       
        set fdx to GetPos, X
        set fdy to GetPos, Y
       
        set fdx to ( fdx - fPCX )
        set fdy to ( fdy - fPCY )
       
        set fRatio to ( fdx / fdy )
       
       
        if ( fdx > 0 )
                if ( fdy > 0 )
                        if ( fRatio > 1 )
                                if ( fPCAngle < -45 )
                                        set sPCLookAtMe to 0
                                endif
                        else
                                if ( fPCAngle < -90 )
                                        set sPCLookAtMe to 0
                                endif
                               
                                if ( fPCAngle > 135 )
                                        set sPCLookAtMe to 0
                                endif
                        endif
                else
                        if ( fRatio < -1 )
                                if ( fPCAngle < 0 )
                                        if ( fPCAngle > -135 )
                                                set sPCLookAtMe to 0
                                        endif
                                endif
                        else
                                if ( fPCAngle < 45 )
                                        if ( fPCAngle > -90 )
                                                set sPCLookAtMe to 0
                                        endif
                                endif
                        endif
                endif
        else
                if ( fdy > 0 )
                        if ( fRatio < -1 )
                                if ( fPCAngle > 45 )
                                        set sPCLookAtMe to 0
                                endif
                        else
                                if ( fPCAngle > 90 )
                                        set sPCLookAtMe to 0
                                endif
       
                                if ( fPCAngle < -135 )
                                        set sPCLookAtMe to 0
                                endif
                        endif
                else
                        if ( fRatio > 1 )
                                if ( fPCAngle > 0 )
                                        if ( fPCAngle < 135 )
                                                set sPCLookAtMe to 0
                                        endif
                                endif
                        else
                                 if ( fPCAngle > -35 )
                                        if ( fPCAngle < 90 )
                                                set sPCLookAtMe to 0
                                        endif
                                endif
                        endif
                endif
       
        endif
 
endif
 
if ( sPCLookAtMe == 0 )
;делать что-то пока игрок не смотрит
endif
 
End