diff --git a/src/arcade/Arcade.gd b/src/arcade/Arcade.gd index 9e8f7d8..3e45540 100644 --- a/src/arcade/Arcade.gd +++ b/src/arcade/Arcade.gd @@ -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") diff --git a/src/arcade/Arcade.tscn b/src/arcade/Arcade.tscn index a1a2acf..841bb88 100644 --- a/src/arcade/Arcade.tscn +++ b/src/arcade/Arcade.tscn @@ -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 ) diff --git a/src/arcade/ArcadeGame.gd b/src/arcade/ArcadeGame.gd index b8bb0a5..f9af872 100644 --- a/src/arcade/ArcadeGame.gd +++ b/src/arcade/ArcadeGame.gd @@ -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 diff --git a/src/arcade/Candy.gd b/src/arcade/Candy.gd index 82197ed..af52a5b 100644 --- a/src/arcade/Candy.gd +++ b/src/arcade/Candy.gd @@ -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 diff --git a/src/arcade/Candy.tscn b/src/arcade/Candy.tscn index a3d3fdc..1aab26b 100644 --- a/src/arcade/Candy.tscn +++ b/src/arcade/Candy.tscn @@ -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") diff --git a/src/arcade/Player.gd b/src/arcade/Player.gd index 5b0df52..9fd6ad4 100644 --- a/src/arcade/Player.gd +++ b/src/arcade/Player.gd @@ -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 diff --git a/src/arcade/Player.tscn b/src/arcade/Player.tscn index 6708422..50a90fd 100644 --- a/src/arcade/Player.tscn +++ b/src/arcade/Player.tscn @@ -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") diff --git a/src/arcade/Wrapper.gd b/src/arcade/Wrapper.gd new file mode 100644 index 0000000..e5271a7 --- /dev/null +++ b/src/arcade/Wrapper.gd @@ -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]) diff --git a/src/arcade/maps/0.tscn b/src/arcade/maps/0.tscn new file mode 100644 index 0000000..6d62d3f --- /dev/null +++ b/src/arcade/maps/0.tscn @@ -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 ) diff --git a/src/autoload/Audio.gd b/src/autoload/Audio.gd index f1d0c1a..b6e6100 100644 --- a/src/autoload/Audio.gd +++ b/src/autoload/Audio.gd @@ -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()) diff --git a/src/autoload/Audio.tscn b/src/autoload/Audio.tscn index b82b55a..c8572ed 100644 --- a/src/autoload/Audio.tscn +++ b/src/autoload/Audio.tscn @@ -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" diff --git a/src/class/EaseMover.gd b/src/class/EaseMover.gd index 6c2389d..1dbd345 100644 --- a/src/class/EaseMover.gd +++ b/src/class/EaseMover.gd @@ -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