implement pause system

This commit is contained in:
Arnaud Vergnet 2021-04-09 11:19:10 +02:00
parent c1ba98a91b
commit ef5e8268c5
24 changed files with 213 additions and 25 deletions

View file

@ -1,13 +0,0 @@
[gd_scene load_steps=4 format=2]
[ext_resource path="res://Main.gd" type="Script" id=1]
[ext_resource path="res://UI.tscn" type="PackedScene" id=3]
[ext_resource path="res://mini-game/MiniGame.tscn" type="PackedScene" id=4]
[node name="Main" type="Node"]
script = ExtResource( 1 )
[node name="MiniGame" parent="." instance=ExtResource( 4 )]
[node name="UI" parent="." instance=ExtResource( 3 )]
[connection signal="game_over" from="MiniGame" to="." method="_on_MiniGame_game_over"]

7
fonts/ButtonFont.tres Normal file
View file

@ -0,0 +1,7 @@
[gd_resource type="DynamicFont" load_steps=2 format=2]
[ext_resource path="res://fonts/open-sans/OpenSans-Regular.ttf" type="DynamicFontData" id=1]
[resource]
size = 30
font_data = ExtResource( 1 )

Binary file not shown.

Before

Width:  |  Height:  |  Size: 314 B

After

Width:  |  Height:  |  Size: 457 B

View file

@ -15,8 +15,8 @@
inkscape:version="1.0.2 (1.0.2+r75+1)" inkscape:version="1.0.2 (1.0.2+r75+1)"
sodipodi:docname="pause.svg" sodipodi:docname="pause.svg"
inkscape:export-filename="/home/vergnet/Godot/pir-serious-game-ethics/images/pause.png" inkscape:export-filename="/home/vergnet/Godot/pir-serious-game-ethics/images/pause.png"
inkscape:export-xdpi="4.0640001" inkscape:export-xdpi="8.1280003"
inkscape:export-ydpi="4.0640001"> inkscape:export-ydpi="8.1280003">
<defs <defs
id="defs2"> id="defs2">
<inkscape:path-effect <inkscape:path-effect
@ -94,8 +94,8 @@
showgrid="false" showgrid="false"
inkscape:pagecheckerboard="true" inkscape:pagecheckerboard="true"
inkscape:window-width="1920" inkscape:window-width="1920"
inkscape:window-height="1043" inkscape:window-height="993"
inkscape:window-x="1920" inkscape:window-x="0"
inkscape:window-y="0" inkscape:window-y="0"
inkscape:window-maximized="1" /> inkscape:window-maximized="1" />
<metadata <metadata
@ -106,7 +106,7 @@
<dc:format>image/svg+xml</dc:format> <dc:format>image/svg+xml</dc:format>
<dc:type <dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title> <dc:title />
</cc:Work> </cc:Work>
</rdf:RDF> </rdf:RDF>
</metadata> </metadata>
@ -122,7 +122,7 @@
x="30.616072" x="30.616072"
y="7.5595241" y="7.5595241"
inkscape:path-effect="#path-effect12" inkscape:path-effect="#path-effect12"
d="M 30.616072,7.5595241 H 81.642859 V 180.67262 H 30.616072 Z m -28.8955677,0 H -49.306282 V 180.67262 H 1.7205043 Z" d="M 30.616072,7.5595241 H 81.642859 V 180.67262 H 30.616072 Z m -51.24897,0 H -71.659685 V 180.67262 h 51.026787 z"
sodipodi:type="rect" sodipodi:type="rect"
transform="matrix(0.97264845,0,0,1,95.144941,5.8839269)" /> transform="matrix(0.97264845,0,0,1,95.144941,5.8839269)" />
</g> </g>

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

View file

@ -2,8 +2,18 @@ extends Node2D
onready var texture : TextureRect = $TextureRect onready var texture : TextureRect = $TextureRect
var moving = false
func stop(): func stop():
moving = false
texture.material.set_shader_param("scroll_speed", 0) texture.material.set_shader_param("scroll_speed", 0)
func start(): func start():
moving = true
texture.material.set_shader_param("scroll_speed", 0.2) texture.material.set_shader_param("scroll_speed", 0.2)
func _process(delta):
if get_tree().paused and moving:
stop()
elif not get_tree().paused and not moving:
start()

View file

@ -24,6 +24,7 @@ shader_param/scroll_speed = 0.0
extents = Vector2( 958.398, 78.6175 ) extents = Vector2( 958.398, 78.6175 )
[node name="foreground" type="Node2D"] [node name="foreground" type="Node2D"]
pause_mode = 2
script = ExtResource( 1 ) script = ExtResource( 1 )
[node name="TextureRect" type="TextureRect" parent="."] [node name="TextureRect" type="TextureRect" parent="."]

