Adaptando objetos clicáveis do Blender
Comecei o mecanismo dos diálogos. Por enquanto uma tela simplezinha mas operacional.
No Blender eu define 3 propriedades no Logic Editor para cada personagem NPC.
"click" avisando que ele pode ser clicado;
"avatar" o nome da imagem do personagem;
"texto" o caminho de um arquivo texto embutido no próprio .blend ou na base de dados.
O bom é que posso usar marcação HTML para deixar tudo mais bonito.
O mecanismo esta simples, mas assim que eu começar a conexão com a IA os textos irão interagir melhor.
Deu um pouco a mais de trabalho doque deveria porque cometi um erro bobo!
Simplesmente não prestei atenção na forma que a OGRE recebe o valor do mouse para fazer o Ray na cena.
Explicando: A OGRE tem uma função chamada getCameraToViewportRay que recebe um valor entre 0 e 1 (0 o canto esquerdo da tela e 1 o canto direito).
A questão é que eu confundi ela com outras engines e usei um valor entre -1 e 1... resultando num vai e vem de troca de código insano que me fez perder uma boa parte do dia até perceber a "cagada".
gkScene* scene = gkEngine::getSingleton().getActiveScene();
Ogre::Camera* camera =scene->getMainCamera()->getCamera();
Ogre::Ray ray = camera->getCameraToViewportRay(x,y);//(v1, v3.normalisedCopy());
Ogre::RaySceneQuery* query = camera->getSceneManager()->createRayQuery(ray);
Ogre::RaySceneQueryResult &result = query->execute();
lua_pushnumber(L,result.size());
if (result.size()>0)
{
int i = 1;
lua_newtable(L);
for( Ogre::RaySceneQueryResult::iterator itr = result.begin(); itr != result.end(); itr ++ )
{
lua_pushnumber(L,i);
lua_pushstring(L, itr->movable->getName().c_str() );
lua_settable(L,-3);
i++;
}
}
camera->getSceneManager()->destroyQuery(query);
query = 0;
Comentários
Postar um comentário
Como fiquei sabendo que um pobre blogueiro foi processado por um comentário anonimo esses dias, so me resta me precaver contra a ineficácia da legislação em tratar o meio online. Mas eu prometo que libero rapido ^_~