本文整理汇总了C++中ISceneManager::createCollisionResponseAnimator方法的典型用法代码示例。如果您正苦于以下问题:C++ ISceneManager::createCollisionResponseAnimator方法的具体用法?C++ ISceneManager::createCollisionResponseAnimator怎么用?C++ ISceneManager::createCollisionResponseAnimator使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ISceneManager
的用法示例。
在下文中一共展示了ISceneManager::createCollisionResponseAnimator方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Init
void Player::Init(UnitObject* pUnit,ITriangleSelector* pTerrain)
{
Irrdevice* pDevice = Irrdevice::GetInstance();
m_pUnitObject = pUnit;
ISceneManager* pSmgr = pDevice->GetSceneManager();
SKeyMap aKeyMap[5];
aKeyMap[0].Action = EKA_MOVE_FORWARD;
aKeyMap[0].KeyCode = KEY_KEY_W;
aKeyMap[1].Action = EKA_MOVE_BACKWARD;
aKeyMap[1].KeyCode = KEY_KEY_S;
aKeyMap[2].Action = EKA_STRAFE_LEFT;
aKeyMap[2].KeyCode = KEY_KEY_A;
aKeyMap[3].Action = EKA_STRAFE_RIGHT;
aKeyMap[3].KeyCode = KEY_KEY_D;
aKeyMap[4].Action = EKA_JUMP_UP;
aKeyMap[4].KeyCode = KEY_SPACE;
//각 유닛마다 카메라 생성
m_pCamera = pSmgr->addCameraSceneNodeFPS(0,100.0f,0.5f,-1,aKeyMap,9,false,0,false,false);
m_pCollisionAnimator = static_cast<ISceneNodeAnimatorCameraFPS*>(*(m_pCamera->getAnimators().begin())); //카메라가 가지고 있는 FPS 카메라 애니메이션 을 가지온다. 이것은 줌 확대 기능 등!!
//카메라 따라댕기는 유닉 오브젝트... 방향에 대한것도 설정해줘야함... 이것은 일단 나중에 테스트를 위하여
m_pUnitObject->GetAnimatedNode()->setParent(m_pCamera);
IMeshSceneNode* pNode = pSmgr->addCubeSceneNode(10,m_pCamera);
m_pCamera->addChild(pUnit->GetAnimatedNode());
pNode->setVisible(true);
m_pMyTriangle = pSmgr->createTriangleSelector(pNode->getMesh(),pNode);
m_pMetaTriangle = pSmgr->createMetaTriangleSelector();
m_pMetaTriangle->addTriangleSelector(pTerrain);
//역시 스크립트 적용 안할 수가 없다... 파일을 읽어와서 적용하던지.... 아우
ISceneNodeAnimatorCollisionResponse * pani = pSmgr->createCollisionResponseAnimator(m_pMetaTriangle,m_pCamera);
m_pCamera->addAnimator(pani);
pani->drop();
}
示例2: main
int main()
{
Input input;
IrrlichtDevice *device = createDevice(video::EDT_DIRECT3D9, dimension2d<u32>(800, 600), 16, false, true, false, &input);
device->setWindowCaption(L"Seas of Gold");
IVideoDriver* driver = device->getVideoDriver();
ISceneManager* smgr = device->getSceneManager();
IGUIEnvironment* guienv = device->getGUIEnvironment();
E_DRIVER_TYPE driverType = driverChoiceConsole();
EffectHandler *effect = new EffectHandler(device, driver->getScreenSize(), false, true);
E_FILTER_TYPE filterType = (E_FILTER_TYPE)core::clamp<u32>((u32)3 - '1', 0, 4);
MapID currentMap;
int skyR = 30, skyG = 30, skyB = 70;
int timer = 0;
SColor sky = SColor(255, skyR, skyG, skyB);
float plPos_x = 0.0f, plPos_y = 0.0f, plPos_z = 0.0f;
bool updateCam = true;
bool menu1 = false;
int state = Main;
int frameCount = 0;
LoadMap loadMap;
Player player;
Interface playerInterface(driver);
ITriangleSelector* selector = 0;
ISceneNodeAnimator* anim = 0;
Vendor southVendor;
Vendor eastVendor;
Vendor northVendor;
//InitializeVendors(northVendor, southVendor, eastVendor, itemD);
//ItemDatabase* itemD = new ItemDatabase;
ItemDatabase itemD;
itemD.Initialize();
//initialize player's inventory
player.AddGold(1000);
player.getInventory()->addItem(itemD.getItem(bronzeOre), 50);
player.getInventory()->addItem(itemD.getItem(ironOre), 50);
player.getInventory()->addItem(itemD.getItem(goldOre), 50);
//initialize south vendor's inventory
southVendor.getInventory()->addItem(itemD.getItem(bronzeOre), 100);
southVendor.getInventory()->addItem(itemD.getItem(coalOre), 100);
southVendor.getInventory()->addItem(itemD.getItem(supplies), 1000);
//initialize north vendor's inventory
northVendor.getInventory()->addItem(itemD.getItem(obsidianOre), 50);
northVendor.getInventory()->addItem(itemD.getItem(supplies), 1000);
//initialize south vendor's inventory
eastVendor.getInventory()->addItem(itemD.getItem(goldOre), 100);
eastVendor.getInventory()->addItem(itemD.getItem(ironOre), 100);
eastVendor.getInventory()->addItem(itemD.getItem(supplies), 1000);
//Item item(0, "bronzeOre", "Sprites/ore_Bronze.png");
//Item item2 = item;
//Item* item2 = itemD.getItem(3);
//inventory.addItem(&item, 2);
//inventory.addItem(&item, 2);
//inventory.addItem(item2, 2);
//int test = 0;
// Load the map scene
//loadMap.Load(smgr, device, Map_Africa);
//loadMap.Load(smgr, device, Map_India);
//loadMap.Load(smgr, device, selector, plyrNode, anim, Map_England);
IAnimatedMeshSceneNode* plyrNode = player.loadPlayerNode(device, smgr);
//plyrNode->setDebugDataVisible((scene::E_DEBUG_SCENE_TYPE)(plyrNode->isDebugDataVisible() ^ scene::EDS_BBOX));
ICameraSceneNode* camera = smgr->addCameraSceneNode(0, plyrNode->getPosition() + vector3df(0, 2, 2), vector3df(0, 0, 100));
loadMap.Load(smgr, device, selector, plyrNode, anim, driver, Map_Africa);
currentMap = Map_Africa;
//loadMap.setCollisions(smgr, selector, plyrNode, anim);
if (loadMap.CollNode)
{
selector = smgr->createOctreeTriangleSelector(loadMap.CollNode->getMesh(), loadMap.CollNode, 32);
for (int i = 0; i < loadMap.CollNode->getMaterialCount(); i++)
{
loadMap.CollNode->getMaterial(i).NormalizeNormals = true;
}
loadMap.CollNode->setTriangleSelector(selector);
}
if (selector)
{
anim = smgr->createCollisionResponseAnimator(selector, plyrNode, vector3df(0.6f, 0.75f, 0.4f), core::vector3df(0.0f, -0.05f, 0.0f),
core::vector3df(0.0f, -0.725f, 0.0f));
plyrNode->addAnimator(anim);
}
ISceneCollisionManager* collMan = smgr->getSceneCollisionManager();
////////////// The Sun ////////////
ILightSceneNode *sun_node;
SLight sun_data;
//.........这里部分代码省略.........
示例3: collisionResponseAnimator
/** Test that collision response animator will reset itself when removed from a
scene node, so that the scene node can then be moved without the animator
jumping it back again. */
bool collisionResponseAnimator(void)
{
IrrlichtDevice * device = irr::createDevice(video::EDT_NULL);
assert(device);
if(!device)
return false;
ISceneManager * smgr = device->getSceneManager();
// Create 2 nodes to the left of a "wall"
ISceneNode * testNode1 = smgr->addEmptySceneNode();
ISceneNode * testNode2 = smgr->addEmptySceneNode();
testNode1->setPosition(vector3df(-50, 0,0));
testNode2->setPosition(vector3df(-50, 0,0));
// Create a "wall" node, and collision response animators for each test node.
IMeshSceneNode * wallNode = smgr->addCubeSceneNode(10.f);
ITriangleSelector * wallSelector = smgr->createTriangleSelectorFromBoundingBox(wallNode);
ISceneNodeAnimatorCollisionResponse * collisionAnimator1 =
smgr->createCollisionResponseAnimator(wallSelector,
testNode1,
vector3df(10,10,10),
vector3df(0, 0, 0));
testNode1->addAnimator(collisionAnimator1);
CMyCollisionCallback collisionCallback;
collisionAnimator1->setCollisionCallback(&collisionCallback);
collisionAnimator1->drop();
collisionAnimator1 = 0;
ISceneNodeAnimatorCollisionResponse * collisionAnimator2 =
smgr->createCollisionResponseAnimator(wallSelector,
testNode2,
vector3df(10,10,10),
vector3df(0, 0, 0));
testNode2->addAnimator(collisionAnimator2);
collisionAnimator2->setCollisionCallback(&collisionCallback);
wallSelector->drop();
// Don't drop() collisionAnimator2 since we're going to use it.
// Get the system in a good state
device->run();
smgr->drawAll();
// Try to move both nodes to the right of the wall.
// This one should be stopped by its animator.
testNode1->setPosition(vector3df(50, 0,0));
collisionCallback.setNextExpectedCollision(testNode1,
vector3df(-5.005f, 0, 0),
vector3df(-15.005f, 0, 0),
false);
// Whereas this one, by forcing the animator to update its target node, should be
// able to pass through the wall. (In <=1.6 it was stopped by the wall even if
// the animator was removed and later re-added);
testNode2->setPosition(vector3df(50, 0,0));
collisionAnimator2->setTargetNode(testNode2);
collisionAnimator2->drop(); // We're done using this now.
device->run();
smgr->drawAll();
bool result = true;
if(testNode1->getAbsolutePosition().X > -15.f)
{
logTestString("collisionResponseAnimator test node 1 wasn't stopped from moving.\n");
assert(false);
result = false;
}
if(testNode2->getAbsolutePosition().X < 50.f)
{
logTestString("collisionResponseAnimator test node 2 was stopped from moving.\n");
assert(false);
result = false;
}
// Now try to move the second node back through the wall again. Now it should be
// stopped by the wall.
testNode2->setPosition(vector3df(-50, 0, 0));
// We'll consume this collision, so the node will actually move all the way through.
collisionCallback.setNextExpectedCollision(testNode2,
vector3df(5.005f, 0, 0),
vector3df(15.005f, 0, 0),
true);
device->run();
smgr->drawAll();
if(testNode2->getAbsolutePosition().X != -50.f)
{
logTestString("collisionResponseAnimator test node 2 was stopped from moving.\n");
//.........这里部分代码省略.........
示例4: sceneNodeAnimator
/** Test functionality of the ISceneNodeAnimator implementations. */
bool sceneNodeAnimator(void)
{
IrrlichtDevice * device = irr::createDevice(video::EDT_NULL, dimension2d<u32>(160, 120));
assert_log(device);
if(!device)
return false;
ISceneManager * smgr = device->getSceneManager();
// Test the hasFinished() method.
ISceneNodeAnimatorCollisionResponse* collisionResponseAnimator
= smgr->createCollisionResponseAnimator(0, 0);
ISceneNodeAnimator* deleteAnimator = smgr->createDeleteAnimator(1);
ISceneNodeAnimator* flyCircleAnimator = smgr->createFlyCircleAnimator();
ISceneNodeAnimator* flyStraightAnimator
= smgr->createFlyStraightAnimator(vector3df(0, 0, 0), vector3df(0, 0, 0), 1, false);
ISceneNodeAnimator* flyStraightAnimatorLooping
= smgr->createFlyStraightAnimator(vector3df(0, 0, 0), vector3df(0, 0, 0), 1, true);
ISceneNodeAnimator* rotationAnimator = smgr->createRotationAnimator(vector3df(0, 0, 0));
array<vector3df> points;
points.push_back(vector3df(0, 0, 0));
points.push_back(vector3df(0, 0, 0));
ISceneNodeAnimator* followSplineAnimator = smgr->createFollowSplineAnimator(0, points, 1000.f);
array<video::ITexture*> textures;
textures.push_back(0);
textures.push_back(0);
ISceneNodeAnimator* textureAnimator = smgr->createTextureAnimator(textures, 1, false);
ISceneNodeAnimator* textureAnimatorLooping = smgr->createTextureAnimator(textures, 1, true);
bool result = true;
ISceneNode * deletedNode = smgr->addEmptySceneNode();
deletedNode->addAnimator(deleteAnimator);
ISceneNode * testNode = smgr->addEmptySceneNode();
testNode->addAnimator(collisionResponseAnimator);
testNode->addAnimator(deleteAnimator);
testNode->addAnimator(flyCircleAnimator);
testNode->addAnimator(flyStraightAnimator);
testNode->addAnimator(flyStraightAnimatorLooping);
testNode->addAnimator(rotationAnimator);
testNode->addAnimator(followSplineAnimator);
testNode->addAnimator(textureAnimator);
testNode->addAnimator(textureAnimatorLooping);
result &= !collisionResponseAnimator->hasFinished();
result &= !deleteAnimator->hasFinished();
result &= !flyCircleAnimator->hasFinished();
result &= !flyStraightAnimator->hasFinished();
result &= !flyStraightAnimatorLooping->hasFinished();
result &= !rotationAnimator->hasFinished();
result &= !followSplineAnimator->hasFinished();
result &= !textureAnimator->hasFinished();
result &= !textureAnimatorLooping->hasFinished();
device->run();
device->sleep(10);
device->run();
smgr->drawAll();
// These animators don't have an endpoint.
result &= !collisionResponseAnimator->hasFinished();
result &= !flyCircleAnimator->hasFinished();
result &= !rotationAnimator->hasFinished();
result &= !followSplineAnimator->hasFinished();
// These animators are looping and so can't finish.
result &= !flyStraightAnimatorLooping->hasFinished();
result &= !textureAnimatorLooping->hasFinished();
// These have an endpoint and have reached it.
result &= deleteAnimator->hasFinished();
result &= flyStraightAnimator->hasFinished();
result &= textureAnimator->hasFinished();
collisionResponseAnimator->drop();
deleteAnimator->drop();
flyCircleAnimator->drop();
flyStraightAnimator->drop();
flyStraightAnimatorLooping->drop();
rotationAnimator->drop();
followSplineAnimator->drop();
textureAnimator->drop();
textureAnimatorLooping->drop();
device->closeDevice();
device->run();
device->drop();
if(!result)
{
//.........这里部分代码省略.........