bool HelloWorld::init() { if ( !Layer::init() ) { return false; } FileUtils::getInstance()->addSearchPath("particles/materials"); FileUtils::getInstance()->addSearchPath("particles/scripts"); FileUtils::getInstance()->addSearchPath("models"); // Particles are created with Particle Universe editor auto particle = PUParticleSystem3D::create("blackHole.pu", "pu_mediapack_01.material"); // auto particle = PUParticleSystem3D::create("explosionSystem.pu"); // auto particle = PUParticleSystem3D::create("hypno.pu", "pu_mediapack_01.material"); this->addChild(particle); particle->setNormalizedPosition(Vec2(0.5,0.5)); particle->setScale(20); particle->startParticleSystem(); return true; }
bool Physics3DCollisionCallbackDemo::init() { if (!Physics3DTestDemo::init()) return false; { Physics3DRigidBodyDes rbDes; float scale = 2.0f; std::vector<Vec3> trianglesList = Bundle3D::getTrianglesList("Sprite3DTest/boss.c3b"); for (auto& it : trianglesList) { it *= scale; } rbDes.mass = 0.0f; rbDes.shape = Physics3DShape::createMesh(&trianglesList[0], (int)trianglesList.size() / 3); auto rigidBody = Physics3DRigidBody::create(&rbDes); auto component = Physics3DComponent::create(rigidBody); auto sprite = Sprite3D::create("Sprite3DTest/boss.c3b"); sprite->addComponent(component); sprite->setRotation3D(Vec3(-90.0f, 0.0f, 0.0f)); sprite->setScale(scale); sprite->setCameraMask((unsigned short)CameraFlag::USER1); this->addChild(sprite); //preload // rigidBody->setCollisionCallback([=](const Physics3DCollisionInfo &ci){ if (!ci.collisionPointList.empty()){ if (ci.objA->getMask() != 0){ auto ps = PUParticleSystem3D::create("Particle3D/scripts/mp_hit_04.pu"); ps->setPosition3D(ci.collisionPointList[0].worldPositionOnB); ps->setScale(0.05f); ps->startParticleSystem(); ps->setCameraMask(2); this->addChild(ps); ps->runAction(Sequence::create(DelayTime::create(1.0f), CallFunc::create([=](){ ps->removeFromParent(); }), nullptr)); ci.objA->setMask(0); } } //CCLOG("------------BoxB Collision Info------------"); //CCLOG("Collision Point Num: %d", ci.collisionPointList.size()); //for (auto &iter : ci.collisionPointList){ // CCLOG("Collision Position On A: (%.2f, %.2f, %.2f)", iter.worldPositionOnA.x, iter.worldPositionOnA.y, iter.worldPositionOnA.z); // CCLOG("Collision Position On B: (%.2f, %.2f, %.2f)", iter.worldPositionOnB.x, iter.worldPositionOnB.y, iter.worldPositionOnB.z); // CCLOG("Collision Normal On B: (%.2f, %.2f, %.2f)", iter.worldNormalOnB.x, iter.worldNormalOnB.y, iter.worldNormalOnB.z); //} //CCLOG("------------BoxB Collision Info------------"); }); } physicsScene->setPhysics3DDebugCamera(_camera); return true; }