Browse Source

Merge branch 'master' of https://github.com/gameplay3d/GamePlay

Conflicts:
	samples/browser/sample-browser.vcxproj.filters
seanpaultaylor 11 years ago
parent
commit
aa1f6857e8

+ 3 - 1
gameplay/src/Sprite.cpp

@@ -246,12 +246,14 @@ Sprite* Sprite::create(Properties* properties)
     float heightPercentage = 0.0f;
     if (properties->exists("width"))
     {
-        if (properties->getType("width") == Properties::NUMBER) //TODO: Verify that this works for "100" but fails for "100%"
+        if (properties->getType("width") == Properties::NUMBER)
         {
+			// Number only (200)
             width = properties->getFloat("width");
         }
         else
         {
+			// Number and something else (200%)
             widthPercentage = properties->getFloat("width") / 100.0f;
         }
     }

+ 1 - 1
gameplay/src/TileSet.cpp

@@ -136,7 +136,7 @@ TileSet* TileSet::create(Properties* properties)
             Vector2 cell;
             Vector2 source;
             if (tileProperties->getVector2("cell", &cell) && tileProperties->getVector2("source", &source) &&
-                (cell.x > 0 && cell.y > 0 && cell.x < set->_columnCount && cell.y < set->_rowCount))
+                (cell.x >= 0 && cell.y >= 0 && cell.x < set->_columnCount && cell.y < set->_rowCount))
             {
                 set->_tiles[(int)cell.y * set->_columnCount + (int)cell.x] = source;
             }

+ 193 - 0
samples/browser/res/common/sprites/sprite.scene

@@ -0,0 +1,193 @@
+scene spriteSample
+{
+	// Width and height are expected to be 1280x720
+	node camera
+	{
+		camera
+		{
+			type = ORTHOGRAPHIC
+			nearPlane = 0
+			farPlane = 100
+
+			// zoomX default is game width
+			// zoomY default is game height
+			// aspectRatio default is game width / game height
+		}
+		// width and height are divided in half
+		translate = 640, 360, 0
+	}
+
+	// Background sprite
+	node background
+	{
+		sprite
+		{
+			path = res/common/sprites/background.png
+
+			// game width * 5
+			width = 6400
+			height = 720
+		}
+	}
+
+	// Level floor
+	node floor
+	{
+		tileset
+		{
+			path = res/common/sprites/level.png
+
+			tileWidth = 70
+			tileHeight = 70
+			rows = 3
+			columns = 7
+
+			tile
+			{
+				cell = 0, 0
+				source = 568, 284
+			}
+			tile
+			{
+				cell = 1, 0
+				source = 568, 284
+			}
+			tile
+			{
+				cell = 2, 0
+				source = 568, 284
+			}
+			tile
+			{
+				cell = 3, 0
+				source = 568, 284
+			}
+			tile
+			{
+				cell = 4, 0
+				source = 497, 284
+			}
+
+			tile
+			{
+				cell = 0, 1
+				source = 568, 0
+			}
+			tile
+			{
+				cell = 1, 1
+				source = 568, 0
+			}
+			tile
+			{
+				cell = 2, 1
+				source = 568, 0
+			}
+			tile
+			{
+				cell = 3, 1
+				source = 568, 0
+			}
+			tile
+			{
+				cell = 4, 1
+				source = 710, 142
+			}
+			tile
+			{
+				cell = 5, 1
+				source = 497, 284
+			}
+
+			tile
+			{
+				cell = 0, 2
+				source = 568, 0
+			}
+			tile
+			{
+				cell = 1, 2
+				source = 568, 0
+			}
+			tile
+			{
+				cell = 2, 2
+				source = 568, 0
+			}
+			tile
+			{
+				cell = 3, 2
+				source = 568, 0
+			}
+			tile
+			{
+				cell = 4, 2
+				source = 568, 0
+			}
+			tile
+			{
+				cell = 5, 2
+				source = 710, 142
+			}
+			tile
+			{
+				cell = 6, 2
+				source = 497, 284
+			}
+		}
+	}
+
+	node player
+	{
+		sprite
+		{
+			path = res/common/sprites/player1.png
+
+			width = 72
+			height = 97
+			source = 67, 196, 66, 92
+			frameCount = 13
+		}
+
+		// Position player at lower-left. Y position is floor's tileset height (tileHeight * rows)
+		translate = 0, 210, 0
+	}
+
+	node rocket
+	{
+		sprite
+		{
+			path = res/common/sprites/rocket.png
+
+			width = 128
+			height = 128
+			blendMode = BLEND_ADDITIVE
+			anchor = 0.5, 0.3
+			offset = OFFSET_ANCHOR
+		}
+
+		translate = 1280, 0, 0
+		rotate = 0, 0, 1, -45
+	}
+
+	node water
+	{
+		// Sprite drawable set in code because Effect isn't supported
+		translate = 0, -50, 0
+	}
+
+	node text
+	{
+		text
+		{
+			font = res/ui/arial.gpb
+
+			text = P1
+			size = 18
+			color = 0, 0, 1, 1
+		}
+	}
+
+	// Set active camera
+	activeCamera = camera
+}

