int playstate::Component_FireEvent(lua_State* L) { if(lua_gettop(L) < 3) { luaM_printerror(L, "Expected: self<Component>:FireEvent(typeID, messageID)"); lua_pushnil(L); return 1; } uint32 messageID = lua_tointeger(L, -1); lua_pop(L, 1); uint32 typeID = lua_tointeger(L, -1); lua_pop(L, 1); Component* component = luaM_popobject<Component>(L); if(component != NULL) { SceneNode* node = component->GetNode(); if(node != NULL) node->FireEvent(typeID, messageID); else luaM_printerror(L, "Cannot fire an event on a non-attached component"); } else { luaM_printerror(L, "Expected: self<Component>:FireEvent(typeID, messageID)"); } return 0; }
void SceneGroup::FireEvent(uint32 typeID, uint32 messageID, type_mask typeMask) { Component* component = mComponents.First(); while(component != NULL) { Component* next = component->ComponentLink.Tail; component->NotifyOnEvent(typeID, messageID); component = next; } SceneNode* child = mChildren.First(); while(child != NULL) { SceneNode* next = child->NodeLink.Tail; child->FireEvent(typeID, messageID, typeMask); child = next; } }