Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #102 from PunchWolf/rapanui-multilayer
Rapanui multilayer support (RNLayer)
- Loading branch information
Showing
38 changed files
with
6,198 additions
and
9 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
------------------------------------------------------------------------- | ||
-- Date: 12/05/2012 | ||
-- @Author: Marko Pukari | ||
-- Multilayer is used to create HUD layer which stays stationary. | ||
-- all objects added to he HUD layer will move with the camera movement | ||
-- | ||
-------------------------------------------------------------------------- | ||
|
||
-- variables to make our work easier | ||
local screen = RNFactory.screen | ||
local viewport = screen.viewport | ||
local layers = screen.layers | ||
local mainlayer = layers:get(RNFactory.MAIN_LAYER) | ||
|
||
-- create camera and place it to the main layer | ||
local camera = MOAICamera2D.new () | ||
|
||
layers:get(RNLayer.MAIN_LAYER):setCamera(camera) | ||
|
||
--create new layer for hud | ||
local hudlayer = layers:createLayerWithPartition(RNLayer.HUD_LAYER,viewport) | ||
|
||
--create backgroud | ||
--if you don't give the layer to the create, the image will be added to the mainlayer | ||
local background = RNFactory.createImageFrom("images/background-landscape-hd.png",mainlayer) | ||
local gamegroup = RNGroup:new() | ||
|
||
--create new image to the game/mainlayer | ||
local gameobject = RNFactory.createImageFrom("images/tile0.png",mainlayer) | ||
gameobject.x = 100 | ||
gameobject.y = 100 | ||
|
||
--create new image to the hudlayer | ||
local hudobject = RNFactory.createImageFrom("images/tile1.png",hudlayer) | ||
hudobject.x = 200 | ||
hudobject.y = 300 | ||
|
||
--move camera. Hud image stays on the same place while the camera moves acros the | ||
--background. Images on game/mainlayer stays where they where placed | ||
camera:seekLoc(100,100,5) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
--[[ | ||
-- | ||
-- RapaNui | ||
-- | ||
-- by Ymobe ltd (http://ymobe.co.uk) | ||
-- | ||
-- LICENSE: | ||
-- | ||
-- RapaNui uses the Common Public Attribution License Version 1.0 (CPAL) http://www.opensource.org/licenses/cpal_1.0. | ||
-- CPAL is an Open Source Initiative approved | ||
-- license based on the Mozilla Public License, with the added requirement that you attribute | ||
-- Moai (http://getmoai.com/) and RapaNui in the credits of your program. | ||
]] | ||
|
||
-- Author: niom | ||
-- Date: 11/25/12 | ||
|
||
RNLayer = { | ||
LAYER_WITH_SAME_NAME_EXISTS = "layer with same name already exists", | ||
MAIN_LAYER = "mainlayer" | ||
} | ||
|
||
function RNLayer:new() | ||
local layers = {} | ||
setmetatable(layers,self) | ||
self.__index = self | ||
return layers | ||
end | ||
|
||
function RNLayer:createLayer(name,viewport) | ||
local layer = MOAILayer2D.new() | ||
local index = table.getn(self) + 1 | ||
|
||
if self:get(name) then | ||
return nil, RNLayer.LAYER_WITH_SAME_NAME_EXISTS | ||
end | ||
|
||
self[index] = {} | ||
self[index].layer = layer | ||
self[index].name = name | ||
layer:setViewport(viewport) | ||
MOAISim.pushRenderPass(layer) | ||
|
||
return layer | ||
end | ||
|
||
function RNLayer:get(name) | ||
for i,container in pairs(self) do | ||
if container.name == name then | ||
return container.layer | ||
end | ||
end | ||
end | ||
|
||
function RNLayer:createLayerWithPartition(name,viewport) | ||
local layer = self:createLayer(name,viewport) | ||
local partition = MOAIPartition.new() | ||
layer:setPartition(partition) | ||
return layer,partition | ||
end | ||
|
||
function RNLayer:remove(layer) | ||
for i, container in pairs(self) do | ||
if container.layer == layer then | ||
self:clearContainer(container) | ||
table.remove(self, i) | ||
end | ||
end | ||
end | ||
|
||
function RNLayer:removeAll() | ||
while table.getn(self) > 0 do | ||
self:clearContainer(self[1]) | ||
table.remove(self, 1) | ||
end | ||
end | ||
|
||
function RNLayer:clearContainer(container) | ||
container.layer:clear() | ||
container.layer = nil | ||
container.name = nil | ||
end | ||
|
||
return RNLayer |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
-- Author: Marko Pukari | ||
-- Date: 12/2/12 | ||
|
||
function suite_setup() | ||
require("RNFactory") | ||
end | ||
|
||
function suite_teardown() | ||
end | ||
|
||
function test_ok() | ||
assert_true(true) | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,102 @@ | ||
-- Author: Marko Pukari | ||
-- Date: 12/2/12 | ||
|
||
package.path = package.path .. ";../?.lua;lunatest/?.lua;mockobjects/?.lua;../rapanui-sdk/?.lua" | ||
require('lunatest') | ||
require('lunahamcrest') | ||
require('MockRNLayer') | ||
require('MockRNScreen') | ||
require('MockRNGroup') | ||
require('MockMOAISim') | ||
require('MockRNInputManager') | ||
require('MockConstants') | ||
require('MockRNObject') | ||
require('MockLayer') | ||
|
||
lunatest.suite("RNFactory-hooks") | ||
|
||
|
||
RNLayer = createMockRNLayer(MockConstants.MAIN_LAYER) | ||
RNGroup = createMockRNGroup() | ||
RNScreen = createMockRNScreen() | ||
MOAISim = createMockMOAISim() | ||
RNInputManager = createMockRNInputManager() | ||
RNObject = createRNObject() | ||
|
||
MOAIEnvironment = { | ||
screenWidth = MockConstants.SCREENWIDTH, | ||
screenHeight = MockConstants.SCREENHEIGHT | ||
} | ||
|
||
config = { | ||
stretch = {} | ||
} | ||
function init() | ||
RNObject:reset() | ||
end | ||
|
||
--RNFactory default creation | ||
function testRNScreenIsCreatedWhenRNFactoryIsCreated() | ||
assert_that(RNScreen.newCalled,is(greater_than(0))) | ||
end | ||
|
||
function testThatRNGroupIsCreateWhenRNFactoryIsCreated() | ||
assert_that(RNGroup.newCalled,is(greater_than(0))) | ||
end | ||
|
||
function testThatCreateRNFactoryOpensNewMOAISimWindow() | ||
assert_that(MOAISim.openWindowCalled,is(greater_than(0))) | ||
end | ||
|
||
function testThatRNScreenInitWithIsCalled() | ||
assert_that(RNScreen.initWithCalled,is(greater_than(0))) | ||
local params = RNScreen.initWithParams | ||
end | ||
|
||
function testThatSetGlobalRNScreenIsCalled() | ||
assert_that(MockRNInputManager.setGlobalRNScreenCalled,is(greater_than(0))) | ||
end | ||
|
||
--RNFactory:createImage() | ||
|
||
function testThatCreateImageCreatesNewObject() | ||
init() | ||
RNFactory.createImage("img") | ||
assert_that(RNObject.newCalled,is(greater_than(0))) | ||
end | ||
|
||
function testThatCreateImageInitsTheCreatedObject() | ||
init() | ||
RNFactory.createImage("img") | ||
assert_that(RNObject.initWithImage2Called,is(greater_than(0))) | ||
end | ||
|
||
function testThatCreateImageAddsObjectToTheScreen() | ||
init() | ||
RNFactory.createImage("img") | ||
assert_that(RNScreen.addRNObjectCalled,is(greater_than(0))) | ||
end | ||
|
||
function testThatCreateImageAddsObjectToTheMainGroup() | ||
init() | ||
RNFactory.createImage("img") | ||
assert_that(RNGroup.insertCalled,is(greater_than(0))) | ||
end | ||
|
||
function testThatCreateImageReturnsProperDeckAndRNObject() | ||
init() | ||
local rnobject,deck = RNFactory.createImage("img") | ||
assert_not_nil(rnobject) | ||
assert_not_nil(deck) | ||
assert_true(rnobject == RNObject) | ||
end | ||
|
||
function testThatCreateImageFromReturnsProperDeckAndRNObject() | ||
init() | ||
local rnobject,deck = RNFactory.createImageFrom("img") | ||
assert_not_nil(rnobject) | ||
assert_not_nil(deck) | ||
assert_true(rnobject == RNObject) | ||
end | ||
|
||
lunatest.run() |
Oops, something went wrong.