diff --git a/rsc/scripts/door_utility.lua b/rsc/scripts/door_utility.lua new file mode 100644 index 0000000..d1fc648 --- /dev/null +++ b/rsc/scripts/door_utility.lua @@ -0,0 +1,63 @@ +local doorUtility = {} + +roomAPI = require("room") +regionPagerAPI = require("region_pager") + +triggerAPI = require("trigger") +triggerManagerAPI = require("trigger_manager") + +entityAPI = require("entity") +characterAPI = require("character") + +networkAPI = require("network") + +function doorUtility.createTrigger(handle, room, x, y, script) + local pager = roomAPI.GetPager(room) + + --place the indicator tile + regionPagerAPI.SetTile(pager, x / 32, y / 32, 0, mapMaker.dirt) + regionPagerAPI.SetTile(pager, x / 32, y / 32, 1, mapMaker.blank) + regionPagerAPI.SetTile(pager, x / 32, y / 32, 2, mapMaker.blank) + + --create the trigger object + triggerManagerAPI.Create( + roomAPI.GetTriggerMgr(room), handle, x, y, + 0, 0, 32, 32, --size of the tiles + script + ) +end + +function doorUtility.createDoorPair(handle, roomOne, Xone, Yone, roomTwo, Xtwo, Ytwo) + --create the scripts + local function scriptOne(entity) + if entityAPI.GetType(entity) ~= "character" then return end + + --move the character + characterAPI.SetRoom(entity, roomTwo) + characterAPI.SetOrigin(entity, Xtwo, Ytwo-16) + networkAPI.PumpCharacterUpdate(entity) + + --disable the other trigger + local triggerTwo = triggerManagerAPI.GetTrigger(roomAPI.GetTriggerMgr(roomTwo), handle) + triggerAPI.PushExclusionEntity(triggerTwo, entity) + end + + local function scriptTwo(entity) + if entityAPI.GetType(entity) ~= "character" then return end + + --move the character + characterAPI.SetRoom(entity, roomOne) + characterAPI.SetOrigin(entity, Xone, Yone-16) --NOTE: the 16 pixel margin for presentation + networkAPI.PumpCharacterUpdate(entity) + + --disable the other trigger + local triggerOne = triggerManagerAPI.GetTrigger(roomAPI.GetTriggerMgr(roomOne), handle) + triggerAPI.PushExclusionEntity(triggerOne, entity) + end + + --create the triggers proper + doorUtility.createTrigger(handle, roomOne, Xone, Yone, scriptOne) + doorUtility.createTrigger(handle, roomTwo, Xtwo, Ytwo, scriptTwo) +end + +return doorUtility \ No newline at end of file diff --git a/rsc/scripts/setup_server.lua b/rsc/scripts/setup_server.lua index 183c86f..02f5059 100644 --- a/rsc/scripts/setup_server.lua +++ b/rsc/scripts/setup_server.lua @@ -7,13 +7,7 @@ roomAPI = require("room") mapMaker = require("map_maker") mapSaver = require("map_saver") -characterAPI = require("character") -entityAPI = require("entity") -networkAPI = require("network") - -regionPagerAPI = require("region_pager") -triggerAPI = require("trigger") -triggerManagerAPI = require("trigger_manager") +doorUtility = require("door_utility") --test the room hooks roomManagerAPI.SetOnCreate(function(room, index) @@ -36,85 +30,7 @@ roomAPI.Initialize(overworld, mapSaver.Load, mapSaver.Save, mapMaker.DebugIsland local underworld, uidTwo = roomManagerAPI.CreateRoom("underworld", "overworld.bmp") roomAPI.Initialize(underworld, mapSaver.Load, mapSaver.Save, mapMaker.DebugGrassland, mapSaver.Save) ---NOTE: test the trigger system - -function createTrigger(handle, room, x, y, script) - local pager = roomAPI.GetPager(room) - - --place the indicator tile - regionPagerAPI.SetTile(pager, x / 32, y / 32, 0, mapMaker.dirt) - regionPagerAPI.SetTile(pager, x / 32, y / 32, 1, mapMaker.blank) - regionPagerAPI.SetTile(pager, x / 32, y / 32, 2, mapMaker.blank) - - --create the trigger object - triggerManagerAPI.Create( - roomAPI.GetTriggerMgr(room), handle, x, y, - 0, 0, 32, 32, --size of the tiles - script - ) -end - -function createDoorPair(handle, roomOne, Xone, Yone, roomTwo, Xtwo, Ytwo) - --create the scripts - local function scriptOne(entity) - if entityAPI.GetType(entity) ~= "character" then return end - - --move the character - characterAPI.SetRoom(entity, roomTwo) - characterAPI.SetOrigin(entity, Xtwo, Ytwo-16) - networkAPI.PumpCharacterUpdate(entity) - - --disable the other trigger - local triggerTwo = triggerManagerAPI.GetTrigger(roomAPI.GetTriggerMgr(roomTwo), handle) - triggerAPI.PushExclusionEntity(triggerTwo, entity) - end - - local function scriptTwo(entity) - if entityAPI.GetType(entity) ~= "character" then return end - - --move the character - characterAPI.SetRoom(entity, roomOne) - characterAPI.SetOrigin(entity, Xone, Yone-16) --NOTE: the 16 pixel margin for presentation - networkAPI.PumpCharacterUpdate(entity) - - --disable the other trigger - local triggerOne = triggerManagerAPI.GetTrigger(roomAPI.GetTriggerMgr(roomOne), handle) - triggerAPI.PushExclusionEntity(triggerOne, entity) - end - - --create the triggers proper - createTrigger(handle, roomOne, Xone, Yone, scriptOne) - createTrigger(handle, roomTwo, Xtwo, Ytwo, scriptTwo) -end - --call the monstrosity -createDoorPair("pair 1", overworld, 0, -64, underworld, 0, 0) -createDoorPair("pair 2", overworld, 64, -64, underworld, 64, 0) -createDoorPair("pair 3", overworld, 128, -64, underworld, 128, 0) - ---[[ ---simple door pair -createTrigger("door 1", overworld, 128, -128, function(entity) - if entityAPI.GetType(entity) ~= "character" then - return - end - - --move the character - characterAPI.SetRoom(entity, uidTwo) - characterAPI.SetOrigin(entity, 0, 0) - networkAPI.PumpCharacterUpdate(entity) -end) - -createTrigger("door 1", underworld, 128, -128, function(entity) - if entityAPI.GetType(entity) ~= "character" then - return - end - - --move the character - characterAPI.SetRoom(entity, uidOne) - characterAPI.SetOrigin(entity, 0, 0) - networkAPI.PumpCharacterUpdate(entity) -end) ---]] +doorUtility.createDoorPair("pair 1", overworld, 0, -64, underworld, 0, 0) print("Finished the lua script")