+ 16 - 0
samples/browser/sample-browser.vcxproj

@@ -221,6 +221,8 @@ copy ..\..\gameplay\res\logo_powered_white.png res</Command>
     <None Include="res\common\sample.material" />
     <None Include="res\common\sample.scene" />
     <None Include="res\common\sphere.gpb" />
+    <None Include="res\common\sprites\sprite.scene" />
+    <None Include="res\common\sprites\water2d.frag" />
     <None Include="res\common\terrain\encode.bat" />
     <None Include="res\common\terrain\heightmap.r16" />
     <None Include="res\common\terrain\sample.scene" />
@@ -315,6 +317,14 @@ copy ..\..\gameplay\res\logo_powered_white.png res</Command>
     <Image Include="res\common\particles\explosion.png" />
     <Image Include="res\common\particles\fire.png" />
     <Image Include="res\common\particles\smoke.png" />
+    <Image Include="res\common\sprites\background.png" />
+    <Image Include="res\common\sprites\level.png" />
+    <Image Include="res\common\sprites\player1.png" />
+    <Image Include="res\common\sprites\player2.png" />
+    <Image Include="res\common\sprites\player3.png" />
+    <Image Include="res\common\sprites\rocket.png" />
+    <Image Include="res\common\sprites\water2d-noise.png" />
+    <Image Include="res\common\sprites\water2d.png" />
     <Image Include="res\common\terrain\dirt.dds" />
     <Image Include="res\common\terrain\grass.dds" />
     <Image Include="res\common\terrain\normalmap.dds" />
@@ -341,6 +351,12 @@ copy ..\..\gameplay\res\logo_powered_white.png res</Command>
     <Media Include="res\common\audio\braking.wav" />
     <Media Include="res\common\footsteps.wav" />
   </ItemGroup>
+  <ItemGroup>
+    <Text Include="res\common\sprites\level.txt" />
+    <Text Include="res\common\sprites\player1.txt" />
+    <Text Include="res\common\sprites\player2.txt" />
+    <Text Include="res\common\sprites\player3.txt" />
+  </ItemGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">
   </ImportGroup>

+ 47 - 0
samples/browser/sample-browser.vcxproj.filters

@@ -39,6 +39,9 @@
     <Filter Include="res\common\particles">
       <UniqueIdentifier>{98333a4d-224e-4f83-ac60-baca4885bf82}</UniqueIdentifier>
     </Filter>
+    <Filter Include="res\common\sprites">
+      <UniqueIdentifier>{5f9e3afc-ab2a-463d-9376-9d9df3e9fed4}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <None Include="game.config" />
@@ -307,6 +310,12 @@
     <None Include="res\common\particles\grid.material">
       <Filter>res\common</Filter>
     </None>
+    <None Include="res\common\sprites\sprite.scene">
+      <Filter>res\common\sprites</Filter>
+    </None>
+    <None Include="res\common\sprites\water2d.frag">
+      <Filter>res\common\sprites</Filter>
+    </None>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="src\MeshPrimitiveSample.h">
@@ -544,6 +553,30 @@
     <Image Include="res\common\particles\smoke.png">
       <Filter>res\common\particles</Filter>
     </Image>
+    <Image Include="res\common\sprites\background.png">
+      <Filter>res\common\sprites</Filter>
+    </Image>
+    <Image Include="res\common\sprites\level.png">
+      <Filter>res\common\sprites</Filter>
+    </Image>
+    <Image Include="res\common\sprites\player1.png">
+      <Filter>res\common\sprites</Filter>
+    </Image>
+    <Image Include="res\common\sprites\player2.png">
+      <Filter>res\common\sprites</Filter>
+    </Image>
+    <Image Include="res\common\sprites\player3.png">
+      <Filter>res\common\sprites</Filter>
+    </Image>
+    <Image Include="res\common\sprites\rocket.png">
+      <Filter>res\common\sprites</Filter>
+    </Image>
+    <Image Include="res\common\sprites\water2d.png">
+      <Filter>res\common\sprites</Filter>
+    </Image>
+    <Image Include="res\common\sprites\water2d-noise.png">
+      <Filter>res\common\sprites</Filter>
+    </Image>
   </ItemGroup>
   <ItemGroup>
     <Media Include="res\common\footsteps.wav">
