Files
ogre-prototype/lua-scripts/data.lua

273 lines
7.1 KiB
Lua

function foo()
tree()
.node("p1", Quaternion(), Vector3(0, 0, -200))
.entity("b1", "residental-house1.glb")
.endnode()
.node("p2", Quaternion(), Vector3(0, 0, -150))
.entity("residental-house1.glb")
.endnode()
.node("p3", Quaternion(), Vector3(0, 0, -100))
.entity("residental-house1.glb")
.endnode()
.node("p4", Quaternion(), Vector3(0, 0, -50))
.entity("residental-house1.glb")
.endnode()
.node("p5", Quaternion(), Vector3(0, 0, 50))
.entity("residental-house1.glb")
.endnode()
.node("p6", Quaternion(), Vector3(0, 0, 100))
.entity("residental-house1.glb")
.endnode()
.node("p7", Quaternion(), Vector3(0, 0, 150))
.entity("residental-house2.glb")
.endnode()
.node("p8", Quaternion(), Vector3(0, 0, 200))
.entity("residental-house3.glb")
.endnode()
for x = -1000, 1000, 50 do
for z = -1000, 1000, 50 do
if not ((x >-100 and x < 100) and (z > -100 and z < 100)) then
tree()
.node("p00" .. tostring(x * 1000 + z), Quaternion(), Vector3(x, 0, z))
.entity("residental-house2.glb")
.endnode()
end
end
end
v = Vector3(0, 1, 2)
end
--[[
narration = {
position = 1,
narration_start = {
"The party was hot, girls were sexy the wine, beer and whisky were in \
enormous numbers. It was anniversary since you set sail with your friends. \
The sea was calm and everything promised you another great night.",
"The whole year with your friends on your ship over vast seas of the world in decay was almost over.\
It was so good year full of adventure, romance, indecency and luxury.",
"Your trusted friends decided that you have too much, they have too much of you and you owe them a lot.",
"They found you drunk in your room and moved to the deck and used ropes to \
restrain you and attach a bucket of stones or something else heavy to your body.",
"After a few hours passed two strong people pulled you to the side and \
dropped you into the sea. Last thing you heard before you hit the water was happy laugher..."
},
progress = function(this)
if #this.narration_start < this.position then
return ""
end
local ret = this.narration_start[this.position]
this.position = this.position + 1
return ret
end,
}
]]--
local narrator = require('narrator.narrator')
function dump(o)
if type(o) == 'table' then
local s = '{ '
for k,v in pairs(o) do
if type(k) ~= 'number' then k = '"'..k..'"' end
s = s .. '['..k..'] = ' .. dump(v) .. ','
end
return s .. '} '
else
return tostring(o)
end
end
--[[
function _narration()
local ret = ""
local choices = {}
if story:can_continue() then
print("can continue")
local paragraph = story:continue(1)
print(dump(paragraph))
local text = paragraph.text
if paragraph.tags then
text = text .. ' #' .. table.concat(paragraph.tags, ' #')
for i, tag in ipairs(paragraph.tags) do
if tag == "mc_is_free" then
ecs_character_set("player", "gravity", true)
ecs_character_set("player", "buoyancy", true)
end
end
end
ret = text
if story:can_choose() then
local ch = story:get_choices()
for i, choice in ipairs(ch) do
table.insert(choices, choice.text)
print(i, dump(choice))
end
if #choices == 1 and choices[1] == "Ascend" then
story:choose(1)
choices = {}
end
if #choices == 1 and choices[1] == "Continue" then
story:choose(1)
choices = {}
end
end
else
print("can NOT continue")
end
print(ret)
if (#choices > 0) then
print("choices!!!")
narrate(ret, choices)
else
narrate(ret)
end
end
]]--
function Quest(name, book)
local quest = {
name = name,
active = false,
activate = function(this)
this.active = true
this.story:begin()
this:_narration()
end,
event = function(this, event)
if not this.active then
return
end
if event == "narration_progress" then
this:_narration()
elseif event == "narration_answered" then
local answer = narration_get_answer()
this.story:choose(answer)
print("answered:", answer)
this:_narration()
end
end,
_handle_tag = function(this, tag)
if tag == "mc_is_free" then
ecs_character_set("player", "gravity", true)
ecs_character_set("player", "buoyancy", true)
end
end,
_narration = function(this)
local ret = ""
local choices = {}
local have_choice = false
local have_paragraph = false
if not this.active then
return
end
if this.story:can_continue() then
print("can continue")
have_paragraph = true
local paragraph = this.story:continue(1)
print(dump(paragraph))
local text = paragraph.text
if paragraph.tags then
text = text .. ' #' .. table.concat(paragraph.tags, ' #')
for i, tag in ipairs(paragraph.tags) do
this:_handle_tag(tag)
end
end
ret = text
if this.story:can_choose() then
have_choice = true
local ch = this.story:get_choices()
for i, choice in ipairs(ch) do
table.insert(choices, choice.text)
print(i, dump(choice))
end
if #choices == 1 and choices[1] == "Ascend" then
this.story:choose(1)
choices = {}
end
if #choices == 1 and choices[1] == "Continue" then
this.story:choose(1)
choices = {}
end
end
else
print("can NOT continue")
end
if not have_choice and not have_paragraph then
this:complete()
this.active = false
end
print(ret)
if (#choices > 0) then
print("choices!!!")
narrate(ret, choices)
else
narrate(ret)
end
end,
complete = function(this)
print(this.name .. 'complete')
end,
story = narrator.init_story(book)
}
-- Begin the story
return quest
end
function StartGameQuest()
-- Parse a book from the Ink file.
local book = narrator.parse_file('stories.initiation')
local quest = Quest('start game', book)
quest.base = {}
quest.base.activate = quest.activate
quest.base.complete = quest.complete
quest.boat = false
quest.activate = function(this)
print('activate...')
local mc_is_free = function()
ecs_character_params_set("player", "gravity", true)
ecs_character_params_set("player", "buoyancy", true)
end
this.story:bind('mc_is_free', mc_is_free)
this.base.activate(this)
end
quest.complete = function(this)
this.base.complete(this)
this.active = false
if not this.boat then
local boat = ecs_vehicle_set("boat", 0, 0, -20, 1.75)
local trigger = ecs_child_character_trigger(boat, "entered_boat", 0, 0, 0, 3, 3)
local npc = ecs_npc_set("normal-female.glb", 0, 2, -20, 1.75)
this.boat = true
end
end
return quest
end
quests = {}
setup_handler(function(event)
print(event)
for k, v in pairs(quests) do
if v.active then
v:event(event)
end
end
if event == "startup" then
main_menu()
elseif event == "narration_progress" then
_narration()
elseif event == "narration_answered" then
local answer = narration_get_answer()
story:choose(answer)
print("answered:", answer)
_narration()
elseif event == "new_game" then
ecs_character_params_set("player", "gravity", true)
ecs_character_params_set("player", "buoyancy", false)
local quest = StartGameQuest()
quests[quest.name] = quest
for k, v in pairs(quests) do
print(k, v.active)
end
quest:activate()
end
end)