online multiplayer chess game (note server currently down)
| -rw-r--r-- | Globals.gd | 4 | ||||
| -rw-r--r-- | Grid.gd | 114 | ||||
| -rw-r--r-- | Piece.gd | 49 | ||||
| -rw-r--r-- | Square.gd | 10 | ||||
| -rw-r--r-- | Square.tscn | 13 | ||||
| -rw-r--r-- | World.tscn | 1 | ||||
| -rw-r--r-- | circle.png | 3 | ||||
| -rw-r--r-- | circle.png.import | 35 | ||||
| -rw-r--r-- | project.godot | 30 |
9 files changed, 186 insertions, 73 deletions
@@ -1,5 +1,3 @@ extends Node -var piece_size - -var last_clicked
\ No newline at end of file +var grid @@ -4,6 +4,7 @@ export var PIECE_SET = "california" export(Color) var board_color1 = Color.white export(Color) var board_color2 = Color.black +export(Color) var overlay_color = Color(0.2, 0.345098, 0.188235, 0.592157) onready var background = $Background @@ -16,6 +17,18 @@ const piece_size = Vector2(100, 100) var matrix = [] var background_matrix = [] +var last_clicked + + +func _ready(): + Globals.grid = self + init_board() + init_matrix() + + +func _exit_tree(): + Globals.grid = null + func init_matrix(): for i in range(8): @@ -29,6 +42,8 @@ func instance_piece_at_position(position: Vector2, name: String, sprite: String, var piece = Piece.instance() piece.sprite = piece.get_node("Sprite") piece.sprite.texture = load(sprite) + piece.real_position = position + position *= piece_size # piece.sprite.flip_v = not white # this is not shogi you eejit if white: position -= Vector2(0, piece_size.y) # boost it up @@ -48,12 +63,14 @@ func init_board(): var square = Square.instance() square.rect_size = piece_size square.rect_position = Vector2(i, j) * piece_size - square.name = "square_" + str(i) + "_" + str(j) + square.realname = "square_" + str(i) + "_" + str(j) square.color = board_color1 if (i + j) % 2 == 0 else board_color2 square.real_position = Vector2(i, j) background.add_child(square) square.connect("clicked", self, "square_clicked") background_matrix[i].append(square) + print_matrix_pretty(background_matrix) + func add_pieces(): add_pawns() @@ -68,74 +85,50 @@ func add_pieces(): func add_pawns(): for i in range(8): matrix[1][i] = instance_piece_at_position( - Vector2(i, 1) * piece_size, "pawn", ASSETS_PATH + "bP.png", false + Vector2(i, 1), "pawn", ASSETS_PATH + "bP.png", false ) matrix[6][i] = instance_piece_at_position( - Vector2(i, 7) * piece_size, "pawn", ASSETS_PATH + "wP.png", true + Vector2(i, 7), "pawn", ASSETS_PATH + "wP.png", true ) func add_rooks(): - matrix[0][0] = instance_piece_at_position( - Vector2(0, 0) * piece_size, "rook", ASSETS_PATH + "bR.png", false - ) - matrix[0][7] = instance_piece_at_position( - Vector2(7, 0) * piece_size, "rook", ASSETS_PATH + "bR.png", false - ) - matrix[7][0] = instance_piece_at_position( - Vector2(0, 8) * piece_size, "rook", ASSETS_PATH + "wR.png", true - ) - matrix[7][7] = instance_piece_at_position( - Vector2(7, 8) * piece_size, "rook", ASSETS_PATH + "wR.png", true - ) + matrix[0][0] = instance_piece_at_position(Vector2(0, 0), "rook", ASSETS_PATH + "bR.png", false) + matrix[0][7] = instance_piece_at_position(Vector2(7, 0), "rook", ASSETS_PATH + "bR.png", false) + matrix[7][0] = instance_piece_at_position(Vector2(0, 8), "rook", ASSETS_PATH + "wR.png", true) + matrix[7][7] = instance_piece_at_position(Vector2(7, 8), "rook", ASSETS_PATH + "wR.png", true) func add_knights(): matrix[0][1] = instance_piece_at_position( - Vector2(1, 0) * piece_size, "knight", ASSETS_PATH + "bN.png", false + Vector2(1, 0), "knight", ASSETS_PATH + "bN.png", false ) matrix[0][6] = instance_piece_at_position( - Vector2(6, 0) * piece_size, "knight", ASSETS_PATH + "bN.png", false - ) - matrix[7][1] = instance_piece_at_position( - Vector2(1, 8) * piece_size, "knight", ASSETS_PATH + "wN.png", true - ) - matrix[7][6] = instance_piece_at_position( - Vector2(6, 8) * piece_size, "knight", ASSETS_PATH + "wN.png", true + Vector2(6, 0), "knight", ASSETS_PATH + "bN.png", false ) + matrix[7][1] = instance_piece_at_position(Vector2(1, 8), "knight", ASSETS_PATH + "wN.png", true) + matrix[7][6] = instance_piece_at_position(Vector2(6, 8), "knight", ASSETS_PATH + "wN.png", true) func add_bishops(): matrix[0][2] = instance_piece_at_position( - Vector2(2, 0) * piece_size, "bishop", ASSETS_PATH + "bB.png", false + Vector2(2, 0), "bishop", ASSETS_PATH + "bB.png", false ) matrix[0][5] = instance_piece_at_position( - Vector2(5, 0) * piece_size, "bishop", ASSETS_PATH + "bB.png", false - ) - matrix[7][2] = instance_piece_at_position( - Vector2(2, 8) * piece_size, "bishop", ASSETS_PATH + "wB.png", true - ) - matrix[7][5] = instance_piece_at_position( - Vector2(5, 8) * piece_size, "bishop", ASSETS_PATH + "wB.png", true + Vector2(5, 0), "bishop", ASSETS_PATH + "bB.png", false ) + matrix[7][2] = instance_piece_at_position(Vector2(2, 8), "bishop", ASSETS_PATH + "wB.png", true) + matrix[7][5] = instance_piece_at_position(Vector2(5, 8), "bishop", ASSETS_PATH + "wB.png", true) func add_queens(): - matrix[0][3] = instance_piece_at_position( - Vector2(3, 0) * piece_size, "queen", ASSETS_PATH + "bQ.png", false - ) - matrix[7][3] = instance_piece_at_position( - Vector2(3, 8) * piece_size, "queen", ASSETS_PATH + "wQ.png", true - ) + matrix[0][3] = instance_piece_at_position(Vector2(3, 0), "queen", ASSETS_PATH + "bQ.png", false) + matrix[7][3] = instance_piece_at_position(Vector2(3, 8), "queen", ASSETS_PATH + "wQ.png", true) func add_kings(): - matrix[0][4] = instance_piece_at_position( - Vector2(4, 0) * piece_size, "king", ASSETS_PATH + "bK.png", false - ) - matrix[7][4] = instance_piece_at_position( - Vector2(4, 8) * piece_size, "king", ASSETS_PATH + "wK.png", true - ) + matrix[0][4] = instance_piece_at_position(Vector2(4, 0), "king", ASSETS_PATH + "bK.png", false) + matrix[7][4] = instance_piece_at_position(Vector2(4, 8), "king", ASSETS_PATH + "wK.png", true) func print_matrix_pretty(mat = matrix): @@ -153,26 +146,29 @@ func print_matrix_pretty(mat = matrix): print("]") -func _ready(): - Globals.piece_size = piece_size - init_board() - init_matrix() +func check_for_circle(position: Vector2): + var circle = background_matrix[position.x][position.y].circle.visible + return circle func square_clicked(position: Vector2): var spot = matrix[position.y][position.x] - if !spot: - print("spot isnt null") - if !Globals.last_clicked: # its null - print("last clicked is null") + if !spot or !spot.white: + if !last_clicked: # its null return - print("last clicked wasnt null") - Globals.last_clicked.spot(position) - Globals.last_clicked = null - elif Globals.last_clicked != spot: - print("last clicked is different") - if Globals.last_clicked: - Globals.last_clicked.spot(null) - Globals.last_clicked = spot + if check_for_circle(position): + last_clicked.moveto(position) + last_clicked.clear_clicked() + last_clicked = null + elif last_clicked != spot: + if last_clicked: + last_clicked.clear_clicked() + last_clicked = spot spot.clicked() + +func clear_circles(): + for i in range(8): + for j in range(8): + var square = background_matrix[i][j] + square.set_circle(false) @@ -1,23 +1,56 @@ extends Node2D -class_name Piece +class_name Piece, "res://assets/california/wP.png" +var real_position = Vector2.ZERO var white := true var realname = "pawn" +var has_moved = false var sprite -onready var colorrect= $ColorRect +onready var colorrect = $ColorRect + + +func _ready(): + colorrect.color = Globals.grid.overlay_color + colorrect.rect_size = Globals.grid.piece_size + func move(newpos: Vector2): - global_position = newpos + has_moved = true + global_position = newpos * Globals.grid.piece_size + func clicked(): colorrect.show() + create_circles() print(realname, " was clicked") -func spot(position): + +func clear_clicked(): colorrect.hide() - if position: - print("spot ", position) + Globals.grid.clear_circles() -func _ready(): - colorrect.rect_size = Globals.piece_size
\ No newline at end of file + +func moveto(position): # called when already clicked, and clicked again + Globals.grid.matrix[real_position.y][real_position.x] = null + Globals.grid.matrix[position.y][position.x] = self + real_position = position + move(position) + + +func create_circles(): + # for motion + match realname: + "pawn": + var carray = [real_position - Vector2(0, 1)] + if !has_moved: + carray.append(real_position - Vector2(0, 2)) + set_circle(carray) + + +func set_circle(positions: Array): + for i in range(len(positions)): + var pos = positions[i] + if Globals.grid.matrix[pos.y][pos.x]: + continue + Globals.grid.background_matrix[pos.x][pos.y].set_circle(true) @@ -5,15 +5,23 @@ var real_position = Vector2() onready var area = $Squarea onready var areacollisionshape = $Squarea/CollisionShape2D +onready var circle = $Circle signal clicked(real_position) func _ready(): - areacollisionshape.global_position += Globals.piece_size / 2 + circle.position = Globals.grid.piece_size / 2 + circle.modulate = Globals.grid.overlay_color + circle.visible = false + areacollisionshape.global_position += Globals.grid.piece_size / 2 areacollisionshape.shape.extents = Vector2(rect_size.x / 2, rect_size.y / 2) func _on_Squarea_input_event(_viewport: Node, event: InputEvent, _shape_idx: int): if event is InputEventMouseButton: emit_signal("clicked", real_position) + + +func set_circle(boolean: bool): + circle.visible = boolean diff --git a/Square.tscn b/Square.tscn index f902da8..6018f08 100644 --- a/Square.tscn +++ b/Square.tscn @@ -1,6 +1,7 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=4 format=2] [ext_resource path="res://Square.gd" type="Script" id=1] +[ext_resource path="res://circle.png" type="Texture" id=2] [sub_resource type="RectangleShape2D" id=1] extents = Vector2( 381, 394.5 ) @@ -8,12 +9,22 @@ extents = Vector2( 381, 394.5 ) [node name="Square" type="ColorRect"] anchor_right = 1.0 anchor_bottom = 1.0 +margin_right = -800.0 +margin_bottom = -800.0 mouse_filter = 2 script = ExtResource( 1 ) [node name="Squarea" type="Area2D" parent="."] +collision_mask = 0 +monitoring = false +monitorable = false [node name="CollisionShape2D" type="CollisionShape2D" parent="Squarea"] +visible = false shape = SubResource( 1 ) +[node name="Circle" type="Sprite" parent="."] +position = Vector2( 9, 51 ) +texture = ExtResource( 2 ) + [connection signal="input_event" from="Squarea" to="." method="_on_Squarea_input_event"] @@ -8,5 +8,6 @@ script = ExtResource( 1 ) board_color1 = Color( 0.870588, 0.890196, 0.901961, 1 ) board_color2 = Color( 0.54902, 0.635294, 0.678431, 1 ) +overlay_color = Color( 0.2, 0.345098, 0.188235, 0.592157 ) [node name="Background" type="Node2D" parent="Grid"] diff --git a/circle.png b/circle.png new file mode 100644 index 0000000..fcb4253 --- /dev/null +++ b/circle.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f3dc7e9169eaadf4d2be8954be9f1433d22e4973197a71fb5b843044bb19c098 +size 190 diff --git a/circle.png.import b/circle.png.import new file mode 100644 index 0000000..2e2e79f --- /dev/null +++ b/circle.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/circle.png-10953cad44a8947fbdd4128a631e9e52.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://circle.png" +dest_files=[ "res://.import/circle.png-10953cad44a8947fbdd4128a631e9e52.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/project.godot b/project.godot index 02c87f1..28ac956 100644 --- a/project.godot +++ b/project.godot @@ -15,7 +15,7 @@ _global_script_classes=[ { "path": "res://Piece.gd" } ] _global_script_class_icons={ -"Piece": "" +"Piece": "res://assets/california/wP.png" } [application] @@ -33,6 +33,34 @@ window/size/height=800 window/stretch/mode="2d" window/stretch/aspect="keep" +[editor_plugins] + +enabled=PoolStringArray( ) + +[importer_defaults] + +texture={ +"compress/bptc_ldr": 0, +"compress/hdr_mode": 0, +"compress/lossy_quality": 0.7, +"compress/mode": 0, +"compress/normal_map": 0, +"detect_3d": false, +"flags/anisotropic": false, +"flags/filter": false, +"flags/mipmaps": false, +"flags/repeat": 0, +"flags/srgb": 2, +"process/HDR_as_SRGB": false, +"process/fix_alpha_border": true, +"process/invert_color": false, +"process/normal_map_invert_y": false, +"process/premult_alpha": false, +"size_limit": 0, +"stream": false, +"svg/scale": 1.0 +} + [rendering] environment/default_clear_color=Color( 0.301961, 0.301961, 0.301961, 1 ) |