@@ -553,4 +586,18 @@
       <Filter>res\common\audio</Filter>
     </Media>
   </ItemGroup>
+  <ItemGroup>
+    <Text Include="res\common\sprites\level.txt">
+      <Filter>res\common\sprites</Filter>
+    </Text>
+    <Text Include="res\common\sprites\player1.txt">
+      <Filter>res\common\sprites</Filter>
+    </Text>
+    <Text Include="res\common\sprites\player2.txt">
+      <Filter>res\common\sprites</Filter>
+    </Text>
+    <Text Include="res\common\sprites\player3.txt">
+      <Filter>res\common\sprites</Filter>
+    </Text>
+  </ItemGroup>
 </Project>

+ 60 - 116
samples/browser/src/SpriteSample.cpp

@@ -7,12 +7,7 @@
 
 SpriteSample::SpriteSample()
     : _font(NULL), _scene(NULL), _cameraNode(NULL),
-      _floorTileSet(NULL), _floorNode(NULL),
-      _backgroundSprite(NULL), _backgroundNode(NULL),
-      _playerSprite(NULL), _playerNode(NULL), _playerAnimation(NULL), _playerMovement(0),
-      _rocketSprite(NULL), _rocketNode(NULL),
-      _waterSprite(NULL), _waterNode(NULL),
-      _text(NULL), _textNode(NULL)
+      _playerSprite(NULL), _playerNode(NULL), _playerAnimation(NULL), _playerMovement(0)
 {
 }
 
@@ -21,121 +16,70 @@ void SpriteSample::initialize()
     // Create the font for drawing the framerate.
     _font = Font::create("res/ui/arial.gpb");
 
-    // Create an orthographic projection matrix.
-    float width = (float)getWidth();
-    float height = (float)getHeight();
-    float aspectRatio = width / height;
-    _scene = Scene::create();
-    _cameraNode = _scene->addNode("camera");
-    Camera* camera = Camera::createOrthographic(width, height, aspectRatio, 0, 100);
-    _cameraNode->setCamera(camera);
-    _scene->setActiveCamera(camera);
-    SAFE_RELEASE(camera);
-    _cameraNode->translateX(width / 2);
-    _cameraNode->translateY(height / 2);
+	// Load sprite scene
+	_scene = Scene::load("res/common/sprites/sprite.scene");
+	_cameraNode = _scene->findNode("camera");
 
