level editor improvements
This commit is contained in:
parent
886679816b
commit
a8b469876d
41 changed files with 8367 additions and 8312 deletions
53
room.lua
53
room.lua
|
|
@ -533,43 +533,40 @@ function Room:nextRoomCheck()
|
|||
end
|
||||
|
||||
|
||||
-- Instantiate one object from the flat {class,color,x,y} schema. `class` is a
|
||||
-- key: the built-in behaviour classes (door/switch/player) plus the two generic
|
||||
-- grid pieces (wall/static_wall), and finally any art asset resolved by name via
|
||||
-- the globalAssetProperties registry (this is what the level editor places).
|
||||
-- Instantiate one object from the flat {class,color,x,y} schema. `class` names an
|
||||
-- art asset, and its .meta declares the behaviour ("door"/"switch"/"player"/
|
||||
-- "moveable"); anything without a .meta defaults to immoveable. npc is the one
|
||||
-- keyword handled directly since it has no art.
|
||||
function Room:createEntity(class, color, x, y)
|
||||
if class == "npc" then
|
||||
self:registerNpc(x, y)
|
||||
return
|
||||
end
|
||||
|
||||
local props = globalAssetProperties and globalAssetProperties[class]
|
||||
local behavior = props and props.class or "immoveable"
|
||||
local entity
|
||||
if class == "door" then
|
||||
|
||||
if behavior == "door" then
|
||||
entity = Door:new(x, y)
|
||||
self:registerDoor(entity)
|
||||
elseif class == "switch" then
|
||||
elseif behavior == "switch" then
|
||||
entity = Switch:new(x, y, color)
|
||||
self:registerSwitch(entity, color)
|
||||
elseif class == "player" then
|
||||
elseif behavior == "player" then
|
||||
entity = Player:new(x, y, color)
|
||||
self:registerPlayer(entity, color)
|
||||
self:setActiveColor(color, true)
|
||||
elseif class == "wall" then
|
||||
entity = GenericUnmoveable:new(x, y, color, sprites.box[color])
|
||||
self:registerCollidable(entity, {color})
|
||||
elseif class == "static_wall" then
|
||||
entity = GenericUnmoveable:new(x, y, color, sprites.wall)
|
||||
self:registerCollidable(entity, {color})
|
||||
elseif class == "npc" then
|
||||
self:registerNpc(x, y)
|
||||
else
|
||||
-- generic art asset placed via the editor, resolved by name
|
||||
local props = globalAssetProperties and globalAssetProperties[class]
|
||||
if props and props.sprites and props.sprites[color] then
|
||||
local sprite = loadPlaceImage(props.sprites[color])
|
||||
if props.class == "moveable" then
|
||||
entity = GenericMoveable:new(x, y, color, sprite, class)
|
||||
else
|
||||
entity = GenericUnmoveable:new(x, y, color, sprite)
|
||||
end
|
||||
self:registerCollidable(entity, {color})
|
||||
elseif props and props.sprites and props.sprites[color] then
|
||||
local sprite = loadPlaceImage(props.sprites[color])
|
||||
if behavior == "moveable" then
|
||||
entity = GenericMoveable:new(x, y, color, sprite, class)
|
||||
else
|
||||
entity = GenericUnmoveable:new(x, y, color, sprite)
|
||||
end
|
||||
self:registerCollidable(entity, {color})
|
||||
end
|
||||
|
||||
if entity then entity.saveClass = class end
|
||||
return entity
|
||||
end
|
||||
|
|
@ -667,7 +664,7 @@ function Room:attemptPlace(name, props, mouseX, mouseY, color)
|
|||
end
|
||||
|
||||
function Room:load(name)
|
||||
local room = love.filesystem.read("rooms/" .. name .. ".sav")
|
||||
local room = readFromSource("rooms/" .. name .. ".sav")
|
||||
if not room then
|
||||
-- no save yet: start with a blank room to build in the editor
|
||||
print("no save for '" .. name .. "', starting blank")
|
||||
|
|
@ -686,7 +683,7 @@ function Room:save()
|
|||
local name = self.name or "test"
|
||||
local room = TSerial.pack(self:serialize(), nil, true)
|
||||
|
||||
local success = love.filesystem.write("rooms/" .. name .. ".sav", room)
|
||||
local success = writeToSource("rooms/" .. name .. ".sav", room)
|
||||
if not success then error "great job u fool" end
|
||||
end
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue