Partii Trick code
Painting selection decoding
Node* setCollisionPointerByName(Node* rootNode, const char* name, uint id, std::map<void*, uint> *collisionToID_Map) {
Node* n = DynamicCast<Node>(rootNode->FindChild(name));
if (n)
{
CollisionObjectController* collisionController = n->GetController<CollisionObjectController>();
if (collisionController) {
collisionController->Get()->setUserPointer(n);
collisionToID_Map->emplace(n, id);
return n;
}
}
return NULL;
}
// At model load time
setCollisionPointerByName(pScene, "Printer", PRINTER_ID, &(mspPlayer->collisionToID_Map));
setCollisionPointerByName(pScene, "CRT", CRT_ID, &(mspPlayer->collisionToID_Map));
setCollisionPointerByName(pScene, "PrinterTable", PRINTER_TABLE_ID, &(mspPlayer->collisionToID_Map));
setCollisionPointerByName(pScene, "iPainting1", I_PAINTING_1_ID, &(mspPlayer->collisionToID_Map));
setCollisionPointerByName(pScene, "iPainting2", I_PAINTING_2_ID, &(mspPlayer->collisionToID_Map));
setCollisionPointerByName(pScene, "iPainting3", I_PAINTING_3_ID, &(mspPlayer->collisionToID_Map));
...
mspCamera->GetPickRay(cursorPosition, origin, direction);
direction.Normalize();
btVector3 rayStart = PhysicsWorld::Convert(origin);
btVector3 rayEnd = rayStart + PhysicsWorld::Convert(direction * 1000.0F);
btCollisionWorld::ClosestRayResultCallback hitCallback(rayStart, rayEnd);
mpPhysicsWorld->Get()->rayTest(rayStart, rayEnd, hitCallback);
if (hitCallback.hasHit())
{
mpNode = DynamicCast<Node>(GetSceneObject());
void* pUserPointer = hitCallback.m_collisionObject->getUserPointer();
if (collisionToID_Map.count(pUserPointer))
{
// If user selects the printer
if (collisionToID_Map[pUserPointer] == PRINTER_ID ||
collisionToID_Map[pUserPointer] == CRT_ID ||
collisionToID_Map[pUserPointer] == PRINTER_TABLE_ID)
{
if (selectedID) {
std::string imageName = "";
if (selectedID == I_PAINTING_1_ID)
imageName = "painting1";
...
}
} else {
if (collisionToID_Map[pUserPointer] == I_PAINTING_1_ID) {
noticeText = "You have selected painting 1!\nGo to the printer and you can print it out!";
selectedID = I_PAINTING_1_ID;
}
...
}
...
}
...
}