void Boss::enterTheBattle() { setRotation3D(Vertex3F(100,0,0)); setScale(0.2); runAction( Sequence::create( Spawn::create( EaseSineOut::create(MoveTo::create(4, Point(0,300))), EaseSineOut::create(ScaleTo::create(4,1)),//TODO: replace with move 3d when possible EaseBackOut::create(RotateBy::create(4+0.5,Vertex3F(-100,0,0))), nullptr ), CallFunc::create(this, callfunc_selector(Boss::startShooting)), CallFunc::create(this, callfunc_selector(Boss::_turns)), nullptr )); }
void Sprite3DWithSkinOutlineTest::addNewSpriteWithCoords(Vec2 p) { std::string fileName = "Sprite3DTest/orc.c3b"; auto sprite = EffectSprite3D::create(fileName); Effect3DOutline* effect = Effect3DOutline::create(); effect->setOutlineColor(Vec3(1,0,0)); effect->setOutlineWidth(0.01f); sprite->addEffect(effect, -1); Effect3DOutline* effect2 = Effect3DOutline::create(); effect2->setOutlineWidth(0.02f); effect2->setOutlineColor(Vec3(1,1,0)); sprite->addEffect(effect2, -2); sprite->setScale(3); sprite->setRotation3D(Vec3(0,180,0)); addChild(sprite); sprite->setPosition( Vec2( p.x, p.y) ); auto animation = Animation3D::create(fileName); if (animation) { auto animate = Animate3D::create(animation); bool inverse = (std::rand() % 3 == 0); int rand2 = std::rand(); float speed = 1.0f; if(rand2 % 3 == 1) { speed = animate->getSpeed() + CCRANDOM_0_1(); } else if(rand2 % 3 == 2) { speed = animate->getSpeed() - 0.5 * CCRANDOM_0_1(); } animate->setSpeed(inverse ? -speed : speed); sprite->runAction(RepeatForever::create(animate)); } }
//------------------------------------------------------------------ // // Billboard Rotation Test // //------------------------------------------------------------------ BillBoardRotationTest::BillBoardRotationTest() { auto root = Sprite3D::create(); root->setNormalizedPosition(Vec2(.5,.25)); addChild(root); auto model = Sprite3D::create("Sprite3DTest/orc.c3b"); model->setScale(5); model->setRotation3D(Vec3(0,180,0)); root->addChild(model); auto bill = BillBoard::create(); bill->setPosition(0, 120); root->addChild(bill); auto sp = Sprite::create("Images/SpookyPeas.png"); sp->setScale(2); bill->addChild(sp); auto lbl = Label::create(); lbl->setPosition(0, 30); lbl->setString("+100"); bill->addChild(lbl); auto r = RotateBy::create(10, Vec3(0,360,0)); auto rp = RepeatForever::create(r); root->runAction(rp); auto jump = JumpBy::create(1, Vec2(0, 0), 30, 1); auto scale = ScaleBy::create(2, 2, 2, 0.1); auto seq = Sequence::create(jump,scale, NULL); auto rot = RotateBy::create(2, Vec3(-90, 0, 0)); auto act = Spawn::create(seq, rot,NULL); auto scale2 = scale->reverse(); auto rot2 = rot->reverse(); auto act2 = Spawn::create(scale2, rot2, NULL); auto seq2 = Sequence::create(act, act2, NULL); auto repeat = RepeatForever::create(seq2); model->runAction(repeat); }
// on "init" you need to initialize your instance bool HelloWorld::init() { if ( !LayerColor::initWithColor(Color4B(255,255,255,255)) ) { return false; } ///////////////////////////// Size winSize = Director::getInstance()->getWinSize(); auto bgLayer = LayerColor::create( Color4B(0, 255, 0, 255), winSize.width, winSize.height); bgLayer->setAnchorPoint(Vec2(0, 0)); bgLayer->setRotation3D(cocos2d::Vertex3F(-20.0, 0.0, 0.0)); this->addChild(bgLayer); auto bgSprite = Sprite::create("Images/HelloWorld.png"); bgSprite->setPosition(Vec2(winSize.width / 2, winSize.height / 2)); bgLayer->addChild(bgSprite); man = Sprite::create("Images/grossini.png"); man->setPosition(Vec2(245, -50)); bgLayer->addChild(man); auto act = MoveBy::create(2.0f, Vec2(0, 450)); auto seq = Sequence::create(Place::create(Vec2(240,-50)), act, nullptr); auto rep = RepeatForever::create(seq); man->runAction(rep); auto listener = EventListenerTouchOneByOne::create(); listener->setSwallowTouches(true); listener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan, this); _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this); return true; }
void Camera::lookAt(const Vec3& lookAtPos, const Vec3& up) { Vec3 upv = up; upv.normalize(); Vec3 zaxis; Vec3::subtract(this->getPosition3D(), lookAtPos, &zaxis); zaxis.normalize(); Vec3 xaxis; Vec3::cross(upv, zaxis, &xaxis); xaxis.normalize(); Vec3 yaxis; Vec3::cross(zaxis, xaxis, &yaxis); yaxis.normalize(); Mat4 rotation; rotation.m[0] = xaxis.x; rotation.m[1] = xaxis.y; rotation.m[2] = xaxis.z; rotation.m[3] = 0; rotation.m[4] = yaxis.x; rotation.m[5] = yaxis.y; rotation.m[6] = yaxis.z; rotation.m[7] = 0; rotation.m[8] = zaxis.x; rotation.m[9] = zaxis.y; rotation.m[10] = zaxis.z; rotation.m[11] = 0; Quaternion quaternion; Quaternion::createFromRotationMatrix(rotation,&quaternion); float rotx = atan2f(2 * (quaternion.w * quaternion.x + quaternion.y * quaternion.z), 1 - 2 * (quaternion.x * quaternion.x + quaternion.y * quaternion.y)); float roty = asin(clampf(2 * (quaternion.w * quaternion.y - quaternion.z * quaternion.x) , -1.0f , 1.0f)); float rotz = -atan2(2 * (quaternion.w * quaternion.z + quaternion.x * quaternion.y) , 1 - 2 * (quaternion.y * quaternion.y + quaternion.z * quaternion.z)); setRotation3D(Vec3(CC_RADIANS_TO_DEGREES(rotx),CC_RADIANS_TO_DEGREES(roty),CC_RADIANS_TO_DEGREES(rotz))); }
bool Slime::init() { Entity::init(); Physics3DRigidBodyDes rbDes; rbDes.mass = 10.0f; rbDes.shape = Physics3DShape::createSphere(13.f); m_RigidBody = Physics3DRigidBody::create(&rbDes); Quaternion quat; Quaternion::createFromAxisAngle(Vec3(0.f, 1.f, 0.f), CC_DEGREES_TO_RADIANS(180), &quat); auto component = Physics3DComponent::create(m_RigidBody, Vec3(0.f, -10.f, 0.f)/*,quat*/); m_RigidBody->setMask(CollisionMask::CM_Slime); m_RigidBody->setCollisionCallback(CC_CALLBACK_1(Slime::collisionCallback, this)); m_RigidBody->setUserData(this); m_RigidBody->setLinearFactor(Vec3(1, 1, 1)); m_RigidBody->setFriction(0.5f); m_RigidBody->setAngularVelocity(Vec3::ZERO); m_RigidBody->setCcdMotionThreshold(0.5f); m_RigidBody->setCcdSweptSphereRadius(0.4f); component->setBtMask(CM_Slime); component->setBtGroup(ColGroup_Slime); auto sprite = Sprite3D::create("model/slime/slime.c3b", "model/slime/baozi.jpg"); sprite->addComponent(component); sprite->setScale(9); sprite->setPosition3D(Vec3(200, 0, 0)); sprite->setRotation3D(Vec3(0, -90, 0)); sprite->setCameraMask((int)CameraFlag::USER1); component->syncNodeToPhysics(); component->setSyncFlag(Physics3DComponent::PhysicsSyncFlag::PHYSICS_TO_NODE); m_Appearence = sprite; addChild(m_Appearence); return true; }
void AttachmentTest::addNewSpriteWithCoords(Vec2 p) { std::string fileName = "Sprite3DTest/orc.c3b"; auto sprite = Sprite3D::create(fileName); sprite->setScale(5); sprite->setRotation3D(Vec3(0,180,0)); addChild(sprite); sprite->setPosition( Vec2( p.x, p.y) ); //test attach auto sp = Sprite3D::create("Sprite3DTest/axe.c3b"); sprite->getAttachNode("Bip001 R Hand")->addChild(sp); auto animation = Animation3D::create(fileName); if (animation) { auto animate = Animate3D::create(animation); sprite->runAction(RepeatForever::create(animate)); } _sprite = sprite; _hasWeapon = true; }
void City_layer::create_house(std::string name,Vec3 pos,Vec3 rotate,float scale) { auto sprite = Sprite3D::create(name+".obj"); sprite->setScale(scale); sprite->setTexture(name+".jpg"); sprite->setRotation3D(rotate); this->addChild(sprite); sprite->setPosition3D(pos); sprite->setCameraMask(2); vecObj.pushBack(sprite); // Vec3 corners[8]={}; // AABB aabbsp1=sprite->getAABB(); // aabbsp1.getCorners(corners); // _aabb.push_back(aabbsp1); // // node1->drawCube(corners, Color4F(0,0,1,1)); }
// on "init" you need to initialize your instance bool Lession25::init() { if ( !Layer::init() ) { return false; } auto winSize = Director::getInstance()->getWinSize(); FileUtils::getInstance()->addSearchPath(FileUtils::getInstance()->getSearchPaths().at(0) + "Lession25/"); ////µÃµ½ÆÁÄ»³ß´ç auto s = Director::getInstance()->getWinSize(); //´´½¨3DÉãÏñ»ú auto _camera = cocos2d::Camera::createPerspective(60, (GLfloat)s.width / s.height, 1, 1000); //ÉèÖÃÉãÏñ»úÑÛ¾¦Î»Öà _camera->setPosition3D(Vec3(0, 200, 200)); //ÉèÖÃÉãÏñ»ú¹Û²ìµãλÖà _camera->lookAt(Vec3(0, 0, 0)); _camera->setCameraFlag(CameraFlag::USER1); addChild(_camera); //´´½¨¾²Ì¬Ä£ÐÍ auto spriteStatic3D = Sprite3D::create("water.c3t"); _sprite3D = spriteStatic3D; spriteStatic3D->setCameraMask(2); spriteStatic3D->setScale(2); spriteStatic3D->setPosition3D(Vec3(0, 0, 0)); spriteStatic3D->setRotation3D(Vec3(-90, 0, 0)); addChild(spriteStatic3D); GLProgramState* state = GLProgramState::create(GLProgram::createWithFilenames("Lession25.vert", "Lession25.frag")); state->applyUniforms(); spriteStatic3D->setGLProgramState(state); return true; }
//------------------------------------------------------------------------- void FKCW_3D_Node::setRotation3D(const FKCW_3D_Vector4&axis,float A) { float fValue = static_cast<float>(A*M_PI/180.0f); setRotation3D(axis, cosf(fValue), sinf(fValue)); }
// on "init" you need to initialize your instance bool MainMenuScene::init() { if ( !Layer::init() ) { return false; } pRate = 3.1415926/2; // Music By Matthew Pable (http://www.matthewpablo.com/) // Licensed under CC-BY 3.0 (http://creativecommons.org/licenses/by/3.0/) CocosDenshion::SimpleAudioEngine::getInstance()->playBackgroundMusic("Star_Chaser.mp3"); SpriteFrameCache::getInstance()->addSpriteFramesWithFile("menu_scene.plist","menu_scene.png"); SpriteFrameCache::getInstance()->addSpriteFramesWithFile("Particle.plist","Particle.png"); Size visibleSize = Director::getInstance()->getVisibleSize(); Point origin = Director::getInstance()->getVisibleOrigin(); //************ adds Plane **************** plane = Plane::create(); this->addChild(plane, 10); this->scheduleUpdate(); //************ adds emission flare **************** auto flare = ParticleSystemQuad::create("missileFlare.plist"); flare->setScale(5); float originX = -9.0f; float originY = 159.0f; float originZ = 9.0f; flare->setTotalParticles(50); flare->setRotation3D(Vertex3F(-originX,-originY,-originZ)); flare->setPosition(-39,0); flare->setPositionType(tPositionType::GROUPED); flare->setStartColor(Color4F(0,0.99,1,1)); plane->addChild(flare, -1); auto emis = ParticleSystemQuad::create("menuEmission.plist"); emis->setScale(3); emis->setRotation3D(Vertex3F(-originX,-originY,-originZ)); emis->setPosition(-40,0); emis->setPositionType(tPositionType::GROUPED); emis->setRotation(180); plane->addChild(emis, -2); //************ adds vanishing **************** auto fileUtil = FileUtils::getInstance(); auto plistData = fileUtil->getValueMapFromFile("vanishingPoint.plist"); //auto sf = SpriteFrame::create("bullets.png", Rect(5,8,24,32)); auto vanishing = ParticleSystemQuad::create(plistData); vanishing->setAnchorPoint(Point(0.5f,0.5f)); vanishing->setPosition(visible_size_macro.width-90,visible_size_macro.height/2 +50); this->addChild(vanishing,1,1); //************* adds background *********** auto background = Sprite::createWithSpriteFrameName("mainmenu_BG.png"); background->setAnchorPoint(Point(0,0)); this->addChild(background,-1,-1); //************* adds start game *********** auto start_normal=Sprite::createWithSpriteFrameName("start_game.png"); auto start_pressed=Sprite::createWithSpriteFrameName("start_game.png"); startgame_item = MenuItemSprite::create(start_normal, start_pressed, CC_CALLBACK_1(MainMenuScene::startgame, this)); startgame_item->setPosition(visibleSize.width/2,200); startgame_item->setScale(1.3); //************* license ******************* auto license_normal=Sprite::createWithSpriteFrameName("license.png"); auto license_pressed=Sprite::createWithSpriteFrameName("license.png"); license_item = MenuItemSprite::create(license_normal, license_pressed, CC_CALLBACK_1(MainMenuScene::license, this)); license_item->setPosition(visibleSize.width/2-200,100); license_item->setScale(0.7); //************* credits ****************** auto credits_normal=Sprite::createWithSpriteFrameName("credits.png"); auto credits_pressed=Sprite::createWithSpriteFrameName("credits.png"); credits_item = MenuItemSprite::create(credits_normal, credits_pressed, CC_CALLBACK_1(MainMenuScene::credits, this)); credits_item->setPosition(visibleSize.width/2+200,100); credits_item->setScale(0.7); //************* Menu ****************** auto menu = Menu::create(startgame_item,license_item,credits_item, NULL); menu->setPosition(origin); this->addChild(menu,3); return true; }
void Fodder::setTurnRate(float turn) { setMoveMode(moveMode::kTurn); setRotation3D(Vertex3F(fabsf(turn)*0.15, turn, 0)); _turn = turn; }
Scene* Chapter10_5::createScene() { //cocos2d::Rect visibleRect = Director::getInstance()->getOpenGLView()->getVisibleRect(); Size visibleSize = Director::getInstance()->getVisibleSize(); Vec2 origin = Director::getInstance()->getVisibleOrigin(); auto winSize = Director::getInstance()->getWinSize(); // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // create a scene // 'scene' is an autorelease object // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ auto scene = Scene::create(); // add title auto label = LabelTTF::create("camera test", "Arial", 24); label->setPosition(Vec2(origin.x+visibleSize.width/2, origin.y+visibleSize.height/2).x, Vec2(origin.x+visibleSize.width/2, origin.y+visibleSize.height).y - 30); scene->addChild(label, -1); //add the menu item for back to main menu label = LabelTTF::create("MainMenu", "Arial", 24); auto menuItem = MenuItemLabel::create(label); menuItem->setCallback([&](cocos2d::Ref *sender) { Director::getInstance()->replaceScene(Chapter10::createScene()); }); auto menu = Menu::create(menuItem, nullptr); menu->setPosition( Vec2::ZERO ); menuItem->setPosition( Vec2( Vec2(origin.x+visibleSize.width, origin.y+visibleSize.height/2).x - 80, Vec2(origin.x+visibleSize.width/2, origin.y).y + 25) ); scene->addChild(menu, 1); auto layer3D=Layer::create(); scene->addChild(layer3D,2); std::string fileName = "orc.c3b"; auto sprite = Sprite3D::create(fileName); sprite->setScale(5.f); sprite->setRotation3D(Vec3(0,180,0)); sprite->setPosition( Vec2(origin.x+visibleSize.width/2, origin.y+visibleSize.height/2).x, Vec2(origin.x+visibleSize.width/2, origin.y+visibleSize.height/2).y ); // play animation auto animation = Animation3D::create(fileName); if (animation) { auto animate = Animate3D::create(animation); animate->setSpeed(1); sprite->runAction(RepeatForever::create(animate)); } //add to scene layer3D->addChild(sprite); // add camera auto camera=Camera::createPerspective(60, (GLfloat)winSize.width/winSize.height, 1, 1000); camera->setCameraFlag(CameraFlag::USER1);// set camera flag camera->setPosition3D(Vec3(0, 0, 230) + sprite->getPosition3D()); camera->lookAt(sprite->getPosition3D(), Vec3(0,1,0)); // create camera action auto action = MoveBy::create(3, Vec2(100, 0)); auto action_back = action->reverse(); auto action1 = MoveBy::create(3, Vec2(0, 100)); auto action_back1 = action1->reverse(); auto seq = Sequence::create( action, action_back, action1, action_back1, nullptr ); // run camera action camera->runAction( RepeatForever::create(seq) ); layer3D->addChild(camera); // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // set camera mask // when node's camera-mask & camer-flag result is true, the node is visible for this camera. // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ layer3D->setCameraMask(0x2); // return the scene return scene; }
bool Physics3DTerrainDemo::init() { if (!Physics3DTestDemo::init()) return false; Terrain::DetailMap r("TerrainTest/dirt.jpg"),g("TerrainTest/Grass2.jpg",10),b("TerrainTest/road.jpg"),a("TerrainTest/GreenSkin.jpg",20); Terrain::TerrainData data("TerrainTest/heightmap129.jpg","TerrainTest/alphamap.png",r,g,b,a,Size(32,32), 20.0f, 1.0f); auto terrain = Terrain::create(data,Terrain::CrackFixedType::SKIRT); terrain->setMaxDetailMapAmount(4); terrain->setCameraMask(2); terrain->setDrawWire(false); terrain->setSkirtHeightRatio(3); terrain->setLODDistance(64,128,192); terrain->setCameraMask((unsigned short)CameraFlag::USER1); //create terrain Physics3DRigidBodyDes rbDes; rbDes.mass = 0.0f; std::vector<float> heidata = terrain->getHeightData(); auto size = terrain->getTerrainSize(); rbDes.shape = Physics3DShape::createHeightfield(size.width, size.height, &heidata[0], 1.0f, terrain->getMinHeight(), terrain->getMaxHeight(), true, false, true); auto rigidBody = Physics3DRigidBody::create(&rbDes); auto component = Physics3DComponent::create(rigidBody); terrain->addComponent(component); this->addChild(terrain); component->syncNodeToPhysics(); component->setSyncFlag(Physics3DComponent::PhysicsSyncFlag::NONE); //create several spheres rbDes.mass = 1.f; rbDes.shape = Physics3DShape::createSphere(0.5f); float start_x = START_POS_X - ARRAY_SIZE_X/2 + 5.0f; float start_y = START_POS_Y + 20.0f; float start_z = START_POS_Z - ARRAY_SIZE_Z/2; for (int k=0;k<ARRAY_SIZE_Y;k++) { for (int i=0;i<ARRAY_SIZE_X;i++) { for(int j = 0;j<ARRAY_SIZE_Z;j++) { float x = 1.0*i + start_x; float y = 5.0+1.0*k + start_y; float z = 1.0*j + start_z; auto sprite = PhysicsSprite3D::create("Sprite3DTest/sphere.c3b", &rbDes); sprite->setTexture("Sprite3DTest/plane.png"); sprite->setCameraMask((unsigned short)CameraFlag::USER1); sprite->setScale(1.0f / sprite->getContentSize().width); sprite->setPosition3D(Vec3(x, y, z)); this->addChild(sprite); sprite->syncNodeToPhysics(); sprite->setSyncFlag(Physics3DComponent::PhysicsSyncFlag::PHYSICS_TO_NODE); } } } //create mesh std::vector<Vec3> trianglesList = Bundle3D::getTrianglesList("Sprite3DTest/boss.c3b"); rbDes.mass = 0.0f; rbDes.shape = Physics3DShape::createMesh(&trianglesList[0], (int)trianglesList.size() / 3); rigidBody = Physics3DRigidBody::create(&rbDes); component = Physics3DComponent::create(rigidBody); auto sprite = Sprite3D::create("Sprite3DTest/boss.c3b"); sprite->addComponent(component); sprite->setRotation3D(Vec3(-90.0f, 0.0f, 0.0f)); sprite->setPosition3D(Vec3(0.0f, 15.0f, 0.0f)); sprite->setCameraMask(2); this->addChild(sprite); std::vector<std::pair<Physics3DShape*, Mat4> > shapeList; { Mat4 localTrans; auto bodyshape = Physics3DShape::createBox(Vec3(2.0f, 4.0f, 2.0f)); Mat4::createTranslation(0.0f, 2.0f, 0.0f, &localTrans); shapeList.push_back(std::make_pair(bodyshape, localTrans)); auto headshape = Physics3DShape::createSphere(1.5f); Mat4::createTranslation(0.6f, 5.0f, -1.5f, &localTrans); shapeList.push_back(std::make_pair(headshape, localTrans)); auto lhandshape = Physics3DShape::createBox(Vec3(1.0f, 3.0f, 1.0f)); Mat4::createRotation(Vec3(1.0f, 0.0f, 0.0f), CC_DEGREES_TO_RADIANS(15.0f), &localTrans); localTrans.m[12] = -1.5f; localTrans.m[13] = 2.5f; localTrans.m[14] = -2.5f; shapeList.push_back(std::make_pair(lhandshape, localTrans)); auto rhandshape = Physics3DShape::createBox(Vec3(1.0f, 3.0f, 1.0f)); Mat4::createRotation(Vec3(1.0f, 0.0f, 0.0f), CC_DEGREES_TO_RADIANS(-15.0f), &localTrans); localTrans.m[12] = 2.0f; localTrans.m[13] = 2.5f; localTrans.m[14] = 1.f; shapeList.push_back(std::make_pair(rhandshape, localTrans)); rbDes.mass = 10.0f; rbDes.shape = Physics3DShape::createCompoundShape(shapeList); rigidBody = Physics3DRigidBody::create(&rbDes); component = Physics3DComponent::create(rigidBody); auto sprite = Sprite3D::create("Sprite3DTest/orc.c3b"); sprite->addComponent(component); sprite->setRotation3D(Vec3(0.0f, 180.0f, 0.0f)); sprite->setPosition3D(Vec3(-5.0f, 20.0f, 0.0f)); sprite->setScale(0.4f); sprite->setCameraMask(2); this->addChild(sprite); } physicsScene->setPhysics3DDebugCamera(_camera); return true; }