diff --git a/gymkhana/addons/escoria-ui-return-monkey-island/esc/commands/play_video.gd b/gymkhana/addons/escoria-ui-return-monkey-island/esc/commands/play_video.gd new file mode 100644 index 00000000..c6213df6 --- /dev/null +++ b/gymkhana/addons/escoria-ui-return-monkey-island/esc/commands/play_video.gd @@ -0,0 +1,41 @@ +# `play_video file` +# +# Plays the specified video blocking the currently running event . +# +# **Parameters** +# +# - *file*: Video file to play +# +# @ESC +extends ESCBaseCommand +class_name PlayVideoCommand + +# Return the descriptor of the arguments of this command +func configure() -> ESCCommandArgumentDescriptor: + return ESCCommandArgumentDescriptor.new( + 1, + [TYPE_STRING, TYPE_STRING] + ) + + +# Validate whether the given arguments match the command descriptor +func validate(arguments: Array): + if not .validate(arguments): + return false + + if not ResourceLoader.exists(arguments[0]): + escoria.logger.error( + self, + "[%s]: invalid parameter. File %s not found." + % [get_command_name(), arguments[0]] + ) + return false + return true + + +# Run the command +func run(command_params: Array) -> int: + escoria.game_scene.play_video(command_params[0]) + #We wait for the video to emit "finished" fignal with yield + yield(escoria.game_scene.get_video_player(),"finished") + return ESCExecution.RC_OK diff --git a/gymkhana/addons/escoria-ui-return-monkey-island/game.gd b/gymkhana/addons/escoria-ui-return-monkey-island/game.gd index 4dafa921..00291883 100644 --- a/gymkhana/addons/escoria-ui-return-monkey-island/game.gd +++ b/gymkhana/addons/escoria-ui-return-monkey-island/game.gd @@ -82,6 +82,8 @@ var _current_mouse_pos = Vector2.ZERO var tooltip2_node: Object var last_target: Object +var video_player: Object + func _ready(): # We need a slightly modified version of Action Manager to combine items with different actions. escoria.action_manager = ESCActionManagerMonkey.new() @@ -455,3 +457,10 @@ func _on_event_done(return_code: int, _event_name: String): func _on_MenuButton_pressed() -> void: pause_game() + +func get_video_player() -> Node: + return $CanvasLayer/video_player + +func play_video(video_file: String) -> void: + $CanvasLayer/video_player.visible = true + $CanvasLayer/video_player.play(video_file) diff --git a/gymkhana/addons/escoria-ui-return-monkey-island/game.tscn b/gymkhana/addons/escoria-ui-return-monkey-island/game.tscn index be7e4a39..93e4743b 100644 --- a/gymkhana/addons/escoria-ui-return-monkey-island/game.tscn +++ b/gymkhana/addons/escoria-ui-return-monkey-island/game.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=12 format=2] +[gd_scene load_steps=13 format=2] [ext_resource path="res://gymkhana/addons/escoria-ui-return-monkey-island/inventory/inventory_ui.tscn" type="PackedScene" id=1] [ext_resource path="res://addons/escoria-core/game/scenes/dialogs/esc_dialog_player.gd" type="Script" id=2] @@ -11,6 +11,7 @@ [ext_resource path="res://gymkhana/addons/escoria-ui-return-monkey-island/theme.tres" type="Theme" id=9] [ext_resource path="res://gymkhana/addons/escoria-ui-return-monkey-island/tooltip/target_tooltip2.tscn" type="PackedScene" id=10] [ext_resource path="res://gymkhana/addons/escoria-ui-return-monkey-island/icons/cog-64.svg" type="Texture" id=11] +[ext_resource path="res://gymkhana/addons/escoria-ui-return-monkey-island/video_player/video_player.tscn" type="PackedScene" id=12] [node name="game" type="Node2D"] script = ExtResource( 5 ) @@ -84,6 +85,9 @@ theme = ExtResource( 9 ) [node name="main_menu" parent="CanvasLayer" instance=ExtResource( 7 )] visible = false +[node name="video_player" parent="CanvasLayer" instance=ExtResource( 12 )] +visible = false + [node name="tooltip_layer" type="CanvasLayer" parent="."] layer = 2 diff --git a/gymkhana/addons/escoria-ui-return-monkey-island/video_player/video_player.gd b/gymkhana/addons/escoria-ui-return-monkey-island/video_player/video_player.gd new file mode 100644 index 00000000..3de997ba --- /dev/null +++ b/gymkhana/addons/escoria-ui-return-monkey-island/video_player/video_player.gd @@ -0,0 +1,12 @@ +tool +extends Node + +signal finished + +func play(video_file: String): + $VideoPlayer.set_stream(load(video_file)) + $VideoPlayer.play() + +func _on_VideoPlayer_finished(): + self.visible = false + emit_signal("finished") diff --git a/gymkhana/addons/escoria-ui-return-monkey-island/video_player/video_player.tscn b/gymkhana/addons/escoria-ui-return-monkey-island/video_player/video_player.tscn new file mode 100644 index 00000000..cba5a674 --- /dev/null +++ b/gymkhana/addons/escoria-ui-return-monkey-island/video_player/video_player.tscn @@ -0,0 +1,23 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://gymkhana/addons/escoria-ui-return-monkey-island/video_player/video_player.gd" type="Script" id=1] + +[sub_resource type="VideoStreamTheora" id=1] + +[node name="video_player" type="Control"] +margin_right = 1285.0 +margin_bottom = 753.0 +script = ExtResource( 1 ) + +[node name="ColorRect" type="ColorRect" parent="."] +margin_right = 1275.0 +margin_bottom = 744.0 +color = Color( 0, 0, 0, 1 ) + +[node name="VideoPlayer" type="VideoPlayer" parent="."] +margin_right = 1279.0 +margin_bottom = 747.0 +stream = SubResource( 1 ) +expand = false + +[connection signal="finished" from="VideoPlayer" to="." method="_on_VideoPlayer_finished"] diff --git a/gymkhana/rooms/turno_cocina/cocina_delante/esc/cocina_delante.esc b/gymkhana/rooms/turno_cocina/cocina_delante/esc/cocina_delante.esc index 55da858f..62dd69f8 100644 --- a/gymkhana/rooms/turno_cocina/cocina_delante/esc/cocina_delante.esc +++ b/gymkhana/rooms/turno_cocina/cocina_delante/esc/cocina_delante.esc @@ -18,6 +18,7 @@ :ready + set_global new_game true > [new_game] set_global new_game false accept_input SKIP diff --git a/gymkhana/rooms/turno_cocina/cocina_delante/esc/puerta_cocina.esc b/gymkhana/rooms/turno_cocina/cocina_delante/esc/puerta_cocina.esc index dc18c743..84e8d46f 100644 --- a/gymkhana/rooms/turno_cocina/cocina_delante/esc/puerta_cocina.esc +++ b/gymkhana/rooms/turno_cocina/cocina_delante/esc/puerta_cocina.esc @@ -1,3 +1,6 @@ :action1 +accept_input SKIP +play_video res://gymkhana/videos/test_video.ogv +accept_input ALL play_snd res://gymkhana/sounds/cocina_delante_open.ogg -change_scene "res://gymkhana/rooms/turno_cocina/cocina/cocina.tscn" +change_scene "res://gymkhana/rooms/turno_cocina/cocina/cocina.tscn" \ No newline at end of file diff --git a/gymkhana/rooms/turno_cocina/cocina_delante/esc/puerta_detras.esc b/gymkhana/rooms/turno_cocina/cocina_delante/esc/puerta_detras.esc index dd326dbe..f6d68f3a 100644 --- a/gymkhana/rooms/turno_cocina/cocina_delante/esc/puerta_detras.esc +++ b/gymkhana/rooms/turno_cocina/cocina_delante/esc/puerta_detras.esc @@ -1,2 +1,3 @@ :action1 + change_scene "res://gymkhana/rooms/turno_cocina/cocina_detras/cocina_detras.tscn" diff --git a/gymkhana/start_game.esc b/gymkhana/start_game.esc index fa8a26d8..8509c523 100644 --- a/gymkhana/start_game.esc +++ b/gymkhana/start_game.esc @@ -2,7 +2,6 @@ # Play Escoria logo cutscene # change_scene res://gymkhana/rooms/intro/intro_room.tscn false show_menu main - # When control is passed back after the logo, start the music play_snd res://game/sfx/Game-Menu_Looping.mp3 _music diff --git a/gymkhana/videos/test_video.ogv b/gymkhana/videos/test_video.ogv new file mode 100644 index 00000000..ebcd6a37 Binary files /dev/null and b/gymkhana/videos/test_video.ogv differ diff --git a/project.godot b/project.godot index 010f43d5..13d3b962 100644 --- a/project.godot +++ b/project.godot @@ -505,6 +505,11 @@ _global_script_classes=[ { "path": "res://addons/escoria-core/game/core-scripts/esc/commands/play_snd.gd" }, { "base": "ESCBaseCommand", +"class": "PlayVideoCommand", +"language": "GDScript", +"path": "res://gymkhana/addons/escoria-ui-return-monkey-island/esc/commands/play_video.gd" +}, { +"base": "ESCBaseCommand", "class": "PrintCommand", "language": "GDScript", "path": "res://addons/escoria-core/game/core-scripts/esc/commands/print.gd" @@ -794,6 +799,7 @@ _global_script_class_icons={ "InventoryRemoveCommand": "", "ItemOutline": "res://addons/escoria-core/design/esc_item.svg", "PlaySndCommand": "", +"PlayVideoCommand": "", "PrintCommand": "", "QueueEventCommand": "", "QueueResourceCommand": "",