Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/gameplay3d/GamePlay
Browse files Browse the repository at this point in the history
Conflicts:
	samples/browser/sample-browser.vcxproj.filters
seanpaultaylor committed Jan 24, 2015
2 parents 90a3336 + f13c398 commit aa1f685
Showing 7 changed files with 320 additions and 128 deletions.
4 changes: 3 additions & 1 deletion gameplay/src/Sprite.cpp
Original file line number Diff line number Diff line change
@@ -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;
}
}
2 changes: 1 addition & 1 deletion gameplay/src/TileSet.cpp
Original file line number Diff line number Diff line change
@@ -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 changes: 193 additions & 0 deletions samples/browser/res/common/sprites/sprite.scene
Original file line number Diff line number Diff line change
@@ -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 changes: 16 additions & 0 deletions samples/browser/sample-browser.vcxproj
Original file line number Diff line number Diff line change
@@ -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 changes: 47 additions & 0 deletions samples/browser/sample-browser.vcxproj.filters
Original file line number Diff line number Diff line change
@@ -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>
176 changes: 60 additions & 116 deletions samples/browser/src/SpriteSample.cpp
Original file line number Diff line number Diff line change
@@ -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)
10 changes: 0 additions & 10 deletions samples/browser/src/SpriteSample.h
Original file line number Diff line number Diff line change
@@ -44,20 +44,10 @@ class SpriteSample : public Sample
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;

};

0 comments on commit aa1f685

Please sign in to comment.