add key holddown time to enter game and add explosion effect
This commit is contained in:
parent
d047c52c31
commit
5194eab229
3 changed files with 79 additions and 22 deletions
|
@ -1,4 +1,4 @@
|
||||||
[gd_scene load_steps=15 format=3 uid="uid://b1uhymisifcho"]
|
[gd_scene load_steps=16 format=3 uid="uid://b1uhymisifcho"]
|
||||||
|
|
||||||
[ext_resource type="Script" path="res://scripts/menu.gd" id="1_fushn"]
|
[ext_resource type="Script" path="res://scripts/menu.gd" id="1_fushn"]
|
||||||
[ext_resource type="Script" path="res://scripts/menudisplay.gd" id="2_jc4pv"]
|
[ext_resource type="Script" path="res://scripts/menudisplay.gd" id="2_jc4pv"]
|
||||||
|
@ -12,6 +12,10 @@
|
||||||
[ext_resource type="Texture2D" uid="uid://bst8p5s1sgurm" path="res://sprites/menu_bg.png" id="10_equk1"]
|
[ext_resource type="Texture2D" uid="uid://bst8p5s1sgurm" path="res://sprites/menu_bg.png" id="10_equk1"]
|
||||||
[ext_resource type="Texture2D" uid="uid://drgqjl330tj2p" path="res://scenes/map_preview/no_preview.png" id="11_3sx36"]
|
[ext_resource type="Texture2D" uid="uid://drgqjl330tj2p" path="res://scenes/map_preview/no_preview.png" id="11_3sx36"]
|
||||||
|
|
||||||
|
[sub_resource type="Curve" id="Curve_kioen"]
|
||||||
|
_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
|
||||||
|
point_count = 2
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_7lydi"]
|
[sub_resource type="Animation" id="Animation_7lydi"]
|
||||||
length = 0.001
|
length = 0.001
|
||||||
tracks/0/type = "value"
|
tracks/0/type = "value"
|
||||||
|
@ -131,6 +135,26 @@ layout_mode = 2
|
||||||
theme_override_font_sizes/font_size = 40
|
theme_override_font_sizes/font_size = 40
|
||||||
uppercase = true
|
uppercase = true
|
||||||
|
|
||||||
|
[node name="PlayerlistParticles2D" type="CPUParticles2D" parent="MenuDisplay/MarginContainer"]
|
||||||
|
position = Vector2(-317, -51.245)
|
||||||
|
emitting = false
|
||||||
|
amount = 200
|
||||||
|
lifetime = 3.0
|
||||||
|
one_shot = true
|
||||||
|
preprocess = 0.1
|
||||||
|
explosiveness = 1.0
|
||||||
|
lifetime_randomness = 0.4
|
||||||
|
fract_delta = false
|
||||||
|
emission_shape = 3
|
||||||
|
emission_rect_extents = Vector2(20, 5)
|
||||||
|
direction = Vector2(0, -1)
|
||||||
|
spread = 180.0
|
||||||
|
initial_velocity_min = 20.0
|
||||||
|
initial_velocity_max = 500.0
|
||||||
|
scale_amount_min = 2.0
|
||||||
|
scale_amount_max = 10.0
|
||||||
|
scale_amount_curve = SubResource("Curve_kioen")
|
||||||
|
|
||||||
[node name="btn_fullscreen" type="CheckButton" parent="MenuDisplay"]
|
[node name="btn_fullscreen" type="CheckButton" parent="MenuDisplay"]
|
||||||
offset_left = 845.0
|
offset_left = 845.0
|
||||||
offset_top = 540.0
|
offset_top = 540.0
|
||||||
|
|
|
@ -1,10 +1,13 @@
|
||||||
extends Node
|
extends Node
|
||||||
|
|
||||||
@onready var countdown: Label = $MenuDisplay/countdown
|
@onready var countdown: Label = $MenuDisplay/countdown
|
||||||
@onready var btn_fullscreen = $MenuDisplay/btn_fullscreen
|
@onready var btn_fullscreen = $MenuDisplay/btn_fullscreen
|
||||||
@onready var btn_save_whitelist= $MenuDisplay/btn_save_whitelist
|
@onready var btn_save_whitelist= $MenuDisplay/btn_save_whitelist
|
||||||
var keywhitelist
|
var keywhitelist
|
||||||
|
|
||||||
|
var keyHolddownQueue = {}
|
||||||
|
|
||||||
|
const KEY_HOLDDOWN_TO_ENTER_TIME=500 #in milliseconds
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
removeAssignedKeys()
|
removeAssignedKeys()
|
||||||
Gamestate.removeAllPlayers()
|
Gamestate.removeAllPlayers()
|
||||||
|
@ -44,22 +47,17 @@ func removeAssignedKeys():
|
||||||
InputMap.erase_action(action)
|
InputMap.erase_action(action)
|
||||||
|
|
||||||
func _unhandled_key_input(event: InputEvent) -> void:
|
func _unhandled_key_input(event: InputEvent) -> void:
|
||||||
|
var currentmsecs=Time.get_ticks_msec()
|
||||||
|
|
||||||
if event is InputEventKey:
|
if event is InputEventKey:
|
||||||
if event.pressed:
|
if keywhitelist.has(event.keycode) or keywhitelist.size()<1: #is key whitelisted?
|
||||||
if keywhitelist.has(event.keycode) or keywhitelist.size()<1:
|
if event.is_pressed() and not keyHolddownQueue.has(event.keycode) and not Gamestate.getPlayerkeys().has(event.keycode): #key just pressed and not already added
|
||||||
print("Key keycode:"+str(event.keycode))
|
keyHolddownQueue[event.keycode]=currentmsecs
|
||||||
var addedID=Gamestate.addPlayer(event.keycode)
|
if event.is_released() and keyHolddownQueue.has(event.keycode):
|
||||||
|
keyHolddownQueue.erase(event.keycode)
|
||||||
|
|
||||||
$MenuDisplay.update_playerlist(Gamestate.players,event.keycode)
|
if event.is_pressed() and Gamestate.getPlayerkeys().has(event.keycode): #key pressed and player already added
|
||||||
|
$MenuDisplay.update_playerlist(Gamestate.players,event.keycode,"blink")
|
||||||
if addedID!=-1: #player was added
|
|
||||||
if len(Gamestate.getPlayerkeys())>=1:
|
|
||||||
$Timer.start()
|
|
||||||
else:
|
|
||||||
$Timer.stop()
|
|
||||||
else:
|
|
||||||
print("keycode "+str(event.keycode)+" is not whitelisted")
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
func _on_timer_timeout() -> void: #Start Game
|
func _on_timer_timeout() -> void: #Start Game
|
||||||
|
@ -70,6 +68,26 @@ func _on_timer_timeout() -> void: #Start Game
|
||||||
|
|
||||||
|
|
||||||
func _process(delta: float) -> void:
|
func _process(delta: float) -> void:
|
||||||
|
var currentmsecs=Time.get_ticks_msec()
|
||||||
|
|
||||||
|
for queuedKey in keyHolddownQueue:
|
||||||
|
if currentmsecs-keyHolddownQueue[queuedKey]>KEY_HOLDDOWN_TO_ENTER_TIME: #and pressed long enough
|
||||||
|
keyHolddownQueue.erase(queuedKey)
|
||||||
|
|
||||||
|
#if keywhitelist.has(event.keycode) or keywhitelist.size()<1: #is key whitelisted?
|
||||||
|
print("Key added. keycode:"+str(queuedKey))
|
||||||
|
var addedID=Gamestate.addPlayer(queuedKey)
|
||||||
|
|
||||||
|
$MenuDisplay.update_playerlist(Gamestate.players,queuedKey,"explode")
|
||||||
|
|
||||||
|
|
||||||
|
if addedID!=-1: #player was added
|
||||||
|
if len(Gamestate.getPlayerkeys())>=1:
|
||||||
|
$Timer.start()
|
||||||
|
else:
|
||||||
|
$Timer.stop()
|
||||||
|
|
||||||
|
|
||||||
if $Timer.is_stopped() or $Timer.time_left>3.5:
|
if $Timer.is_stopped() or $Timer.time_left>3.5:
|
||||||
$MenuDisplay.updateCountdown(-1) #do not display countdown
|
$MenuDisplay.updateCountdown(-1) #do not display countdown
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
extends Node2D
|
extends Node2D
|
||||||
|
|
||||||
|
const ADD_STEP_OUTLINESIZE=30
|
||||||
|
const MAX_OUTLINESIZE=60
|
||||||
|
@onready var playerlist_particles_2d: CPUParticles2D = $MarginContainer/PlayerlistParticles2D
|
||||||
|
|
||||||
# Called when the node enters the scene tree for the first time.
|
# Called when the node enters the scene tree for the first time.
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
|
@ -13,20 +16,32 @@ func updateCountdown(t):
|
||||||
else:
|
else:
|
||||||
$countdown.visible=true
|
$countdown.visible=true
|
||||||
$countdown.text=str(t)
|
$countdown.text=str(t)
|
||||||
|
|
||||||
|
|
||||||
func update_playerlist(players:Array[Gamestate.Player],flashplayer_keycode=-1):
|
|
||||||
|
func update_playerlist(players:Array[Gamestate.Player],flashplayer_keycode=-1,effect="blink"):
|
||||||
var Playerlabels=$MarginContainer/VBoxContainer_Playerlist.get_children()
|
var Playerlabels=$MarginContainer/VBoxContainer_Playerlist.get_children()
|
||||||
var i=0
|
var i=0
|
||||||
for label in Playerlabels:
|
for label in Playerlabels:
|
||||||
#print(type_string(typeof(label)))
|
|
||||||
if i<len(players):
|
if i<len(players):
|
||||||
var p=players[i]
|
var p=players[i]
|
||||||
label.text=str(OS.get_keycode_string(p.inputkey))
|
label.text=str(OS.get_keycode_string(p.inputkey))
|
||||||
if (p.inputkey==flashplayer_keycode): #this player pressed their key again
|
if (p.inputkey==flashplayer_keycode): #this player should show an animation
|
||||||
|
if effect=="blink":
|
||||||
|
var outlinesize=min(max(0,label.get_theme_constant("outline_size")+ADD_STEP_OUTLINESIZE),MAX_OUTLINESIZE) #enlarge outline a bit
|
||||||
|
label.add_theme_constant_override("outline_size",outlinesize)
|
||||||
|
if effect=="explode":
|
||||||
|
var outlinesize=MAX_OUTLINESIZE
|
||||||
|
label.add_theme_constant_override("outline_size",outlinesize) #make outline max size
|
||||||
|
|
||||||
|
var font_size=label.get_theme_font_size("font_size")
|
||||||
|
var new_playerlist_particles_2d=playerlist_particles_2d.duplicate()
|
||||||
|
$MarginContainer.add_child(new_playerlist_particles_2d)
|
||||||
|
new_playerlist_particles_2d.position=label.position+Vector2(font_size/3,font_size*0.75) #try to center on text
|
||||||
|
new_playerlist_particles_2d.emitting=true
|
||||||
|
new_playerlist_particles_2d.emission_rect_extents=Vector2(font_size/3,font_size*0.75)*2
|
||||||
|
new_playerlist_particles_2d.color=p.color
|
||||||
|
|
||||||
|
|
||||||
var outlinesize=min(max(0,label.get_theme_constant("outline_size")+30),60)
|
|
||||||
label.add_theme_constant_override("outline_size",outlinesize)
|
|
||||||
label.set("theme_override_colors/font_color",p.color)
|
label.set("theme_override_colors/font_color",p.color)
|
||||||
else:
|
else:
|
||||||
label.text=""
|
label.text=""
|
||||||
|
|
Loading…
Reference in a new issue