WRAP IT UP title screen (:

EaseMover.new(_time, _clock, ...)
Audio.dict now only using AudioStreamPlayer or ASP2D (:
Wrapper.gd to wrap target node!
Ignoring inputs when MenuPause open^.^
Duplicate enemies on world 4+ (=
This commit is contained in:
Harmony Honey 2023-05-18 22:52:12 -04:00
parent 22eb353320
commit 39df84acc7
12 changed files with 218 additions and 95 deletions

View file

@ -22,7 +22,7 @@ func _exit_tree():
Cam.target_node = player
func _physics_process(delta):
var m = MenuPause.is_open
var m = MenuPause.is_paused
joy.x = 0.0 if m else round(Input.get_axis("left", "right"))
var a = Input.is_action_pressed("jump")

View file

@ -89,11 +89,11 @@ rect_clip_content = true
position = Vector2( 0, 310 )
[node name="Joystick" type="Node2D" parent="CanvasLayer/Cabinet/Controls"]
position = Vector2( -200, 23 )
position = Vector2( -180, 23 )
[node name="Polygon2D2" type="Polygon2D" parent="CanvasLayer/Cabinet/Controls/Joystick"]
position = Vector2( 0, -50 )
color = Color( 0.5, 0, 0, 1 )
color = Color( 0.392157, 0, 0.196078, 1 )
polygon = PoolVector2Array( 15, 50, 14.6239, 53.3378, 13.5145, 56.5083, 11.7275, 59.3523, 9.35235, 61.7275, 6.50826, 63.5145, 3.33781, 64.6239, -6.55671e-07, 65, -3.33781, 64.6239, -6.50826, 63.5145, -9.35235, 61.7275, -11.7275, 59.3523, -13.5145, 56.5083, -14.6239, 53.3378, -15, 50, -15, -50, -14.6239, -53.3378, -13.5145, -56.5083, -11.7275, -59.3523, -9.35234, -61.7275, -6.50826, -63.5145, -3.33782, -64.6239, 1.78873e-07, -65, 3.33782, -64.6239, 6.50826, -63.5145, 9.35235, -61.7275, 11.7275, -59.3523, 13.5145, -56.5083, 14.6239, -53.3378, 15, -50 )
script = ExtResource( 1 )
is_baked = false
@ -107,11 +107,11 @@ polygon = PoolVector2Array( 50, 0, 46.194, 19.1342, 35.3553, 35.3553, 19.1342, 4
script = ExtResource( 2 )
[node name="Button" type="Node2D" parent="CanvasLayer/Cabinet/Controls"]
position = Vector2( 50, 0 )
position = Vector2( 30, 0 )
scale = Vector2( 1, 0.75 )
[node name="Polygon2D2" type="Polygon2D" parent="CanvasLayer/Cabinet/Controls/Button"]
color = Color( 0.5, 0, 0, 1 )
color = Color( 0.392157, 0, 0.196078, 1 )
polygon = PoolVector2Array( 50, 0, 46.194, 19.1342, 35.3553, 35.3553, 19.1342, 46.194, -2.18557e-06, 50, -19.1342, 46.194, -35.3553, 35.3553, -46.194, 19.1342, -50, -4.37114e-06, -46.194, -19.1342, -35.3553, -35.3553, -19.1342, -46.194, 5.96244e-07, -50, 19.1342, -46.194, 35.3553, -35.3553, 46.194, -19.1342 )
script = ExtResource( 2 )
@ -141,11 +141,11 @@ rect_offset = Vector2( 0, 10 )
radius = Plane( 0, 0, -2, -2 )
[node name="Button2" type="Node2D" parent="CanvasLayer/Cabinet/Controls"]
position = Vector2( 200, 0 )
position = Vector2( 180, 0 )
scale = Vector2( 1, 0.75 )
[node name="Polygon2D2" type="Polygon2D" parent="CanvasLayer/Cabinet/Controls/Button2"]
color = Color( 0.5, 0, 0, 1 )
color = Color( 0.392157, 0, 0.196078, 1 )
polygon = PoolVector2Array( 50, 0, 46.194, 19.1342, 35.3553, 35.3553, 19.1342, 46.194, -2.18557e-06, 50, -19.1342, 46.194, -35.3553, 35.3553, -46.194, 19.1342, -50, -4.37114e-06, -46.194, -19.1342, -35.3553, -35.3553, -19.1342, -46.194, 5.96244e-07, -50, 19.1342, -46.194, 35.3553, -35.3553, 46.194, -19.1342 )
script = ExtResource( 2 )

View file

@ -12,7 +12,7 @@ export var tile_size := 12.0
export(String, DIR) var folder := ""
onready var maps : Array = Shared.list_all_files(folder)
export var map := 0 setget set_map
var map_ease := EaseMover.new(1.0)
var map_ease := EaseMover.new(1.0, 0.01)
var candies := []
@ -23,12 +23,35 @@ export var cam_speed := 100.0
var wrap_angle = 0.0
var delta_scale := 1.0
var btn_a := false
var btn_b := false
var is_unpause := false
var candy_scene := load("res://src/arcade/Candy.tscn")
onready var music : AudioStreamPlayer = Audio.dict["music_arcade"]
func _ready():
map_ease.clock = 0.01
MenuPause.connect("opened", self, "pause")
scene()
Audio.play("arcade_boot")
yield(get_tree().create_timer(1.0), "timeout")
music.play()
func _exit_tree():
if music:
music.stop()
func _physics_process(delta):
var m = MenuPause.is_paused
var a = Input.is_action_pressed("jump")
var b = Input.is_action_pressed("grab")
if is_unpause: is_unpause = a or b
if !is_unpause:
btn_a = a and !m
btn_b = b and !m
var s = map_ease.count(delta)
var f = map_ease.frac()
@ -42,12 +65,15 @@ func _physics_process(delta):
yield(get_tree(), "physics_frame")
scene()
if wrap_cam > 0:
cam.position += Vector2.RIGHT.rotated(wrap_angle) * cam_speed * delta
cam.position = Vector2(wrapf(cam.position.x, -room_size, room_size), wrapf(cam.position.y, -room_size, room_size))
map_ease.from = cam.position
if map == 0 and (btn_a or btn_b) and !m and map_ease.clock == 0.0:
win(true)
func set_map(arg := map):
map = max(0, arg)
@ -56,8 +82,6 @@ func set_map(arg := map):
var loop = floor(map / maps.size())
label_node.text = (str(loop + 1) + "-" if loop > 0 else "") + str(map % maps.size())
func wrap_tiles(_map):
var tiles = _map.get_used_cells()
@ -69,8 +93,8 @@ func wrap_tiles(_map):
var vec = t + (Vector2(x, y) * tile_size)
_map.set_cell(vec.x, vec.y, 0)
func win():
if candies.size() > 0: return
func win(arg := false):
if candies.size() > 0 and !arg: return
map_ease.show = true
self.map += 1
@ -89,7 +113,7 @@ func scene():
cam_speed = c * 100
delta_scale = 1.0 + (clamp(wrap_cam - 1, 0.0, 5.0) * 0.2)
print("wrap_cam: ", wrap_cam, " cam_speed: ", cam_speed, " delta_scale : ", delta_scale)
#print("wrap_cam: ", wrap_cam, " cam_speed: ", cam_speed, " delta_scale : ", delta_scale)
randomize()
wrap_angle = lerp(0.0, TAU, (randi() % 3) / 4.0) + (0.0 if wrap_cam < 2 else deg2rad(45.0))
@ -112,4 +136,15 @@ func scene():
if i.is_in_group("back"):
i.visible = false
yield(get_tree(), "idle_frame")
if wrap_cam > 2:
var g = get_tree().get_nodes_in_group("candy")
for i in g:
var d = candy_scene.instance()
d.position = i.position
i.get_parent().add_child(d)
d.dir_x = -i.dir_x
func pause(arg := false):
is_unpause = !arg

View file

@ -1,6 +1,6 @@
extends KinematicBody2D
var dir_x := 1.0
var dir_x := 0.0
export var speed := 100.0
@ -25,17 +25,11 @@ func _ready():
arcade.candies.append(self)
delta_scale = arcade.delta_scale
move_and_collide(Vector2(0, 500))
if randf() > 0.5:
dir_x = -dir_x
if dir_x == 0.0:
dir_x = -1.0 if randf() < 0.5 else 1.0
spr_list = []
for i in 8:
var s = image.duplicate()
add_child(s)
spr_list.append(s)
if test_move(transform, Vector2(0, 100)):
move_and_collide(Vector2(0, 100))
func _exit_tree():
arcade.candies.erase(self)
@ -48,7 +42,7 @@ func _physics_process(delta):
if !is_dead:
move_and_collide(Vector2(speed * dir_x, 0.0) * delta)
if !is_floor:
move_and_collide(Vector2(0, 5.0))
move_and_collide(Vector2(0, 10.0))
var tf = Transform2D(0.0, position + Vector2(dir_x * 20, 0.0))
@ -72,24 +66,6 @@ func _physics_process(delta):
position.x = wrapf(position.x, -room_size.x, room_size.x)
position.y = wrapf(position.y, -room_size.y, room_size.y)
# mirrors
var vec = []
for x in [-1, 0, 1]:
for y in [-1, 0, 1]:
if !(x == 0 and y == 0):
vec.append(Vector2(x, y))
var sg = image.global_position
var add = Vector2(room_size.x, room_size.y) * 2.0
for i in spr_list.size():
spr_list[i].scale = image.scale
spr_list[i].rotation = image.rotation
spr_list[i].global_position = sg + (add * vec[i])
func die():
is_dead = true
collision_layer = 0

View file

@ -1,12 +1,13 @@
[gd_scene load_steps=4 format=2]
[gd_scene load_steps=5 format=2]
[ext_resource path="res://src/class/shape/Rectangle.gd" type="Script" id=1]
[ext_resource path="res://src/arcade/Candy.gd" type="Script" id=2]
[ext_resource path="res://src/arcade/Wrapper.gd" type="Script" id=3]
[sub_resource type="RectangleShape2D" id=4]
extents = Vector2( 30, 30 )
[node name="Candy" type="KinematicBody2D"]
[node name="Candy" type="KinematicBody2D" groups=["candy"]]
collision_layer = 2
script = ExtResource( 2 )
speed = 130.0
@ -42,3 +43,7 @@ is_baked = false
size = Vector2( 7, 12 )
radius = Plane( -2, -1, -1, -1 )
points = 4
[node name="Wrapper" type="Node2D" parent="."]
script = ExtResource( 3 )
image_path = NodePath("../Sprites")

View file

@ -3,11 +3,9 @@ extends KinematicBody2D
onready var area := $Area2D
onready var image := $Sprites
onready var image_root := $Sprites/Root
var spr_list := []
var joy := Vector2.ZERO
var joy_last := Vector2.ZERO
var btnp_jump := false
var btn_jump := false
var jump_ease := EaseMover.new(0.15)
var is_jump := false
@ -46,12 +44,8 @@ func _ready():
for i in get_tree().get_nodes_in_group("arcade"):
arcade = i
spr_list = []
for i in 8:
var s = image_root.duplicate()
add_child(s)
spr_list.append(s)
if arcade.map == 0:
is_input = false
image_root.scale = Vector2.ZERO
squish_ease.to = Vector2.ONE
@ -59,14 +53,13 @@ func _ready():
func _physics_process(delta):
# input
joy_last = joy
if is_input and !MenuPause.is_open:
if is_input and !MenuPause.is_paused:
joy.x = round(Input.get_axis("left", "right"))
joy.y = round(Input.get_axis("up", "down"))
var j = Input.is_action_pressed("jump")
var j = Input.is_action_pressed("jump") or Input.is_action_pressed("grab")
if !j: is_unpause = false
if !is_unpause:
btnp_jump = Input.is_action_just_pressed("jump")
btn_jump = j
# is floor & air clock
@ -155,23 +148,6 @@ func _physics_process(delta):
# squish ease
image_root.scale = squish_ease.move(delta)
# mirrors
var vec = []
for x in [-1, 0, 1]:
for y in [-1, 0, 1]:
if !(x == 0 and y == 0):
vec.append(Vector2(x, y))
var sg = image_root.global_position
var add = Vector2(room_size.x, room_size.y) * 2.0
for i in spr_list.size():
spr_list[i].scale = image_root.global_scale
spr_list[i].rotation = image_root.global_rotation
spr_list[i].global_position = sg + (add * vec[i])
func die():
is_dead = true
@ -186,5 +162,4 @@ func die():
func pause(arg := false):
joy = Vector2.ZERO
btn_jump = false
btnp_jump = false
is_unpause = !arg

View file

@ -1,8 +1,9 @@
[gd_scene load_steps=6 format=2]
[gd_scene load_steps=7 format=2]
[ext_resource path="res://src/class/shape/Rectangle.gd" type="Script" id=1]
[ext_resource path="res://src/class/shape/Circle.gd" type="Script" id=2]
[ext_resource path="res://src/arcade/Player.gd" type="Script" id=3]
[ext_resource path="res://src/arcade/Wrapper.gd" type="Script" id=4]
[sub_resource type="RectangleShape2D" id=3]
extents = Vector2( 20, 34 )
@ -95,3 +96,7 @@ size = Vector2( 10, 30 )
rect_offset = Vector2( 0, 20 )
radius = Plane( -2, -2, -2, -2 )
points = 4
[node name="Wrapper" type="Node2D" parent="."]
script = ExtResource( 4 )
image_path = NodePath("../Sprites/Root")

34
src/arcade/Wrapper.gd Normal file
View file

@ -0,0 +1,34 @@
extends Node2D
export var image_path : NodePath = ""
onready var image_node := get_node_or_null(image_path)
var spr_list := []
var room_size := Vector2(600, 600)
var vec = []
func _ready():
process_priority = 1
spr_list = []
for i in 8:
var s = image_node.duplicate()
add_child(s)
spr_list.append(s)
# mirrors
vec = []
for x in [-1, 0, 1]:
for y in [-1, 0, 1]:
if !(x == 0 and y == 0):
vec.append(Vector2(x, y))
func _physics_process(delta):
if !is_instance_valid(image_node): return
var sg = image_node.global_position
var add = Vector2(room_size.x, room_size.y) * 2.0
for i in spr_list.size():
spr_list[i].scale = image_node.global_scale
spr_list[i].rotation = image_node.global_rotation
spr_list[i].global_position = sg + (add * vec[i])

88
src/arcade/maps/0.tscn Normal file
View file

@ -0,0 +1,88 @@
[gd_scene load_steps=12 format=2]
[ext_resource path="res://src/class/shape/Rectangle.gd" type="Script" id=1]
[ext_resource path="res://media/image/box/box-100.png" type="Texture" id=2]
[ext_resource path="res://src/arcade/Candy.tscn" type="PackedScene" id=3]
[ext_resource path="res://src/arcade/Player.tscn" type="PackedScene" id=4]
[ext_resource path="res://src/stage/SolidTileMap.tscn" type="PackedScene" id=5]
[ext_resource path="res://media/font/mini-wakuwaku.otf" type="DynamicFontData" id=6]
[ext_resource path="res://src/arcade/Wrapper.gd" type="Script" id=7]
[sub_resource type="OccluderPolygon2D" id=5]
polygon = PoolVector2Array( 100, 100, 0, 100, 0, 0, 100, 0 )
[sub_resource type="ConvexPolygonShape2D" id=1]
points = PoolVector2Array( 100, 100, 0, 100, 0, 0, 100, 0 )
[sub_resource type="TileSet" id=2]
0/name = "rect-100.png 0"
0/texture = ExtResource( 2 )
0/tex_offset = Vector2( 0, 0 )
0/modulate = Color( 0, 0, 0, 0 )
0/region = Rect2( 0, 0, 100, 100 )
0/tile_mode = 0
0/occluder_offset = Vector2( 0, 0 )
0/occluder = SubResource( 5 )
0/navigation_offset = Vector2( 0, 0 )
0/shape_offset = Vector2( 0, 0 )
0/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
0/shape = SubResource( 1 )
0/shape_one_way = false
0/shape_one_way_margin = 1.0
0/shapes = [ {
"autotile_coord": Vector2( 0, 0 ),
"one_way": false,
"one_way_margin": 1.0,
"shape": SubResource( 1 ),
"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
} ]
0/z_index = 0
[sub_resource type="DynamicFont" id=6]
size = 230
extra_spacing_bottom = -20
font_data = ExtResource( 6 )
[node name="Map" type="Node2D"]
[node name="Back" type="Polygon2D" parent="." groups=["back"]]
color = Color( 1, 0, 0, 0.407843 )
polygon = PoolVector2Array( 600, 600, -600, 600, -600, -600, 600, -600 )
script = ExtResource( 1 )
__meta__ = {
"_edit_lock_": true
}
size = Vector2( 600, 600 )
[node name="SolidTileMap" parent="." instance=ExtResource( 5 )]
tile_set = SubResource( 2 )
tile_data = PoolIntArray( -327686, -1610612736, 0, -327685, -1610612736, 0, -327684, -1610612736, 0, -327683, -1610612736, 0, -327682, -1610612736, 0, -393215, -1610612736, 0, -393214, -1610612736, 0, -393213, -1610612736, 0, -393212, -1610612736, 0, -393211, -1610612736, 0, -262150, -1610612736, 0, -262149, -1610612736, 0, -262148, -1610612736, 0, -262147, -1610612736, 0, -262146, -1610612736, 0, -327679, -1610612736, 0, -327678, -1610612736, 0, -327677, -1610612736, 0, -327676, -1610612736, 0, -327675, -1610612736, 0, 196602, -1610612736, 0, 196603, -1610612736, 0, 131076, -1610612736, 0, 131077, -1610612736, 0, 262138, -1610612736, 0, 262139, -1610612736, 0, 262143, -1610612736, 0, 196608, -1610612736, 0, 196612, -1610612736, 0, 196613, -1610612736, 0, 327679, -1610612736, 0, 262144, -1610612736, 0 )
detail = 6
[node name="Wrapper" type="Node2D" parent="."]
script = ExtResource( 7 )
image_path = NodePath("../Title")
[node name="Title" type="Node2D" parent="."]
position = Vector2( -600, -400 )
[node name="Label" type="Label" parent="Title"]
margin_right = 1200.0
margin_bottom = 600.0
custom_fonts/font = SubResource( 6 )
text = "WRAP
IT UP"
align = 1
valign = 1
[node name="Player" parent="." groups=["start"] instance=ExtResource( 4 )]
position = Vector2( 0, 250 )
[node name="Candy" parent="." instance=ExtResource( 3 )]
position = Vector2( -450, 150 )
[node name="Candy3" parent="." instance=ExtResource( 3 )]
position = Vector2( -350, 450 )
[node name="Candy4" parent="." instance=ExtResource( 3 )]
position = Vector2( 200, 450 )

View file

@ -12,13 +12,12 @@ var music_que = []
export var wait_range := Vector2(10, 90)
var wait_clock := 0.0
var wait_time := 10.0
var music_ease := EaseMover.new(1.0)
var music_ease := EaseMover.new(1.0, -1)
func _ready():
set_refresh()
#print(dict)
music_player.connect("finished", self, "music_finished")
set_refresh()
randomize()
wait_clock = 4.0
@ -36,20 +35,15 @@ func _physics_process(delta):
if wait_clock <= 0:
music_play()
var s = music_ease.count(delta, Shared.is_arcade)
var s = music_ease.count(delta, !Shared.is_arcade)
if !music_ease.is_last:
var m = dict["music_music"]
var a = dict["music_arcade"]
m.volume_db = lerp(0.0, -30.0, s)
a.volume_db = lerp(-30.0, 0.0, s)
m.volume_db = lerp(-30.0, 0.0, s)
if music_ease.clock == 0.0:
if !m.playing: m.play(m.get_playback_position())
a.stop()
if music_ease.is_complete:
a.play()
m.stop()
elif music_ease.last == 0.0 and !m.playing:
m.play(m.get_playback_position())
func music_finished():
if !Shared.is_arcade:
@ -67,6 +61,10 @@ func music_play():
music_player.play()
func set_refresh(arg := false):
print("Audio.dict refresh")
is_refresh = arg
dict = {}
for i in Shared.get_all_children(self):
dict[str(get_path_to(i)).to_lower().replace("/", "_")] = i
if i is AudioStreamPlayer or i is AudioStreamPlayer2D:
dict[str(get_path_to(i)).to_lower().replace("/", "_")] = i
print("Audio.dict refresh: ", dict.keys())

View file

@ -1,4 +1,4 @@
[gd_scene load_steps=34 format=2]
[gd_scene load_steps=35 format=2]
[ext_resource path="res://src/autoload/Audio.gd" type="Script" id=1]
[ext_resource path="res://media/audio/sfx/coin1.wav" type="AudioStream" id=2]
@ -33,6 +33,7 @@
[ext_resource path="res://media/audio/sfx/jump1.wav" type="AudioStream" id=31]
[ext_resource path="res://media/audio/sfx/zap0.wav" type="AudioStream" id=32]
[ext_resource path="res://media/audio/music/arcade2.mp3" type="AudioStream" id=33]
[ext_resource path="res://media/audio/sfx/oneup1.wav" type="AudioStream" id=34]
[node name="Audio" type="Node"]
pause_mode = 2
@ -208,3 +209,7 @@ bus = "SFX"
[node name="Owie" type="AudioStreamPlayer" parent="Arcade"]
stream = ExtResource( 16 )
bus = "SFX"
[node name="Boot" type="AudioStreamPlayer" parent="Arcade"]
stream = ExtResource( 34 )
bus = "SFX"

View file

@ -13,8 +13,10 @@ var is_complete setget , get_is_complete
var is_less setget , get_is_less
var is_last setget , get_is_last
func _init(_time := time, _from := from, _to := to, _node := node):
func _init(_time := time, _clock := clock, _from := from, _to := to, _node := node):
time = _time
clock = _time if _clock < 0.0 else _clock
from = _from
to = _to
node = _node