260 lines
7.6 KiB
Plaintext
260 lines
7.6 KiB
Plaintext
|
-- Bundled by luabundle {"version":"1.6.0"}
|
||
|
local __bundle_require, __bundle_loaded, __bundle_register, __bundle_modules = (function(superRequire)
|
||
|
local loadingPlaceholder = {[{}] = true}
|
||
|
|
||
|
local register
|
||
|
local modules = {}
|
||
|
|
||
|
local require
|
||
|
local loaded = {}
|
||
|
|
||
|
register = function(name, body)
|
||
|
if not modules[name] then
|
||
|
modules[name] = body
|
||
|
end
|
||
|
end
|
||
|
|
||
|
require = function(name)
|
||
|
local loadedModule = loaded[name]
|
||
|
|
||
|
if loadedModule then
|
||
|
if loadedModule == loadingPlaceholder then
|
||
|
return nil
|
||
|
end
|
||
|
else
|
||
|
if not modules[name] then
|
||
|
if not superRequire then
|
||
|
local identifier = type(name) == 'string' and '\"' .. name .. '\"' or tostring(name)
|
||
|
error('Tried to require ' .. identifier .. ', but no such module has been registered')
|
||
|
else
|
||
|
return superRequire(name)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
loaded[name] = loadingPlaceholder
|
||
|
loadedModule = modules[name](require, loaded, register, modules)
|
||
|
loaded[name] = loadedModule
|
||
|
end
|
||
|
|
||
|
return loadedModule
|
||
|
end
|
||
|
|
||
|
return require, loaded, register, modules
|
||
|
end)(nil)
|
||
|
__bundle_register("__root", function(require, _LOADED, __bundle_register, __bundle_modules)
|
||
|
require("ClassCardContainer")
|
||
|
|
||
|
end)
|
||
|
__bundle_register("ClassCardContainer", function(require, _LOADED, __bundle_register, __bundle_modules)
|
||
|
-- Class card bag implementation. Mimics the behavior of the previous SCED
|
||
|
-- card memory bags, but spawns cards from the All Cards Bag instead.
|
||
|
--
|
||
|
-- The All Cards Bag handles indexing of the player cards by class and level, as
|
||
|
-- well as sorting those lists. See that object for more information.
|
||
|
|
||
|
local allCardsBagGuid = "15bb07"
|
||
|
|
||
|
local skillCount = 0
|
||
|
local eventCount = 0
|
||
|
local assetCount = 0
|
||
|
|
||
|
-- Coordinates to begin laying out cards to match the reserved areas of the
|
||
|
-- table. Cards will lay out horizontally, then create additional rows
|
||
|
local startPositions = {
|
||
|
upgrades = {
|
||
|
skill = Vector(58.09966, 1.31, -47.42),
|
||
|
event = Vector(52.94421, 1.31, -47.42),
|
||
|
asset = Vector(40.29005, 1.31, -47.42),
|
||
|
},
|
||
|
level0 = {
|
||
|
skill = Vector(58.38383, 1.31, 92.39036),
|
||
|
event = Vector(53.22857, 1.31, 92.44123),
|
||
|
asset = Vector(40.9602, 1.31, 92.44869),
|
||
|
},
|
||
|
}
|
||
|
|
||
|
-- Amount to shift for the next card (zShift) or next row of cards (xShift)
|
||
|
-- Note that the table rotation is weird, and the X axis is vertical while the
|
||
|
-- Z axis is horizontal
|
||
|
local zShift = -2.29998
|
||
|
local xShift = -3.66572
|
||
|
local yRotation = 270
|
||
|
local cardsPerRow = 20
|
||
|
|
||
|
-- Tracks cards which are placed by this "bag" so they can be recalled
|
||
|
local placedCardGuids = { }
|
||
|
|
||
|
-- In order to mimic the behavior of the previous memory buttons we use a
|
||
|
-- a temporary bag when recalling objects. This bag is tiny and transparent,
|
||
|
-- and will be placed at the same location as this object. Once all placed
|
||
|
-- cards are recalled bag to this bag, it will be destroyed
|
||
|
local recallBag = {
|
||
|
Name = "Bag",
|
||
|
Transform = {
|
||
|
scaleX = 0.01,
|
||
|
scaleY = 0.01,
|
||
|
scaleZ = 0.01,
|
||
|
},
|
||
|
ColorDiffuse = {
|
||
|
r = 0,
|
||
|
g = 0,
|
||
|
b = 0,
|
||
|
a = 0,
|
||
|
},
|
||
|
Locked = true,
|
||
|
Grid = true,
|
||
|
Snap = false,
|
||
|
Tooltip = false,
|
||
|
}
|
||
|
|
||
|
function onLoad(savedData)
|
||
|
createPlaceRecallButtons()
|
||
|
placedCardGuids = { }
|
||
|
if (savedData ~= nil) then
|
||
|
local saveState = JSON.decode(savedData)
|
||
|
if (saveState.placedCards ~= nil) then
|
||
|
placedCardGuids = saveState.placedCards
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function onSave()
|
||
|
local saveState = {
|
||
|
placedCards = placedCardGuids,
|
||
|
}
|
||
|
|
||
|
return JSON.encode(saveState)
|
||
|
end
|
||
|
|
||
|
--Creates recall and place buttons
|
||
|
function createPlaceRecallButtons()
|
||
|
self.createButton({
|
||
|
label="Place", click_function="buttonClick_place", function_owner=self,
|
||
|
position={1,0.1,2.1}, rotation={0,0,0}, height=350, width=800,
|
||
|
font_size=250, color={0,0,0}, font_color={1,1,1}
|
||
|
})
|
||
|
self.createButton({
|
||
|
label="Recall", click_function="buttonClick_recall", function_owner=self,
|
||
|
position={-1,0.1,2.1}, rotation={0,0,0}, height=350, width=800,
|
||
|
font_size=250, color={0,0,0}, font_color={1,1,1}
|
||
|
})
|
||
|
end
|
||
|
|
||
|
-- Spawns the set of cards identified by this objects Name (which should hold
|
||
|
-- the class) and description (whether to spawn basic cards or upgraded)
|
||
|
function buttonClick_place()
|
||
|
-- Cards already on the table, don't spawn more
|
||
|
if (#placedCardGuids > 0) then
|
||
|
return
|
||
|
end
|
||
|
local cardClass = self.getName()
|
||
|
local isUpgraded = false
|
||
|
if (self.getDescription() == "Upgrades") then
|
||
|
isUpgraded = true
|
||
|
end
|
||
|
skillCount = 0
|
||
|
eventCount = 0
|
||
|
assetCount = 0
|
||
|
local allCardsBag = getObjectFromGUID(allCardsBagGuid)
|
||
|
local cardList = allCardsBag.call("getCardsByClassAndLevel", {class = cardClass, upgraded = isUpgraded})
|
||
|
placeCards(cardList)
|
||
|
end
|
||
|
|
||
|
-- Spawn all cards from the returned index
|
||
|
function placeCards(cardList)
|
||
|
for _, card in ipairs(cardList) do
|
||
|
placeCard(card.data, card.metadata)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function placeCard(cardData, cardMetadata)
|
||
|
local destinationPos
|
||
|
if (cardMetadata.type == "Skill") then
|
||
|
destinationPos = getSkillPosition(cardMetadata.level > 0)
|
||
|
elseif (cardMetadata.type == "Event") then
|
||
|
destinationPos = getEventPosition(cardMetadata.level > 0)
|
||
|
elseif (cardMetadata.type == "Asset") then
|
||
|
destinationPos = getAssetPosition(cardMetadata.level > 0)
|
||
|
end
|
||
|
local spawnedCard = spawnObjectData({
|
||
|
data = cardData,
|
||
|
position = destinationPos,
|
||
|
rotation = {0, yRotation, 0},
|
||
|
callback_function = recordPlacedCard})
|
||
|
end
|
||
|
|
||
|
-- Returns the table position where the next skill should be placed
|
||
|
-- Param isUpgraded: True if it's an upgraded card (right side of the table),
|
||
|
-- false for a Level 0 card (left side of table)
|
||
|
function getSkillPosition(isUpgraded)
|
||
|
local skillPos
|
||
|
if (isUpgraded) then
|
||
|
skillPos = startPositions.upgrades.skill:copy()
|
||
|
else
|
||
|
skillPos = startPositions.level0.skill:copy()
|
||
|
end
|
||
|
local shift = Vector(div(skillCount, cardsPerRow) * xShift, 0, (skillCount % cardsPerRow) * zShift)
|
||
|
skillPos:add(shift)
|
||
|
skillCount = skillCount + 1
|
||
|
|
||
|
return skillPos
|
||
|
end
|
||
|
|
||
|
-- Returns the table position where the next event should be placed
|
||
|
-- Param isUpgraded: True if it's an upgraded card (right side of the table),
|
||
|
-- false for a Level 0 card (left side of table)
|
||
|
function getEventPosition(isUpgraded)
|
||
|
local eventPos
|
||
|
if (isUpgraded) then
|
||
|
eventPos = startPositions.upgrades.event:copy()
|
||
|
else
|
||
|
eventPos = startPositions.level0.event:copy()
|
||
|
end
|
||
|
local shift = Vector(div(eventCount, cardsPerRow) * xShift, 0, (eventCount % cardsPerRow) * zShift)
|
||
|
eventPos:add(shift)
|
||
|
eventCount = eventCount + 1
|
||
|
|
||
|
return eventPos
|
||
|
end
|
||
|
|
||
|
-- Returns the table position where the next asset should be placed
|
||
|
-- Param isUpgraded: True if it's an upgraded card (right side of the table),
|
||
|
-- false for a Level 0 card (left side of table)
|
||
|
function getAssetPosition(isUpgraded)
|
||
|
local assetPos
|
||
|
if (isUpgraded) then
|
||
|
assetPos = startPositions.upgrades.asset:copy()
|
||
|
else
|
||
|
assetPos = startPositions.level0.asset:copy()
|
||
|
end
|
||
|
local shift = Vector(div(assetCount, cardsPerRow) * xShift, 0, (assetCount % cardsPerRow) * zShift)
|
||
|
assetPos:add(shift)
|
||
|
assetCount = assetCount + 1
|
||
|
|
||
|
return assetPos
|
||
|
end
|
||
|
|
||
|
-- Callback function which adds a spawned card to the tracking list
|
||
|
function recordPlacedCard(spawnedCard)
|
||
|
table.insert(placedCardGuids, spawnedCard.getGUID())
|
||
|
end
|
||
|
|
||
|
-- Recalls all spawned cards to the bag, and clears the placedCardGuids list
|
||
|
function buttonClick_recall()
|
||
|
local trash = spawnObjectData({data = recallBag, position = self.getPosition()})
|
||
|
for _, cardGuid in ipairs(placedCardGuids) do
|
||
|
local card = getObjectFromGUID(cardGuid)
|
||
|
if (card ~= nil) then
|
||
|
trash.putObject(card)
|
||
|
end
|
||
|
end
|
||
|
trash.destruct()
|
||
|
placedCardGuids = { }
|
||
|
end
|
||
|
|
||
|
function div(a,b)
|
||
|
return (a - a % b) / b
|
||
|
end
|
||
|
|
||
|
end)
|
||
|
return __bundle_require("__root")
|