float UAISense_Touch::Update() { AIPerception::FListenerMap& ListenersMap = *GetListeners(); for (int32 EventIndex = 0; EventIndex < RegisteredEvents.Num(); ++EventIndex) { const FAITouchEvent& Event = RegisteredEvents[EventIndex]; if (Event.TouchReceiver != NULL && Event.OtherActor != NULL) { IAIPerceptionListenerInterface* PerceptionListener = Cast<IAIPerceptionListenerInterface>(Event.TouchReceiver); if (PerceptionListener != NULL) { UAIPerceptionComponent* PerceptionComponent = PerceptionListener->GetPerceptionComponent(); if (PerceptionComponent != NULL && ListenersMap.Contains(PerceptionComponent->GetListenerId())) { // this has to succeed, will assert a failure FPerceptionListener& Listener = ListenersMap[PerceptionComponent->GetListenerId()]; Listener.RegisterStimulus(Event.OtherActor, FAIStimulus(GetSenseIndex(), 1.f, Event.Location, Event.Location)); } } } } RegisteredEvents.Reset(); // return decides when next tick is going to happen return SuspendNextUpdate; }
float UAISense_Damage::Update() { AIPerception::FListenerMap& ListenersMap = *GetListeners(); for (int32 EventIndex = 0; EventIndex < RegisteredEvents.Num(); ++EventIndex) { const FAIDamageEvent& Event = RegisteredEvents[EventIndex]; IAIPerceptionListenerInterface* PerceptionListener = Cast<IAIPerceptionListenerInterface>(Event.DamagedActor); if (PerceptionListener != NULL) { UAIPerceptionComponent* PerceptionComponent = PerceptionListener->GetPerceptionComponent(); if (PerceptionComponent != NULL) { // this has to succeed, will assert a failure FPerceptionListener& Listener = ListenersMap[PerceptionComponent->GetListenerId()]; Listener.RegisterStimulus(Event.Instigator, FAIStimulus(GetSenseIndex(), Event.Amount, Event.Location, Event.HitLocation)); } } } RegisteredEvents.Reset(); // return decides when next tick is going to happen return SuspendNextUpdate; }
int GetWNSense(char *word, char *lexsn) { SnsIndexPtr snsidx; char buf[256]; sprintf(buf, "%s%%%s", word, lexsn); /* create sensekey */ if ((snsidx = GetSenseIndex(buf)) != NULL) return(snsidx->wnsense); else return(0); }