#include "munga.h" #pragma hdrstop #include "rndorgn.h" #include "renderer.h" #include "app.h" #include "entity.h" // //############################################################################# // RendererOrigin //############################################################################# // RendererOrigin::RendererOrigin( Renderer *the_renderer, Entity *entity, InterestType interest_type, InterestDepth depth_calibration ): InterestOrigin( entity->GetInterestZoneID(), interest_type, depth_calibration ), interestingEntitySocket(NULL) { Check(the_renderer); renderer = the_renderer; } // //############################################################################# // ~RendererOrigin //############################################################################# // RendererOrigin::~RendererOrigin() { } // //############################################################################# // TestInstance //############################################################################# // Logical RendererOrigin::TestInstance() const { InterestOrigin::TestInstance(); Check_Signature(renderer); Check(&interestingEntitySocket); return True; } // //############################################################################# //############################################################################# // void RendererOrigin::AddInterestingEntity(Entity *interesting_entity) { Check(this); Check(interesting_entity); // // Add to the socket // #if DEBUG_LEVEL>0 { SChainIteratorOf iterator(&interestingEntitySocket); Check(&iterator); Verify(iterator.IsPlugMember(interesting_entity) == False); } #endif interestingEntitySocket.Add(interesting_entity); // // Notify the renderer // #if 0 Renderer::NotifyOfNewInterestingEntityMessage message(interesting_entity); Check(&message); Check(application); Check(renderer); application->PostInterestEvent(renderer, &message); #else Renderer::NotifyOfNewInterestingEntityMessage message(interesting_entity); Check(&message); Check(application); Check(application->GetInterestManager()); application->GetInterestManager()->PostRendererEvent( interesting_entity, renderer, &message ); #endif } // //############################################################################# //############################################################################# // void RendererOrigin::RemoveUninterestingEntity(Entity *uninteresting_entity) { Check(this); Check(uninteresting_entity); // // Notify the renderer // #if 1 Check(renderer); renderer->NotifyOfBecomingUninterestingEntity(uninteresting_entity); #else Renderer::NotifyOfBecomingUninterestingEntityMessage message(uninteresting_entity); Check(&message); Check(application); Check(renderer); application->PostInterestEvent(renderer, &message); #endif // // Remove from socket // #if DEBUG_LEVEL>0 { SChainIteratorOf iterator(&interestingEntitySocket); Verify(iterator.IsPlugMember(uninteresting_entity) == True); } #endif PlugIterator remover(uninteresting_entity); remover.RemoveSocket(&interestingEntitySocket); } // //############################################################################# //############################################################################# // void RendererOrigin::RemoveUninterestingEntities() { Check(this); // // Notify the renderer of uninteresting entities // SChainIteratorOf iterator(&interestingEntitySocket); Entity *uninteresting_entity; Check(&iterator); #if 0 while ((uninteresting_entity = iterator.GetCurrent()) != NULL) { Check(uninteresting_entity); Check(renderer); renderer->NotifyOfBecomingUninterestingEntity(uninteresting_entity); iterator.Remove(); } #else while ((uninteresting_entity = iterator.GetCurrent()) != NULL) { Check(uninteresting_entity); RemoveUninterestingEntity(uninteresting_entity); } #endif } //~~~~~~~~~~~~~~~~~ RendererOrigin__InterestingEntityIterator ~~~~~~~~~~~~~~~~~ RendererOrigin__InterestingEntityIterator:: RendererOrigin__InterestingEntityIterator( RendererOrigin *renderer_origin ): SChainIteratorOf(&renderer_origin->interestingEntitySocket) { } RendererOrigin__InterestingEntityIterator:: ~RendererOrigin__InterestingEntityIterator() { }