View file

@ -45,7 +45,7 @@ _global_script_class_icons={
[application] [application]
config/name="Pir-serious-game-ethics" config/name="Pir-serious-game-ethics"
run/main_scene="res://Main.tscn" run/main_scene="res://scenes/Main.tscn"
config/icon="res://icon.png" config/icon="res://icon.png"
[autoload] [autoload]

13
scenes/Main.tscn Normal file
View file

@ -0,0 +1,13 @@
[gd_scene load_steps=4 format=2]
[ext_resource path="res://scenes/Main.gd" type="Script" id=1]
[ext_resource path="res://scenes/UI.tscn" type="PackedScene" id=2]
[ext_resource path="res://mini-game/MiniGame.tscn" type="PackedScene" id=3]
[node name="Main" type="Node"]
script = ExtResource( 1 )
[node name="MiniGame" parent="." instance=ExtResource( 3 )]
[node name="UI" parent="." instance=ExtResource( 2 )]
[connection signal="game_over" from="MiniGame" to="." method="_on_MiniGame_game_over"]

31
scenes/PauseMenu.gd Normal file
View file

@ -0,0 +1,31 @@
extends Control
func pause():
get_tree().paused = true
show()
func unpause():
get_tree().paused = false
hide()
func _ready():
connect("gui_input", self, '_on_gui_input')
func _input(event: InputEvent):
if event.is_action_pressed("ui_cancel") and visible:
unpause()
get_tree().set_input_as_handled()
func _on_BackgroundButton_pressed():
unpause()
func _on_ContinueButton_pressed():
unpause()
func _on_ExitButton_pressed():
get_tree().quit(0)

118
scenes/PauseMenu.tscn Normal file
View file

@ -0,0 +1,118 @@
[gd_scene load_steps=6 format=2]
[ext_resource path="res://scenes/PauseMenu.gd" type="Script" id=1]
[ext_resource path="res://images/pause.png" type="Texture" id=2]
[ext_resource path="res://fonts/ButtonFont.tres" type="DynamicFont" id=3]
[ext_resource path="res://fonts/open-sans/OpenSans-Light.ttf" type="DynamicFontData" id=4]
[sub_resource type="DynamicFont" id=1]
size = 50
font_data = ExtResource( 4 )
[node name="PauseMenu" type="Control"]
pause_mode = 2
anchor_right = 1.0
anchor_bottom = 1.0
script = ExtResource( 1 )
__meta__ = {
"_edit_use_anchors_": false
}
[node name="Background" type="ColorRect" parent="."]
anchor_right = 1.0
anchor_bottom = 1.0
color = Color( 0, 0, 0, 0.196078 )
__meta__ = {
"_edit_use_anchors_": false
}
[node name="BackgroundButton" type="TextureButton" parent="."]
anchor_right = 1.0
anchor_bottom = 1.0
expand = true
__meta__ = {
"_edit_use_anchors_": false
}
[node name="MarginContainer" type="MarginContainer" parent="."]
anchor_right = 1.0
anchor_bottom = 1.0
mouse_filter = 2
custom_constants/margin_right = 400
custom_constants/margin_top = 100
custom_constants/margin_left = 400
custom_constants/margin_bottom = 100
__meta__ = {
"_edit_use_anchors_": false
}
[node name="ColorRect" type="ColorRect" parent="MarginContainer"]
margin_left = 400.0
margin_top = 100.0
margin_right = 1520.0
margin_bottom = 980.0
color = Color( 0.164706, 0.180392, 0.196078, 1 )
[node name="MarginContainer2" type="MarginContainer" parent="MarginContainer/ColorRect"]
anchor_right = 1.0
anchor_bottom = 1.0
custom_constants/margin_right = 50
custom_constants/margin_top = 50
custom_constants/margin_left = 50
custom_constants/margin_bottom = 50
__meta__ = {
"_edit_use_anchors_": false
}
[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer/ColorRect/MarginContainer2"]
margin_left = 50.0
margin_top = 50.0
margin_right = 1070.0
margin_bottom = 830.0
__meta__ = {
"_edit_use_anchors_": false
}
[node name="CenterContainer" type="CenterContainer" parent="MarginContainer/ColorRect/MarginContainer2/VBoxContainer"]
margin_right = 1020.0
margin_bottom = 64.0
[node name="TextureRect" type="TextureRect" parent="MarginContainer/ColorRect/MarginContainer2/VBoxContainer/CenterContainer"]
margin_left = 478.0
margin_right = 542.0
margin_bottom = 64.0
texture = ExtResource( 2 )
[node name="Text" type="Label" parent="MarginContainer/ColorRect/MarginContainer2/VBoxContainer"]
margin_top = 68.0
margin_right = 1020.0
margin_bottom = 728.0
size_flags_vertical = 3
custom_fonts/font = SubResource( 1 )
text = "Le jeu est en pause"
align = 1
valign = 1
[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/ColorRect/MarginContainer2/VBoxContainer"]
margin_top = 732.0
margin_right = 1020.0
margin_bottom = 780.0
custom_constants/separation = 50
alignment = 1
[node name="ExitButton" type="Button" parent="MarginContainer/ColorRect/MarginContainer2/VBoxContainer/HBoxContainer"]
margin_left = 353.0
margin_right = 465.0
margin_bottom = 48.0
custom_fonts/font = ExtResource( 3 )
text = "Quitter"
[node name="ContinueButton" type="Button" parent="MarginContainer/ColorRect/MarginContainer2/VBoxContainer/HBoxContainer"]
margin_left = 515.0
margin_right = 666.0
margin_bottom = 48.0
custom_fonts/font = ExtResource( 3 )
text = "Continuer"
[connection signal="pressed" from="BackgroundButton" to="." method="_on_BackgroundButton_pressed"]
[connection signal="pressed" from="MarginContainer/ColorRect/MarginContainer2/VBoxContainer/HBoxContainer/ExitButton" to="." method="_on_ExitButton_pressed"]
[connection signal="pressed" from="MarginContainer/ColorRect/MarginContainer2/VBoxContainer/HBoxContainer/ContinueButton" to="." method="_on_ContinueButton_pressed"]

5
scenes/UI.gd Normal file
View file

@ -0,0 +1,5 @@
extends Control
func _on_TextureButton_pressed():
$PauseMenu.pause()

View file

@ -1,6 +1,8 @@
[gd_scene load_steps=2 format=2] [gd_scene load_steps=4 format=2]
[ext_resource path="res://images/pause.png" type="Texture" id=1] [ext_resource path="res://images/pause.png" type="Texture" id=1]
[ext_resource path="res://scenes/PauseMenu.tscn" type="PackedScene" id=2]
[ext_resource path="res://scenes/UI.gd" type="Script" id=3]
[node name="UI" type="Control"] [node name="UI" type="Control"]
anchor_right = 1.0 anchor_right = 1.0
@ -8,6 +10,7 @@ anchor_bottom = 1.0
margin_top = -0.471939 margin_top = -0.471939
margin_bottom = -0.471924 margin_bottom = -0.471924
mouse_filter = 2 mouse_filter = 2
script = ExtResource( 3 )
__meta__ = { __meta__ = {
"_edit_use_anchors_": false "_edit_use_anchors_": false
} }
@ -27,7 +30,7 @@ __meta__ = {
margin_left = 10.0 margin_left = 10.0
margin_top = 10.0 margin_top = 10.0
margin_right = 1910.0 margin_right = 1910.0
margin_bottom = 42.0 margin_bottom = 74.0
hint_tooltip = "Mettre en pause" hint_tooltip = "Mettre en pause"
size_flags_horizontal = 3 size_flags_horizontal = 3
__meta__ = { __meta__ = {
@ -35,7 +38,7 @@ __meta__ = {
} }
[node name="Label" type="Label" parent="MarginContainer/HBoxContainer"] [node name="Label" type="Label" parent="MarginContainer/HBoxContainer"]
margin_right = 1864.0 margin_right = 1832.0
margin_bottom = 14.0 margin_bottom = 14.0
size_flags_horizontal = 3 size_flags_horizontal = 3
size_flags_vertical = 0 size_flags_vertical = 0
@ -45,7 +48,20 @@ __meta__ = {
} }
[node name="TextureButton" type="TextureButton" parent="MarginContainer/HBoxContainer"] [node name="TextureButton" type="TextureButton" parent="MarginContainer/HBoxContainer"]
margin_left = 1868.0 margin_left = 1836.0
margin_right = 1900.0 margin_right = 1900.0
margin_bottom = 32.0 margin_bottom = 64.0
texture_normal = ExtResource( 1 ) texture_normal = ExtResource( 1 )
[node name="ColorRect" type="ColorRect" parent="MarginContainer/HBoxContainer/TextureButton"]
show_behind_parent = true
anchor_right = 1.0
anchor_bottom = 1.0
mouse_filter = 2
color = Color( 0, 0, 0, 0.231373 )
__meta__ = {
"_edit_use_anchors_": false
}
[node name="PauseMenu" parent="." instance=ExtResource( 2 )]
[connection signal="pressed" from="MarginContainer/HBoxContainer/TextureButton" to="." method="_on_TextureButton_pressed"]