2019-11-18 06:13:36 +02:00
local Event = require ' utils.event '
local Token = require ' utils.token '
local Task = require ' utils.task '
local Cutscene = require ' features.cutscene.cutscene_controller '
local CS_Rendering = require ' features.cutscene.rendering '
local Color = require ' resources.color_presets '
local PC = require ' features.player_create '
local register_rendering = Cutscene.register_rendering_id
local play_sound = Cutscene.play_sound
local draw_text = CS_Rendering.draw_text
local draw_multi_line = CS_Rendering.draw_multi_line_text
local rad = math.rad
local Rendering = require ' utils.rendering '
local CrashsiteCutscene = { }
2019-11-21 05:20:49 +02:00
local function valid ( entity )
return entity and entity.valid
end
2019-11-18 06:13:36 +02:00
local delayed_draw_text =
Token.register (
function ( params )
local player = params.player
2019-11-21 05:20:49 +02:00
if ( not valid ( player ) ) then
return
end
local tick = params.tick
2019-11-18 06:13:36 +02:00
if params.play_sound > 1 then
play_sound ( tick , player , ' utility/list_box_click ' , 1 )
end
register_rendering ( player.index , tick , draw_text ( params.settings , params.offset , params.text , params.player , params.params , params.draw_background , params.fit_to_edge ) )
end
)
local function draw_text_auto_replacing ( tick , settings , offset , texts , player , params , draw_background , fit_to_edge , time , between_time )
time = time or 400
time = time / # texts
between_time = between_time or 30
params.time_to_live = time - between_time
if params.background then
params.background . time_to_live = time - between_time
end
for i = 1 , # texts do
if texts [ i ] ~= ' ' then
Task.set_timeout_in_ticks ( time * ( i - 1 ) , delayed_draw_text , { tick = tick , settings = settings , offset = offset , text = texts [ i ] , player = player , params = params , draw_background = draw_background , fit_to_edge = fit_to_edge , play_sound = i } )
end
end
end
local delayed_draw_arrow =
Token.register (
function ( params )
local player = params.player
2019-11-21 05:20:49 +02:00
if ( not valid ( player ) ) then
return
end
2019-11-18 06:13:36 +02:00
local tick = params.tick
params = params.params
local rendering_parmas = params.params
local id = CS_Rendering.draw_arrow ( params.settings , params.offset , player , rendering_parmas , params.fit_to_edge )
register_rendering ( player.index , tick , id )
Rendering.blink ( id , 20 , rendering_parmas.time_to_live )
end
)
local function delayed_function ( func , player , tick , params , offset_time )
2019-11-21 05:20:49 +02:00
if ( not valid ( player ) ) then
return
end
2019-11-18 06:13:36 +02:00
Task.set_timeout_in_ticks ( offset_time , func , { player = player , tick = tick , params = params } )
end
local original_resolution = { height = 1440 , width = 2560 }
local original_zoom = 1
local function cutscene_function_redmew ( player_index , waypoint_index , params )
local player = game.players [ player_index ]
2019-11-21 05:20:49 +02:00
if ( not valid ( player ) ) then
return
end
local cases = { }
2019-11-18 06:13:36 +02:00
local ttw = params.time_to_wait
local zoom = params.zoom
local tick = params.tick
local settings = { original_resolution = original_resolution , original_zoom = original_zoom , player_zoom = zoom }
if waypoint_index ~= - 1 then
play_sound ( tick , player , ' utility/list_box_click ' , 1 )
end
cases [ - 1 ] = function ( )
play_sound ( tick , player , ' ambient/pollution ' , 1 , 550 )
register_rendering ( player_index , tick , CS_Rendering.blackout ( player , zoom , ttw + 10 ) )
register_rendering ( player_index , tick , draw_text ( settings , { x = 0 , y = - 16 } , ' Crashsite ' , player , { scale = 10 , time_to_live = ttw , color = Color.red } , false , false ) )
register_rendering (
player_index ,
tick ,
draw_multi_line ( settings , { x = 0 , y = - 5 } , { { ' crashsite.cutscene1_case_line2 ' , ' Crashsite ' } , ' --------------------- ' , { ' crashsite.cutscene1_case_line4 ' , ' Redmew ' } , { ' crashsite.cutscene1_case_line5 ' , ' www.redmew.com/discord ' } } , player , { scale = 5 , time_to_live = ttw } , false )
)
draw_text_auto_replacing ( tick , settings , { x = 0 , y = 10 } , { ' ' , { ' crashsite.cutscene1_case_line6 ' } } , player , { scale = 3 } , false , false , ttw , 0 )
end
cases [ 0 ] = function ( )
register_rendering ( player_index , tick , CS_Rendering.blackout ( player , zoom , ttw + 1 ) )
register_rendering ( player_index , tick , draw_text ( settings , { x = 0 , y = 0 } , ' Redmew - Crashsite ' , player , { scale = 10 , time_to_live = ttw - 60 , color = Color.red } , false , false ) )
register_rendering ( player_index , tick , draw_text ( settings , { x = 0 , y = - 5 } , ' Introduction ' , player , { scale = 5 , time_to_live = ttw - 60 } , false , false ) )
delayed_function ( delayed_draw_arrow , player , tick , { settings = settings , offset = { x = 7 , y = 2.5 } , params = { rotation = rad ( - 45 ) , time_to_live = 275 * 3 - 30 } , fit_to_edge = true } , 0 )
draw_text_auto_replacing ( tick , settings , { x = 8.5 , y = 3 } , { ' This is our toolbar! ' } , player , { scale = 2.5 , alignment = ' left ' } , false , true , 275 )
draw_text_auto_replacing ( tick , settings , { x = 8.5 , y = 3 } , { ' ' , " Here you'll find a wide range of tools and informations about us! " } , player , { scale = 2.5 , alignment = ' left ' } , false , true , 275 * 2 )
draw_text_auto_replacing ( tick , settings , { x = 8.5 , y = 3 } , { ' ' , ' ' , ' Hover your mouse over them for more information ' } , player , { scale = 2.5 , alignment = ' left ' } , false , true , 275 * 3 )
delayed_function ( delayed_draw_arrow , player , tick , { settings = settings , offset = { x = 1 , y = 2.5 } , params = { rotation = rad ( - 45 ) , time_to_live = 275 - 30 } , fit_to_edge = true } , 275 * 3 )
draw_text_auto_replacing ( tick , settings , { x = 2.5 , y = 3 } , { ' ' , ' ' , ' ' , ' You can toggle our toolbar with this button ' } , player , { scale = 2.5 , alignment = ' left ' } , false , true , 275 * 4 )
end
cases [ 1 ] = function ( )
draw_text_auto_replacing ( tick , settings , { x = 0 , y = 18 } , { { ' crashsite.cutscene1_case1_line1 ' } , { ' crashsite.cutscene1_case1_line2 ' } , { ' crashsite.cutscene1_case1_line3 ' } } , player , { scale = 2.5 } , true , false , 400 * 3 )
end
cases [ 2 ] = function ( )
draw_text_auto_replacing ( tick , settings , { x = 0 , y = 18 } , { { ' crashsite.cutscene1_case2_line1 ' } } , player , { scale = 2.5 } , true , false , 300 )
end
cases [ 3 ] = function ( )
2019-11-19 01:47:07 +02:00
draw_text_auto_replacing ( tick , settings , { x = 0 , y = 18 } , { { ' crashsite.cutscene1_case3_line1 ' } } , player , { scale = 3 } , true , false , 400 )
2019-11-18 06:13:36 +02:00
end
local case = cases [ waypoint_index ]
if case then
case ( )
end
end
local waypoints_redmew = {
{
-- case -1
position = { x = 0 , y = 0 } ,
transition_time = 60 ,
time_to_wait = 600 ,
zoom = 0.5
} ,
{
-- case 0
position = { x = 0 , y = 0 } ,
transition_time = 0 ,
time_to_wait = 300 * 4 ,
zoom = 0.5
} ,
{
-- case 1
position = { x = 0 , y = - 5 } ,
transition_time = 120 ,
time_to_wait = 400 * 3 ,
zoom = 1.2
} ,
{
-- case 2
position = { x = - 3 , y = - 5 } ,
transition_time = 90 ,
time_to_wait = 300 ,
zoom = 1.6
} ,
{
-- case 3
position = { x = 0 , y = 0 } ,
2019-11-19 01:47:07 +02:00
transition_time = 90 ,
time_to_wait = 400 ,
zoom = 0.2
2019-11-18 06:13:36 +02:00
}
}
local function cutscene_function_outpost ( player_index , waypoint_index , params )
local player = game.players [ player_index ]
2019-11-21 05:20:49 +02:00
if ( not valid ( player ) ) then
return
end
local cases = { }
2019-11-18 06:13:36 +02:00
local zoom = params.zoom
local tick = params.tick
local settings = { original_resolution = original_resolution , original_zoom = original_zoom , player_zoom = zoom }
if waypoint_index ~= - 1 then
play_sound ( tick , player , ' utility/list_box_click ' , 1 )
end
cases [ - 1 ] = function ( )
play_sound ( tick , player , ' utility/scenario_message ' )
draw_text_auto_replacing ( tick , settings , { x = 0 , y = 18 } , { { ' crashsite.cutscene2_case_line1 ' } , { ' crashsite.cutscene2_case_line2 ' } } , player , { scale = 2.5 , surface = " cutscene " } , true , false , 375 * 2 )
end
cases [ 0 ] = function ( )
2019-11-18 07:08:27 +02:00
draw_text_auto_replacing ( tick , settings , { x = 0 , y = 18 } , { { ' crashsite.cutscene2_case0_line1 ' } , { ' crashsite.cutscene2_case0_line2 ' } } , player , { scale = 2.5 , surface = " cutscene " } , true , false , 375 * 2 )
2019-11-18 06:13:36 +02:00
end
cases [ 1 ] = function ( )
draw_text_auto_replacing ( tick , settings , { x = 0 , y = 18 } , { { ' crashsite.cutscene2_case1_line1 ' } } , player , { scale = 2.5 , surface = " cutscene " } , true , false , 500 )
end
cases [ 2 ] = function ( )
draw_text_auto_replacing ( tick , settings , { x = 0 , y = 18 } , { { ' crashsite.cutscene2_case2_line1 ' } } , player , { scale = 2.5 , surface = " cutscene " } , true , false , 600 )
end
cases [ 3 ] = function ( )
draw_text_auto_replacing ( tick , settings , { x = 0 , y = 18 } , { { ' crashsite.cutscene2_case3_line1 ' } } , player , { scale = 2.5 , surface = " cutscene " } , true , false , 500 )
end
cases [ 4 ] = function ( )
draw_text_auto_replacing ( tick , settings , { x = 0 , y = 18 } , { { ' crashsite.cutscene2_case4_line1 ' } } , player , { scale = 2.5 , surface = " cutscene " } , true , false , 600 )
end
cases [ 5 ] = function ( )
draw_text_auto_replacing ( tick , settings , { x = 0 , y = 18 } , { { ' crashsite.cutscene2_case5_line1 ' } , { ' crashsite.cutscene2_case5_line2 ' } } , player , { scale = 2.5 , surface = " cutscene " } , true , false , 400 * 2 )
end
local case = cases [ waypoint_index ]
if case then
case ( )
end
end
local waypoints_outpost = {
{
-- case -1
position = { x = 0 , y = 0 } ,
transition_time = 90 ,
time_to_wait = 375 * 2 ,
zoom = 0.5
} ,
{
-- case 0
position = { x = 0 , y = - 10 } ,
transition_time = 120 ,
2019-11-18 07:08:27 +02:00
time_to_wait = 375 * 2 ,
2019-11-18 06:13:36 +02:00
zoom = 1.5
} ,
{
-- case 1
position = { x = 0 , y = 0 } ,
transition_time = 120 ,
time_to_wait = 500 ,
zoom = 1
} ,
{
-- case 2
position = { x = 4 , y = 0 } ,
transition_time = 90 ,
time_to_wait = 600 ,
zoom = 2.5
} ,
{
-- case 3
position = { x = - 4 , y = 0 } ,
transition_time = 90 ,
time_to_wait = 500 ,
zoom = 2.5
} ,
{
-- case 4
position = { x = 0 , y = 0 } ,
transition_time = 60 ,
time_to_wait = 600 ,
zoom = 2
} ,
{
-- case 5
position = { x = 0 , y = 25 } ,
transition_time = 60 ,
time_to_wait = 400 * 2 ,
zoom = 1.5
}
}
local start_cutscene_outpost =
Token.register (
function ( player_index )
local player = game.get_player ( player_index )
2019-11-21 05:20:49 +02:00
if ( not valid ( player ) ) then
return
end
2019-11-18 06:13:36 +02:00
player.teleport ( { 0 , 30 } , ' cutscene ' )
Cutscene.register_running_cutscene ( player_index , ' Crashsite_Outpost ' , 60 )
end
)
local function terminate_function_redmew ( player_index )
Task.set_timeout_in_ticks ( 1 , start_cutscene_outpost , player_index )
end
local function terminate_function_outpost ( player_index )
local player = game.get_player ( player_index )
2019-11-21 05:20:49 +02:00
if ( not valid ( player ) ) then
return
end
2019-11-18 06:13:36 +02:00
player.teleport ( { 0 , 0 } , ' redmew ' )
PC.show_start_up ( player )
player.print ( { ' crashsite.replay_cutscene ' , ' /replay ' } , Color.yellow )
end
Cutscene.register_cutscene_function ( ' Crashsite_Welcome ' , waypoints_redmew , Token.register ( cutscene_function_redmew ) , Token.register ( terminate_function_redmew ) )
Cutscene.register_cutscene_function ( ' Crashsite_Outpost ' , waypoints_outpost , Token.register ( cutscene_function_outpost ) , Token.register ( terminate_function_outpost ) )
Cutscene.register_replay ( ' Crashsite_Welcome ' , 120 )
local start_cutscene =
Token.register (
function ( params )
Cutscene.register_running_cutscene ( params.event . player_index , ' Crashsite_Welcome ' , 120 )
end
)
function CrashsiteCutscene . register ( )
global.config . player_create.cutscene = true
Event.add (
defines.events . on_player_created ,
function ( event )
Task.set_timeout_in_ticks ( 60 , start_cutscene , { event = event } )
end
)
end
return CrashsiteCutscene