Skip to the content.

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;
            }
            ...
        }
        ...
    }
    ...
}