mirror of
https://github.com/mwpenny/portal64-still-alive.git
synced 2024-10-19 22:27:36 -04:00
Fix trigger generation from lua
This commit is contained in:
parent
107b5efd97
commit
13810c40d6
|
@ -342,7 +342,7 @@ end
|
|||
|
||||
function Quaternion.__mul(a, b)
|
||||
if (isVector3(b)) then
|
||||
local result = a * quaternion(b.x, b.y, b.z, 0) * quaternionConjugate(a)
|
||||
local result = a * quaternion(b.x, b.y, b.z, 0) * a:conjugate()
|
||||
return vector3(result.x, result.y, result.z)
|
||||
elseif (isQuaternion(b)) then
|
||||
return quaternion(
|
||||
|
|
|
@ -11,9 +11,11 @@ local box_droppers = {}
|
|||
for _, dropper in pairs(sk_scene.nodes_for_type('@box_dropper')) do
|
||||
local position = dropper.node.full_transformation:decompose()
|
||||
|
||||
local room_index = room_export.node_nearest_room_index(dropper.node)
|
||||
|
||||
table.insert(box_droppers, {
|
||||
position,
|
||||
room_export.node_nearest_room_index(dropper.node),
|
||||
room_index,
|
||||
signals.signal_index_for_name(dropper.arguments[1] or ''),
|
||||
})
|
||||
end
|
||||
|
@ -25,11 +27,13 @@ local buttons = {}
|
|||
for _, button in pairs(sk_scene.nodes_for_type('@button')) do
|
||||
local position = button.node.full_transformation:decompose()
|
||||
|
||||
local room_index = room_export.node_nearest_room_index(button.node)
|
||||
|
||||
table.insert(buttons, {
|
||||
position,
|
||||
room_export.node_nearest_room_index(dropper.node),
|
||||
signals.signal_index_for_name(dropper.arguments[1] or ''),
|
||||
signals.signal_index_for_name(dropper.arguments[2] or ''),
|
||||
room_index,
|
||||
signals.signal_index_for_name(button.arguments[1] or ''),
|
||||
signals.signal_index_for_name(button.arguments[2] or ''),
|
||||
})
|
||||
end
|
||||
|
||||
|
@ -40,10 +44,12 @@ local decor = {}
|
|||
for _, decor_entry in pairs(sk_scene.nodes_for_type('@decor')) do
|
||||
local position, rotation = decor_entry.node.full_transformation:decompose()
|
||||
|
||||
local room_index = room_export.node_nearest_room_index(decor_entry.node)
|
||||
|
||||
table.insert(decor, {
|
||||
position,
|
||||
rotation,
|
||||
room_export.node_nearest_room_index(decor_entry.node),
|
||||
room_index,
|
||||
'DECOR_TYPE_' .. decor_entry.arguments[1],
|
||||
})
|
||||
end
|
||||
|
@ -86,10 +92,12 @@ for _, elevator in pairs(elevator_nodes) do
|
|||
end
|
||||
end
|
||||
|
||||
local room_index = room_export.node_nearest_room_index(elevator.node)
|
||||
|
||||
table.insert(elevators, {
|
||||
position,
|
||||
rotation,
|
||||
room_export.node_nearest_room_index(elevator.node),
|
||||
room_index,
|
||||
target_elevator,
|
||||
})
|
||||
end
|
||||
|
@ -101,12 +109,14 @@ local fizzlers = {}
|
|||
for _, fizzler in pairs(sk_scene.nodes_for_type('@fizzler')) do
|
||||
local position, rotation = fizzler.node.full_transformation:decompose()
|
||||
|
||||
local room_index = room_export.node_nearest_room_index(fizzler.node)
|
||||
|
||||
table.insert(fizzlers, {
|
||||
position,
|
||||
rotation,
|
||||
2,
|
||||
2,
|
||||
room_export.node_nearest_room_index(fizzler.node),
|
||||
room_index,
|
||||
})
|
||||
end
|
||||
|
||||
|
@ -117,9 +127,11 @@ local pedestals = {}
|
|||
for _, pedestal in pairs(sk_scene.nodes_for_type('@pedestal')) do
|
||||
local position = pedestal.node.full_transformation:decompose()
|
||||
|
||||
local room_index = room_export.node_nearest_room_index(pedestal.node)
|
||||
|
||||
table.insert(pedestals, {
|
||||
position,
|
||||
room_export.node_nearest_room_index(fizzlers.node),
|
||||
room_index,
|
||||
})
|
||||
end
|
||||
|
||||
|
@ -130,10 +142,12 @@ local signage = {}
|
|||
for _, signage_element in pairs(sk_scene.nodes_for_type('@signage')) do
|
||||
local position, rotation = signage_element.node.full_transformation:decompose()
|
||||
|
||||
local room_index = room_export.node_nearest_room_index(signage_element.node)
|
||||
|
||||
table.insert(signage, {
|
||||
position,
|
||||
rotation,
|
||||
room_export.node_nearest_room_index(signage_element.node),
|
||||
room_index,
|
||||
sk_definition_writer.raw(signage_element.arguments[1]),
|
||||
})
|
||||
end
|
||||
|
|
|
@ -11,13 +11,13 @@ local function does_belong_to_cutscene(first_step, step)
|
|||
local offset = step.position - first_step.position
|
||||
local local_pos = first_step.rotation * offset
|
||||
|
||||
return local_pos.y >= 0 and local_pos.x * local_pos.x + local_pos.z * local_pos.z < 0.1
|
||||
return local_pos.z >= 0 and local_pos.x * local_pos.x + local_pos.y * local_pos.y < 0.1
|
||||
end
|
||||
|
||||
local function distance_from_start(first_step, step)
|
||||
local offset = step.position - first_step.position
|
||||
local local_pos = first_step.rotation * offset
|
||||
return local_pos.y
|
||||
return local_pos.z
|
||||
end
|
||||
|
||||
local function cutscene_index(cutscenes, name)
|
||||
|
@ -103,16 +103,16 @@ local function generate_cutscene_step(step, step_index, label_locations, cutscen
|
|||
sk_definition_writer.raw('CutsceneStepTypePlaySound') or
|
||||
sk_definition_writer.raw('CutsceneStepTypeStartSound')
|
||||
result.playSound = {
|
||||
string_starts_with(step.args[1], "SOUNDS_") and step.args[1] or ("SOUNDS_" .. step.args[1]),
|
||||
sk_definition_writer.raw(string_starts_with(step.args[1], "SOUNDS_") and step.args[1] or ("SOUNDS_" .. step.args[1])),
|
||||
tonumber(step.args[2] or "1") * 255,
|
||||
math.floor(tonumber(step.args[3] or "1") * 64 + 0.5),
|
||||
}
|
||||
elseif step.command == "q_sound" and #step.args >= 2 then
|
||||
result.type = sk_definition_writer.raw('CutsceneStepTypeQueueSound')
|
||||
result.queueSound = {
|
||||
string_starts_with(step.args[1], "SOUNDS_") and step.args[1] or ("SOUNDS_" .. step.args[1]),
|
||||
sk_definition_writer.raw(string_starts_with(step.args[1], "SOUNDS_") and step.args[1] or ("SOUNDS_" .. step.args[1])),
|
||||
sk_definition_writer.raw(step.args[2]),
|
||||
tonumber(step.args[2] or "1") * 255,
|
||||
tonumber(step.args[3] or "1") * 255,
|
||||
}
|
||||
elseif step.command == "wait_for_channel" and #step.args >= 1 then
|
||||
result.type = sk_definition_writer.raw('CutsceneStepTypeWaitForChannel')
|
||||
|
@ -121,9 +121,7 @@ local function generate_cutscene_step(step, step_index, label_locations, cutscen
|
|||
}
|
||||
elseif step.command == "delay" and #step.args >= 1 then
|
||||
result.type = sk_definition_writer.raw('CutsceneStepTypeDelay')
|
||||
result.delay = {
|
||||
tonumber(step.args[1])
|
||||
}
|
||||
result.delay = tonumber(step.args[1])
|
||||
elseif step.command == "open_portal" and #step.args >= 1 then
|
||||
result.type = sk_definition_writer.raw('CutsceneStepTypeOpenPortal')
|
||||
result.openPortal = {
|
||||
|
@ -209,7 +207,7 @@ local function generate_cutscenes()
|
|||
rotation = rotation:conjugate(),
|
||||
}
|
||||
|
||||
if command == "start" and #args > 1 then
|
||||
if command == "start" and #args >= 1 then
|
||||
table.insert(cutscenes, {
|
||||
name = args[1],
|
||||
steps = {step},
|
||||
|
@ -255,8 +253,8 @@ local function generate_cutscenes()
|
|||
})
|
||||
|
||||
table.insert(cutscene_data, {
|
||||
sk_definition_writer.reference_to(cutscene.steps, 1),
|
||||
#cutscene.steps,
|
||||
sk_definition_writer.reference_to(steps, 1),
|
||||
#cutscene.steps - 1,
|
||||
})
|
||||
end
|
||||
|
||||
|
@ -268,7 +266,7 @@ local function generate_triggers(cutscenes)
|
|||
|
||||
for _, trigger in pairs(sk_scene.nodes_for_type('@trigger')) do
|
||||
local first_mesh = trigger.node.meshes[1]
|
||||
local cutscene_index = cutscene_index(cutscenes, trigger.arugments[1])
|
||||
local cutscene_index = cutscene_index(cutscenes, trigger.arguments[1])
|
||||
|
||||
if first_mesh and cutscene_index ~= -1 then
|
||||
local transformed = first_mesh:transform(trigger.node.full_transformation)
|
||||
|
|
Loading…
Reference in a new issue