Code: Select all
CEGUI::Vector2f mouse_pos = context.getMouseCursor().getPosition();
Ogre::Ray mouse_ray =
cam->getCameraToViewportRay(
mouse_pos.d_x / float(e.state.width),
mouse_pos.d_y / float(e.state.height));
ray_query->setRay(mouse_ray);
ray_query->setSortByDistance(true);
Ogre::RaySceneQueryResult& result = ray_query->execute();
Ogre::RaySceneQueryResult::iterator it = result.begin();
movable_found = false;
for ( ; it != result.end(); it++)
{
bool valid_movable =
it->movable &&
it->movable->getName() != "" &&
it->movable->getName() != "PlayerCamera";
if (valid_movable)
{
cur_object = it->movable->getParentSceneNode();
movable_found = true;
break;
}
}
Ogre::TerrainGroup::RayResult terrain_result =
terrain_group->rayIntersects(mouse_ray);
if (!movable_found && terrain_result.terrain)
{
char name[16];
Ogre::Entity* ent;
if (robot_mode)
{
sprintf(name, "Robot%d", count++);
ent = scene_mgr->createEntity(name, "robot.mesh");
}
else
{
sprintf(name, "Ninja%d", count++);
ent = scene_mgr->createEntity(name, "ninja.mesh");
}
cur_object = scene_mgr->getRootSceneNode()->createChildSceneNode(
std::string(name) + "Node");
cur_object->setPosition(terrain_result.position);
cur_object->attachObject(ent);
cur_object->setScale(0.1f, 0.1f, 0.1f);
}