online multiplayer chess game (note server currently down)
-rw-r--r--Globals.gd4
-rw-r--r--Grid.gd114
-rw-r--r--Piece.gd49
-rw-r--r--Square.gd10
-rw-r--r--Square.tscn13
-rw-r--r--World.tscn1
-rw-r--r--circle.png3
-rw-r--r--circle.png.import35
-rw-r--r--project.godot30
9 files changed, 186 insertions, 73 deletions
diff --git a/Globals.gd b/Globals.gd
index f448464..1c609fa 100644
--- a/Globals.gd
+++ b/Globals.gd
@@ -1,5 +1,3 @@
extends Node
-var piece_size
-
-var last_clicked \ No newline at end of file
+var grid
diff --git a/Grid.gd b/Grid.gd
index 73c9def..ab7a5e6 100644
--- a/Grid.gd
+++ b/Grid.gd
@@ -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)
diff --git a/Piece.gd b/Piece.gd
index b132395..45d8d1c 100644
--- a/Piece.gd
+++ b/Piece.gd
@@ -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)
diff --git a/Square.gd b/Square.gd
index b2b7b4c..e5dc2aa 100644
--- a/Square.gd
+++ b/Square.gd
@@ -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"]
diff --git a/World.tscn b/World.tscn
index 3e33970..cb50f55 100644
--- a/World.tscn
+++ b/World.tscn
@@ -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 )