29TerrainTests::TerrainTests()
37#define PLAYER_HEIGHT 0
41 Size visibleSize = Director::getInstance()->getVisibleSize();
44 _camera = Camera::createPerspective(60,visibleSize.width/visibleSize.height,0.1f,800);
45 _camera->setCameraFlag(CameraFlag::USER1);
46 _camera->setPosition3D(Vec3(-1,1.6f,4));
49 Terrain::DetailMap r(
"TerrainTest/dirt.jpg"),g(
"TerrainTest/Grass2.jpg"),b(
"TerrainTest/road.jpg"),a(
"TerrainTest/GreenSkin.jpg");
51 Terrain::TerrainData data(
"TerrainTest/heightmap16.jpg",
"TerrainTest/alphamap.png",r,g,b,a);
53 _terrain = Terrain::create(data,Terrain::CrackFixedType::SKIRT);
54 _terrain->setLODDistance(3.2f,6.4f,9.6f);
59 auto listener = EventListenerTouchAllAtOnce::create();
61 _eventDispatcher->addEventListenerWithSceneGraphPriority(listener,
this);
63 auto rootps = PUParticleSystem3D::create(
"Particle3D/scripts/mp_torch.pu");
64 rootps->setCameraMask((
unsigned short)CameraFlag::USER1);
65 rootps->startParticleSystem();
67 this->addChild(rootps, 0, 0);
72 return "Terrain with skirt";
77 return "Drag to walkThru";
82 float delta = Director::getInstance()->getDeltaTime();
83 auto touch = touches[0];
84 auto location = touch->getLocation();
85 auto PreviousLocation = touch->getPreviousLocation();
86 Point newPos = PreviousLocation - location;
90 _camera->getNodeToWorldTransform().getForwardVector(&cameraDir);
91 cameraDir.normalize();
93 _camera->getNodeToWorldTransform().getRightVector(&cameraRightDir);
94 cameraRightDir.normalize();
96 Vec3 cameraPos=
_camera->getPosition3D();
97 cameraPos+=cameraDir*newPos.y*0.5*delta;
98 cameraPos+=cameraRightDir*newPos.x*0.5*delta;
99 _camera->setPosition3D(cameraPos);
105 return "Player walk around in terrain";
110 return "touch to move";
115 auto listener = EventListenerTouchAllAtOnce::create();
118 _eventDispatcher->addEventListenerWithSceneGraphPriority(listener,
this);
120 Size visibleSize = Director::getInstance()->getVisibleSize();
123 _camera = Camera::createPerspective(60,visibleSize.width/visibleSize.height,0.1f,200);
124 _camera->setCameraFlag(CameraFlag::USER1);
127 Terrain::DetailMap r(
"TerrainTest/dirt.jpg"),g(
"TerrainTest/Grass2.jpg",10),b(
"TerrainTest/road.jpg"),a(
"TerrainTest/GreenSkin.jpg",20);
129 Terrain::TerrainData data(
"TerrainTest/heightmap16.jpg",
"TerrainTest/alphamap.png",r,g,b,a,Size(32,32),40.0f,2);
130 _terrain = Terrain::create(data,Terrain::CrackFixedType::SKIRT);
136 _terrain->setLODDistance(64,128,192);
143 auto rootps = PUParticleSystem3D::create(
"Particle3D/scripts/mp_torch.pu");
144 rootps->setCameraMask((
unsigned short)CameraFlag::USER1);
145 rootps->setScale(30.0f);
146 rootps->startParticleSystem();
150 auto billboard = BillBoard::create(
"Images/btn-play-normal.png");
151 billboard->setPosition3D(Vec3(0,180,0));
152 billboard->setCameraMask((
unsigned short)CameraFlag::USER1);
155 auto animation = Animation3D::create(
"Sprite3DTest/girl.c3b",
"Take 001");
158 auto animate = Animate3D::create(animation);
159 _player->runAction(RepeatForever::create(animate));
163 _camera->setRotation3D(Vec3(-45,0,0));
176 auto touch = touches[0];
177 auto location = touch->getLocationInView();
182 Vec3 nearP(location.x, location.y, 0.0f), farP(location.x, location.y, 1.0f);
184 auto size = Director::getInstance()->getWinSize();
185 _camera->unproject(size, &nearP, &nearP);
186 _camera->unproject(size, &farP, &farP);
187 Vec3 dir = farP - nearP;
189 Vec3 collisionPoint(-999,-999,-999);
190 bool isInTerrain =
_terrain->getIntersectionPoint(Ray(nearP, dir), collisionPoint);
196 dir = collisionPoint -
_player->getPosition3D();
216 auto player = (Sprite3D *)
this;
223 Vec3 curPos= player->getPosition3D();
226 newFaceDir.normalize();
227 Vec3 offset = newFaceDir * 25.0f * dt;
229 player->setPosition3D(curPos);
235 player->getNodeToWorldTransform().getForwardVector(&forward_vec);
236 forward_vec.normalize();
237 player->setPosition3D(player->getPosition3D()-forward_vec*15*dt);
242 player->setRotation3D(player->getRotation3D()+Vec3(0,25*dt,0));
247 player->setRotation3D(player->getRotation3D()+Vec3(0,-25*dt,0));
254 auto playerPos = player->getPosition3D();
255 auto playerModelMat = player->getParent()->getNodeToWorldTransform();
256 playerModelMat.transformPoint(&playerPos);
258 float player_h =
_terrain->getHeight(playerPos.x, playerPos.z,&Normal);
261 player_h = playerPos.y;
267 player->setPositionY(player_h);
269 q2.createFromAxisAngle(Vec3(0,1,0),(float)-M_PI,&q2);
273 player->setRotationQuat(headingQ*q2);
275 vec_offset = player->getNodeToWorldTransform()*vec_offset;
308 auto player = (Sprite3D * )
this;
313 Vec2 player_pos =Vec2(player->getPositionX(),player->getPositionZ());
315 auto dist = player_pos.distance(targetPos);
330 auto sprite =
new (std::nothrow)
Player();
331 if (sprite && sprite->initWithFile(file))
336 sprite->_terrain = terrain;
337 sprite->autorelease();
338 sprite->scheduleUpdate();
341 CC_SAFE_DELETE(sprite);
347 Size visibleSize = Director::getInstance()->getVisibleSize();
350 _camera = Camera::createPerspective(60,visibleSize.width/visibleSize.height,0.1f,800);
351 _camera->setCameraFlag(CameraFlag::USER1);
352 _camera->setPosition3D(Vec3(-1,1.6f,4));
355 Terrain::DetailMap r(
"TerrainTest/dirt.jpg"),g(
"TerrainTest/Grass2.jpg"),b(
"TerrainTest/road.jpg"),a(
"TerrainTest/GreenSkin.jpg");
357 Terrain::TerrainData data(
"TerrainTest/heightmap16.jpg",
"TerrainTest/alphamap.png",r,g,b,a);
359 _terrain = Terrain::create(data,Terrain::CrackFixedType::SKIRT);
360 _terrain->setLODDistance(3.2f,6.4f,9.6f);
365 _terrain->setLightMap(
"TerrainTest/Lightmap.png");
366 auto listener = EventListenerTouchAllAtOnce::create();
368 _eventDispatcher->addEventListenerWithSceneGraphPriority(listener,
this);
373 return "Terrain using light map";
377 return "Drag to walkThru";
381 float delta = Director::getInstance()->getDeltaTime();
382 auto touch = touches[0];
383 auto location = touch->getLocation();
384 auto PreviousLocation = touch->getPreviousLocation();
385 Point newPos = PreviousLocation - location;
389 _camera->getNodeToWorldTransform().getForwardVector(&cameraDir);
390 cameraDir.normalize();
392 _camera->getNodeToWorldTransform().getRightVector(&cameraRightDir);
393 cameraRightDir.normalize();
395 Vec3 cameraPos=
_camera->getPosition3D();
396 cameraPos+=cameraDir*newPos.y*0.5*delta;
397 cameraPos+=cameraRightDir*newPos.x*0.5*delta;
398 _camera->setPosition3D(cameraPos);
#define ADD_TEST_CASE(__className__)
Vec3 camera_offset(0, 45, 60)
#define PLAYER_STATE_IDLE
#define PLAYER_STATE_LEFT
#define PLAYER_STATE_FORWARD
#define PLAYER_STATE_RIGHT
#define PLAYER_STATE_BACKWARD
cocos2d::Terrain * _terrain
static Player * create(const char *file, cocos2d::Camera *cam, cocos2d::Terrain *terrain)
virtual bool isDone() const
cocos2d::Vec3 _headingAxis
virtual void update(float dt)
virtual std::string title() const override
void onTouchesMoved(const std::vector< cocos2d::Touch * > &touches, cocos2d::Event *event)
cocos2d::Camera * _camera
cocos2d::Terrain * _terrain
virtual std::string subtitle() const override
void onTouchesEnd(const std::vector< cocos2d::Touch * > &touches, cocos2d::Event *event)
cocos2d::Camera * _camera
virtual std::string title() const override
cocos2d::Terrain * _terrain
void onTouchesBegan(const std::vector< cocos2d::Touch * > &touches, cocos2d::Event *event)
virtual std::string subtitle() const override
cocos2d::Terrain * _terrain
virtual std::string title() const override
virtual std::string subtitle() const override
cocos2d::Camera * _camera
void onTouchesMoved(const std::vector< cocos2d::Touch * > &touches, cocos2d::Event *event)