-    // Background sprite image
-    _backgroundSprite = Sprite::create("res/common/sprites/background.png", getWidth() * 5, getHeight());
-    _backgroundNode = _scene->addNode("background");
-    _backgroundNode->setDrawable(_backgroundSprite);
-    
-    // Level floor tile set
-    _floorTileSet = TileSet::create("res/common/sprites/level.png", 70, 70, 3, 7);
-    _floorTileSet->setTileSource(0, 0, Vector2(568, 284));
-    _floorTileSet->setTileSource(1, 0, Vector2(568, 284));
-    _floorTileSet->setTileSource(2, 0, Vector2(568, 284));
-    _floorTileSet->setTileSource(3, 0, Vector2(568, 284));
-    _floorTileSet->setTileSource(4, 0, Vector2(497, 284));
-    
-    _floorTileSet->setTileSource(0, 1, Vector2(568, 0));
-    _floorTileSet->setTileSource(1, 1, Vector2(568, 0));
-    _floorTileSet->setTileSource(2, 1, Vector2(568, 0));
-    _floorTileSet->setTileSource(3, 1, Vector2(568, 0));
-    _floorTileSet->setTileSource(4, 1, Vector2(710, 142));
-    _floorTileSet->setTileSource(5, 1, Vector2(497, 284));
-    
-    _floorTileSet->setTileSource(0, 2, Vector2(568, 0));
-    _floorTileSet->setTileSource(1, 2, Vector2(568, 0));
-    _floorTileSet->setTileSource(2, 2, Vector2(568, 0));
-    _floorTileSet->setTileSource(3, 2, Vector2(568, 0));
-    _floorTileSet->setTileSource(4, 2, Vector2(568, 0));
-    _floorTileSet->setTileSource(5, 2, Vector2(710, 142));
-    _floorTileSet->setTileSource(6, 2, Vector2(497, 284));
-    
-    _floorNode = _scene->addNode("floor");
-    _floorNode->setDrawable(_floorTileSet);
-    
-    // Idle[0]
-    _playerSprite = Sprite::create("res/common/sprites/player1.png", 72.0f, 97.0f, Rectangle(67, 196, 66, 92), 13);
-    //_playerSprite->computeFrames(3, 1);
-    // Walk [1 - 11]
-    _playerSprite->setFrameSource(1, Rectangle( 0, 0, 72, 92));
-    _playerSprite->setFrameSource(2, Rectangle(73, 0, 72, 97));
-    _playerSprite->setFrameSource(3, Rectangle(146, 0, 72, 97));
-    _playerSprite->setFrameSource(4, Rectangle(0, 98, 72, 97));
-    _playerSprite->setFrameSource(5, Rectangle(73, 98, 72, 97));
-    _playerSprite->setFrameSource(6, Rectangle(146, 98, 72, 97));
-    _playerSprite->setFrameSource(7, Rectangle(219, 0, 72, 97));
-    _playerSprite->setFrameSource(8, Rectangle(292, 0, 72, 97));
-    _playerSprite->setFrameSource(9, Rectangle(219, 98, 72, 97));
-    _playerSprite->setFrameSource(10, Rectangle(365, 0, 72, 97));
-    _playerSprite->setFrameSource(11, Rectangle(292, 98, 72, 97));
-    // Jump[12]
-    _playerSprite->setFrameSource(12, Rectangle(438, 93, 67, 94));
-    _playerNode = _scene->addNode("player");
-    _playerNode->setDrawable(_playerSprite);
-    _playerNode->translateY(_floorTileSet->getHeight());
-    
-    // The player animation clips
-    unsigned int keyTimes[4] = {0, 1, 11, 12};
-    float keyValues[4] =  { 0, 1, 11, 12 };
-    _playerAnimation = _playerSprite->createAnimation("player-animations", Sprite::ANIMATE_KEYFRAME, 4, keyTimes, keyValues,
-                                                Curve::LINEAR);
-    _playerAnimation->createClip("idle", 0, 0);
-    _playerAnimation->createClip("walk", 1, 11)->setRepeatCount(AnimationClip::REPEAT_INDEFINITE);
-    // Set the speed to 24 FPS
-    _playerAnimation->getClip("walk")->setSpeed(24.0f/1000.0f);
-    _playerAnimation->play("idle");
-    
-    // Rocket
-    _rocketSprite = Sprite::create("res/common/sprites/rocket.png", 128, 128);
-    _rocketSprite->setBlendMode(Sprite::BLEND_ADDITIVE);
-    _rocketSprite->setAnchor(Vector2(0.5f, 0.3f));
-    _rocketSprite->setOffset(Sprite::OFFSET_ANCHOR);
-    _rocketNode = _scene->addNode("rocket");
-    _rocketNode->setDrawable(_rocketSprite);
-    _rocketNode->translate(Vector3(getWidth(), 0,  0));
-    _rocketNode->rotateZ(MATH_DEG_TO_RAD(-45));
-    
-    // Custom Effect in sprite
-    Effect* waterEffect = Effect::createFromFile("res/shaders/sprite.vert", "res/common/sprites/water2d.frag");
-    _waterSprite = Sprite::create("res/common/sprites/water2d.png", getWidth() * 5, getHeight() / 3, waterEffect);
-    _waterSprite->setAnchor(Vector2::zero());
-    _waterSprite->setOpacity(0.5f);
-    _waterNode = _scene->addNode("water");
-    _waterNode->setDrawable(_waterSprite);
-    Material* waterMaterial = _waterSprite->getMaterial();
-    Texture::Sampler* noiseSampler = Texture::Sampler::create("res/common/sprites/water2d-noise.png");
-    waterMaterial->getParameter("u_texture_noise")->setValue(noiseSampler);
-    SAFE_RELEASE(noiseSampler);
-    waterMaterial->getParameter("u_time")->bindValue(this, &SpriteSample::getTime);
-    _waterNode->translateY(-50);
-    
-    // Text node.
-    _text = Text::create("res/ui/arial.gpb", "P1", Vector4(0, 0, 1, 1), 18);
-    _textNode = Node::create("text");
-    _playerNode->addChild(_textNode);
-    _text->setWidth(dynamic_cast<Sprite*>(_playerNode->getDrawable())->getWidth());
-    _textNode->setDrawable(_text);
-    _text->setJustify(Font::ALIGN_TOP_HCENTER);
-    _textNode->translateY(dynamic_cast<Sprite*>(_playerNode->getDrawable())->getHeight());
+	// Setup the player
+	_playerNode = _scene->findNode("player");
+	_playerSprite = dynamic_cast<Sprite*>(_playerNode->getDrawable());
+
+	// Idle [0] - Set at load time
+	// Walk [1 - 11]
+	_playerSprite->setFrameSource(1, Rectangle( 0, 0, 72, 92));
+	_playerSprite->setFrameSource(2, Rectangle(73, 0, 72, 97));
+	_playerSprite->setFrameSource(3, Rectangle(146, 0, 72, 97));
+	_playerSprite->setFrameSource(4, Rectangle(0, 98, 72, 97));
+	_playerSprite->setFrameSource(5, Rectangle(73, 98, 72, 97));
+	_playerSprite->setFrameSource(6, Rectangle(146, 98, 72, 97));
+	_playerSprite->setFrameSource(7, Rectangle(219, 0, 72, 97));
+	_playerSprite->setFrameSource(8, Rectangle(292, 0, 72, 97));
+	_playerSprite->setFrameSource(9, Rectangle(219, 98, 72, 97));
+	_playerSprite->setFrameSource(10, Rectangle(365, 0, 72, 97));
+	_playerSprite->setFrameSource(11, Rectangle(292, 98, 72, 97));
+	// Jump[12]
+	_playerSprite->setFrameSource(12, Rectangle(438, 93, 67, 94));
+
+	// The player animation clips
+	unsigned int keyTimes[4] = {0, 1, 11, 12};
+	float keyValues[4] =  { 0, 1, 11, 12 };
+	_playerAnimation = _playerSprite->createAnimation("player-animations", Sprite::ANIMATE_KEYFRAME, 4, keyTimes, keyValues, Curve::LINEAR);
+	_playerAnimation->createClip("idle", 0, 0);
+	_playerAnimation->createClip("walk", 1, 11)->setRepeatCount(AnimationClip::REPEAT_INDEFINITE);
+	// Set the speed to 24 FPS
+	_playerAnimation->getClip("walk")->setSpeed(24.0f/1000.0f);
+	_playerAnimation->play("idle");
+
+	// Setup player text
+	Node* playerTextNode = _scene->findNode("text");
+	playerTextNode->addRef();
+	_scene->removeNode(playerTextNode); //XXX This is because SceneLoader doesn't support loading child nodes for other nodes
+	_playerNode->addChild(playerTextNode);
+
+	playerTextNode->translateY(_playerSprite->getHeight());
+	Text* playerText = dynamic_cast<Text*>(playerTextNode->getDrawable());
+	playerText->setJustify(Font::ALIGN_TOP_HCENTER);
+	playerText->setWidth(_playerSprite->getWidth());
+	SAFE_RELEASE(playerTextNode);
+
+	// Custom Effect in sprite
+	Effect* waterEffect = Effect::createFromFile("res/shaders/sprite.vert", "res/common/sprites/water2d.frag");
+	Sprite* waterSprite = Sprite::create("res/common/sprites/water2d.png", getWidth() * 5, getHeight() / 3, waterEffect);
+	SAFE_RELEASE(waterEffect);
+	waterSprite->setAnchor(Vector2::zero());
+	waterSprite->setOpacity(0.5f);
+	_scene->findNode("water")->setDrawable(waterSprite);
+	Material* waterMaterial = waterSprite->getMaterial();
+	SAFE_RELEASE(waterSprite);
+	Texture::Sampler* noiseSampler = Texture::Sampler::create("res/common/sprites/water2d-noise.png");
+	waterMaterial->getParameter("u_texture_noise")->setValue(noiseSampler);
+	SAFE_RELEASE(noiseSampler);
+	waterMaterial->getParameter("u_time")->bindValue(this, &SpriteSample::getTime);
 }
 
 void SpriteSample::finalize()
 {
-    SAFE_RELEASE(_playerSprite);
-    SAFE_RELEASE(_rocketSprite);
-    SAFE_RELEASE(_waterSprite);
+	SAFE_RELEASE(_scene);
 }
 
 void SpriteSample::update(float elapsedTime)

+ 0 - 10
samples/browser/src/SpriteSample.h

@@ -44,20 +44,10 @@ private:
     Font* _font;
     Scene* _scene;
     Node* _cameraNode;
-    TileSet* _floorTileSet;
-    Node* _floorNode;
-    Sprite* _backgroundSprite;
-    Node* _backgroundNode;
     Sprite* _playerSprite;
     Node* _playerNode;
     Animation* _playerAnimation;
     int _playerMovement;
-    Sprite* _rocketSprite;
-    Node* _rocketNode;
-    Sprite* _waterSprite;
-    Node* _waterNode;
-    Text* _text;
-    Node* _textNode;
     
 };