From b7d6a0305f54e97966bf75141f9aba6490204fe0 Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Sat, 1 Oct 2022 22:39:27 +0200 Subject: [PATCH] Create cursor and grid --- project.godot | 53 +++++++++++++++++++++++ src/MainMenu.tscn | 34 +++++++++------ src/scenes/Play Area.gd | 85 +++++++++++++++++++++++++++++++++++++ src/scenes/Play Area.tscn | 51 ++++++---------------- src/scenes/tiles/Tiles.gd | 38 +++++++++++++++++ src/scenes/tiles/Tiles.tscn | 26 ++++++++++++ 6 files changed, 235 insertions(+), 52 deletions(-) create mode 100644 src/scenes/Play Area.gd create mode 100644 src/scenes/tiles/Tiles.gd create mode 100644 src/scenes/tiles/Tiles.tscn diff --git a/project.godot b/project.godot index 2362fbe..fbb3e6b 100644 --- a/project.godot +++ b/project.godot @@ -21,6 +21,59 @@ window/size/width=1600 window/size/height=900 window/size/resizable=false +[input] + +p1_up={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":87,"unicode":0,"echo":false,"script":null) + ] +} +p1_right={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":68,"unicode":0,"echo":false,"script":null) + ] +} +p1_down={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":83,"unicode":0,"echo":false,"script":null) + ] +} +p1_left={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":65,"unicode":0,"echo":false,"script":null) + ] +} +p1_rotate={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":32,"unicode":0,"echo":false,"script":null) + ] +} +p2_up={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":16777232,"unicode":0,"echo":false,"script":null) + ] +} +p2_right={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":16777233,"unicode":0,"echo":false,"script":null) + ] +} +p2_down={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":16777234,"unicode":0,"echo":false,"script":null) + ] +} +p2_left={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":16777231,"unicode":0,"echo":false,"script":null) + ] +} +p2_rotate={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":16777221,"unicode":0,"echo":false,"script":null) + ] +} + [physics] common/enable_pause_aware_picking=true diff --git a/src/MainMenu.tscn b/src/MainMenu.tscn index f5dda17..3136f7c 100644 --- a/src/MainMenu.tscn +++ b/src/MainMenu.tscn @@ -10,29 +10,35 @@ script = ExtResource( 1 ) [node name="Background" parent="." instance=ExtResource( 2 )] -modulate = Color( 0, 0.294118, 0.196078, 1 ) +modulate = Color( 0, 0.31, 0, 1 ) -[node name="Play Area" parent="." instance=ExtResource( 3 )] -self_modulate = Color( 0, 0.34902, 0.329412, 1 ) +[node name="Left Play Area" parent="." instance=ExtResource( 3 )] +modulate = Color( 1, 0.7, 0.7, 1 ) +position = Vector2( 400, 450 ) +player = "p1" -[node name="Tiles" parent="Play Area" index="0"] -self_modulate = Color( 0, 0.34902, 0.329412, 1 ) +[node name="Spinner" parent="Left Play Area/Tiles" index="0"] +modulate = Color( 1, 0.5, 0.5, 1 ) -[node name="Atom" parent="Play Area/Atoms" index="0"] -modulate = Color( 0, 1, 1, 1 ) +[node name="Right Play Area" parent="." instance=ExtResource( 3 )] +modulate = Color( 0.7, 0.7, 1, 1 ) +position = Vector2( 1200, 450 ) +player = "p2" -[node name="Spinner" parent="Play Area" index="2"] -modulate = Color( 0, 1, 0.658824, 1 ) - -[node name="Label" parent="Play Area" index="3"] -modulate = Color( 0, 1, 0.658824, 1 ) +[node name="Spinner" parent="Right Play Area/Tiles" index="0"] +modulate = Color( 0.5, 0.5, 1, 1 ) [node name="Minimap" parent="." instance=ExtResource( 4 )] +position = Vector2( 0, 16 ) [node name="Atom" parent="Minimap" index="0"] -modulate = Color( 0, 1, 0.658824, 1 ) +modulate = Color( 1, 0.7, 0.7, 1 ) + +[node name="Atom2" parent="Minimap" index="1"] +modulate = Color( 0.7, 0.7, 1, 1 ) [node name="Timer" parent="." instance=ExtResource( 5 )] -[editable path="Play Area"] +[editable path="Left Play Area"] +[editable path="Right Play Area"] [editable path="Minimap"] diff --git a/src/scenes/Play Area.gd b/src/scenes/Play Area.gd new file mode 100644 index 0000000..e3a65e1 --- /dev/null +++ b/src/scenes/Play Area.gd @@ -0,0 +1,85 @@ +extends Sprite + + +const TILE_SIZE = 86 + +var cursor_pos setget set_cursor_pos +func set_cursor_pos(val): + var shape = $Tiles.shape + #warning-ignore:integer_division + var offset_x = len(shape) / 2 - 1 + #warning-ignore:integer_division + var offset_y = len(shape[0]) / 2 - 1 + $Tiles/Spinner.position = Vector2((val.x - offset_x) * TILE_SIZE, (val.y - offset_y) * TILE_SIZE) + cursor_pos = val + + +func cursor_would_collide(top_left: Vector2): + var shape = $Tiles.shape + var size_x = len(shape) - 1 + var size_y = len(shape[0]) - 1 + return \ + top_left.x < 0 || \ + top_left.y < 0 || \ + top_left.x >= size_x || \ + top_left.y >= size_y || \ + shape[top_left.x][top_left.y] == " " || \ + shape[top_left.x+1][top_left.y] == " " || \ + shape[top_left.x][top_left.y+1] == " " || \ + shape[top_left.x+1][top_left.y+1] == " " + +func cursor_init(): + var shape = $Tiles.shape + var y = 0 + while y < len(shape): + var x = 0 + while x < len(shape[y]): + var new_pos = Vector2(x, y) + if not cursor_would_collide(new_pos): + print("Found location for cursor @ %d, %d" % [new_pos.x, new_pos.y]) + set_cursor_pos(new_pos) + return + x += 1 + y += 1 + push_error("Could not find a valid position for the cursor") + get_tree().quit() + +func cursor_up(): + cursor_move(Vector2(cursor_pos.x, cursor_pos.y - 1)) + +func cursor_right(): + cursor_move(Vector2(cursor_pos.x + 1, cursor_pos.y)) + +func cursor_down(): + cursor_move(Vector2(cursor_pos.x, cursor_pos.y + 1)) + +func cursor_left(): + cursor_move(Vector2(cursor_pos.x - 1, cursor_pos.y)) + +func cursor_move(dest): + if not cursor_would_collide(dest): + set_cursor_pos(dest) + else: + print("Cursor collided @ %d, %d" % [dest.x, dest.y]) + +func cursor_rotate(): + pass + + +export(String) var player + +func _process(_delta): + if Input.is_action_just_pressed(player + "_up"): + cursor_up() + if Input.is_action_just_pressed(player + "_right"): + cursor_right() + if Input.is_action_just_pressed(player + "_down"): + cursor_down() + if Input.is_action_just_pressed(player + "_left"): + cursor_left() + if Input.is_action_just_pressed(player + "_rotate"): + cursor_rotate() + + +func _ready(): + cursor_init() diff --git a/src/scenes/Play Area.tscn b/src/scenes/Play Area.tscn index 30fc8e9..76b9ef0 100644 --- a/src/scenes/Play Area.tscn +++ b/src/scenes/Play Area.tscn @@ -1,26 +1,10 @@ -[gd_scene load_steps=9 format=2] +[gd_scene load_steps=8 format=2] [ext_resource path="res://src/sprites/huge-atom.png" type="Texture" id=1] -[ext_resource path="res://src/sprites/grid-tile.png" type="Texture" id=2] -[ext_resource path="res://src/sprites/atom.png" type="Texture" id=3] +[ext_resource path="res://src/scenes/Play Area.gd" type="Script" id=2] [ext_resource path="res://src/sprites/spinner.png" type="Texture" id=4] [ext_resource path="res://src/fonts/Xolonium-Bold.ttf" type="DynamicFontData" id=5] - -[sub_resource type="TileSet" id=1] -0/name = "grid-tile.png 0" -0/texture = ExtResource( 2 ) -0/tex_offset = Vector2( 0, 0 ) -0/modulate = Color( 1, 1, 1, 1 ) -0/region = Rect2( 0, 0, 85, 85 ) -0/tile_mode = 0 -0/occluder_offset = Vector2( 0, 0 ) -0/navigation_offset = Vector2( 0, 0 ) -0/shape_offset = Vector2( 0, 0 ) -0/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) -0/shape_one_way = false -0/shape_one_way_margin = 0.0 -0/shapes = [ ] -0/z_index = 0 +[ext_resource path="res://src/scenes/tiles/Tiles.tscn" type="PackedScene" id=6] [sub_resource type="DynamicFont" id=2] size = 48 @@ -30,24 +14,8 @@ font_data = ExtResource( 5 ) default_font = SubResource( 2 ) [node name="Play Area" type="Sprite"] -position = Vector2( 400, 450 ) texture = ExtResource( 1 ) - -[node name="Tiles" type="TileMap" parent="."] -tile_set = SubResource( 1 ) -cell_size = Vector2( 86, 86 ) -format = 1 -tile_data = PoolIntArray( -131074, 0, 0, -131073, 0, 0, -196608, 0, 0, -196607, 0, 0, -65539, 0, 0, -65538, 0, 0, -65537, 0, 0, -131072, 0, 0, -131071, 0, 0, -131070, 0, 0, -3, 0, 0, -2, 0, 0, -1, 0, 0, -65536, 0, 0, -65535, 0, 0, -65534, 0, 0, 65533, 0, 0, 65534, 0, 0, 65535, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 131069, 0, 0, 131070, 0, 0, 131071, 0, 0, 65536, 0, 0, 65537, 0, 0, 65538, 0, 0, 196606, 0, 0, 196607, 0, 0, 131072, 0, 0, 131073, 0, 0 ) - -[node name="Atoms" type="Node2D" parent="."] - -[node name="Atom" type="Sprite" parent="Atoms"] -position = Vector2( 43, -215 ) -texture = ExtResource( 3 ) - -[node name="Spinner" type="Sprite" parent="."] -position = Vector2( -87, -173 ) -texture = ExtResource( 4 ) +script = ExtResource( 2 ) [node name="Label" type="Label" parent="."] anchor_left = 0.5 @@ -55,8 +23,15 @@ anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 margin_left = -407.0 -margin_top = -32.0 +margin_top = -8.0 margin_right = -335.0 -margin_bottom = -342.0 +margin_bottom = 50.0 theme = SubResource( 3 ) text = "32" +align = 1 +valign = 2 + +[node name="Tiles" parent="." instance=ExtResource( 6 )] + +[node name="Spinner" type="Sprite" parent="Tiles"] +texture = ExtResource( 4 ) diff --git a/src/scenes/tiles/Tiles.gd b/src/scenes/tiles/Tiles.gd new file mode 100644 index 0000000..0257c66 --- /dev/null +++ b/src/scenes/tiles/Tiles.gd @@ -0,0 +1,38 @@ +extends TileMap + + +var shape setget set_shape + + +func set_shape(val): + + var size = len(val) + + clear() + var offset = int(size / 2) + var y = - offset + for row in val: + var x = - offset + for col in row: + if col != " ": + set_cell(x, y, 0) + x += 1 + y += 1 + + var rescale_to = clamp(5 / float(size), 0, 1) + scale = Vector2(rescale_to, rescale_to) + shape = val + + +const TEST = [ + "OOOOOO", + "OOOOOO", + "OO OO", + "OO OO", + "OOOOOO", + "OOOOOO", +] + + +func _ready(): + set_shape(TEST) diff --git a/src/scenes/tiles/Tiles.tscn b/src/scenes/tiles/Tiles.tscn new file mode 100644 index 0000000..804a1be --- /dev/null +++ b/src/scenes/tiles/Tiles.tscn @@ -0,0 +1,26 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://src/sprites/grid-tile.png" type="Texture" id=1] +[ext_resource path="res://src/scenes/tiles/Tiles.gd" type="Script" id=2] + +[sub_resource type="TileSet" id=1] +0/name = "grid-tile.png 0" +0/texture = ExtResource( 1 ) +0/tex_offset = Vector2( 0, 0 ) +0/modulate = Color( 1, 1, 1, 1 ) +0/region = Rect2( 0, 0, 85, 85 ) +0/tile_mode = 0 +0/occluder_offset = Vector2( 0, 0 ) +0/navigation_offset = Vector2( 0, 0 ) +0/shape_offset = Vector2( 0, 0 ) +0/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 ) +0/shape_one_way = false +0/shape_one_way_margin = 0.0 +0/shapes = [ ] +0/z_index = 0 + +[node name="Tiles" type="TileMap"] +tile_set = SubResource( 1 ) +cell_size = Vector2( 86, 86 ) +format = 1 +script = ExtResource( 2 )