From 384f6756fbafced4bbcfbfbc635617b36de03a7b Mon Sep 17 00:00:00 2001 From: Hamcha Date: Sun, 12 May 2019 23:37:44 +0200 Subject: [PATCH] Add opponent's hand --- Scenes/Board.tscn | 30 +++++++++++++++++++++++---- Scenes/Components/Card.gd | 16 +++++++++++++-- Scenes/Components/Stack.tscn | 22 ++++++++++++++------ Scenes/Global/Remote.gd | 2 -- Scenes/Scripts/Board.gd | 39 ++++++++++++++++++++++++++---------- Scenes/Scripts/BoardUI.gd | 1 + 6 files changed, 85 insertions(+), 25 deletions(-) diff --git a/Scenes/Board.tscn b/Scenes/Board.tscn index a4e085b..409dad7 100644 --- a/Scenes/Board.tscn +++ b/Scenes/Board.tscn @@ -22,9 +22,12 @@ transform = Transform( 1, 0, 0, 0, 0.224381, 0.974502, 0, -0.974502, 0.224381, 0 fov = 50.0 script = ExtResource( 2 ) -[node name="Hand" type="Spatial" parent="Camera"] +[node name="PlayerHand" type="Spatial" parent="Camera"] transform = Transform( 0.4, 0, 0, 0, 2.98023e-008, -0.4, 0, 0.4, 2.98023e-008, 0, -0.6, -1.3 ) +[node name="OppHand" type="Spatial" parent="Camera"] +transform = Transform( 0.3, 0, 0, 0, -1.31134e-008, 0.3, 0, -0.3, -1.31134e-008, -2.48878e-016, 0.629771, -1.3 ) + [node name="MeshInstance" type="MeshInstance" parent="."] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.001, 0 ) mesh = SubResource( 2 ) @@ -42,7 +45,7 @@ faceDown = true [node name="P1Graveyard" parent="Cards" instance=ExtResource( 5 )] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -5.23371, 0, 3.52858 ) -title = "Graveyard" +title = "Discard pile" zoneName = "player1.graveyard" [node name="P1Banished" parent="Cards" instance=ExtResource( 5 )] @@ -50,17 +53,36 @@ transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -5.23371, 0, 2.40401 ) title = "Banished" zoneName = "player1.banished" +[node name="P2Deck" parent="Cards" instance=ExtResource( 5 )] +transform = Transform( -1, 0, -8.74228e-008, 0, 1, 0, 8.74228e-008, 0, -1, 4.309, 0, -3.529 ) +title = "Deck" +zoneName = "player2.deck" +faceDown = true + +[node name="P2Graveyard" parent="Cards" instance=ExtResource( 5 )] +transform = Transform( -1, 0, -8.74228e-008, 0, 1, 0, 8.74228e-008, 0, -1, 5.234, 0, -3.529 ) +title = "Discard pile" +zoneName = "player2.graveyard" + +[node name="P2Banished" parent="Cards" instance=ExtResource( 5 )] +transform = Transform( -1, 0, -8.74228e-008, 0, 1, 0, 8.74228e-008, 0, -1, 5.234, 0, -2.404 ) +title = "Banished" +zoneName = "player2.banished" + [node name="P1Problem" parent="Cards" instance=ExtResource( 5 )] -transform = Transform( -4.37114e-008, 0, -1, 0, 1, 0, 1, 0, -4.37114e-008, 2.5, 0, 0 ) +transform = Transform( -6.55671e-008, 0, -1.5, 0, 1, 0, 1.5, 0, -6.55671e-008, 2.5, 0, 0 ) title = "Problem" zoneName = "player1.problem" [node name="P2Problem" parent="Cards" instance=ExtResource( 5 )] -transform = Transform( -4.37114e-008, 0, 1, 0, 1, 0, -1, 0, -4.37114e-008, -2.5, 0, 0 ) +transform = Transform( -6.55671e-008, 0, 1.5, 0, 1, 0, -1.5, 0, -6.55671e-008, -2.5, 0, 0 ) title = "Problem" zoneName = "player2.problem" [connection signal="card_picked" from="Cards/P1Deck" to="." method="_card_picked_zone" binds= [ "player1.deck" ]] [connection signal="card_picked" from="Cards/P1Graveyard" to="." method="_card_picked_zone" binds= [ "player1.graveyard" ]] [connection signal="card_picked" from="Cards/P1Banished" to="." method="_card_picked_zone" binds= [ "player1.banished" ]] +[connection signal="card_picked" from="Cards/P2Deck" to="." method="_card_picked_zone" binds= [ "player1.deck" ]] +[connection signal="card_picked" from="Cards/P2Graveyard" to="." method="_card_picked_zone" binds= [ "player1.graveyard" ]] +[connection signal="card_picked" from="Cards/P2Banished" to="." method="_card_picked_zone" binds= [ "player1.banished" ]] [connection signal="card_picked" from="Cards/P1Problem" to="." method="_card_picked_zone" binds= [ "player1.graveyard" ]] [connection signal="card_picked" from="Cards/P2Problem" to="." method="_card_picked_zone" binds= [ "player1.graveyard" ]] diff --git a/Scenes/Components/Card.gd b/Scenes/Components/Card.gd index ae3b279..993e435 100644 --- a/Scenes/Components/Card.gd +++ b/Scenes/Components/Card.gd @@ -68,12 +68,18 @@ func _input_event(camera, event, click_position, click_normal, shape_idx): var denom := Vector3.UP.dot(direction) var t: float = (-camera.transform.origin).dot(Vector3.UP) / denom; translation = origin + direction * t + # Rotate depending on what side of the board it is + if translation.z < 0: + rotation.y = PI + else: + rotation.y = 0 # Right click if event is InputEventMouseButton and event.pressed and event.button_index == BUTTON_RIGHT: # Show menu emit_signal("card_menu") # Left click - if event is InputEventMouseButton and event.button_index == BUTTON_LEFT: + if event is InputEventMouseButton and event.button_index == BUTTON_LEFT and clickable(): + # Update click status clicked = event.pressed @@ -92,6 +98,12 @@ func _input_event(camera, event, click_position, click_normal, shape_idx): animation.play("tap") exhausted = true +func clickable() -> bool: + #TODO Better control over if a card can be taken or not + if playerID == 0: + return true + return false + func reset_transform(): $CardModel.translation = Vector3.ZERO $CardModel.rotation = Vector3.ZERO @@ -134,6 +146,7 @@ func _card_fetched(result: int, response_code: int, headers: PoolStringArray, bo assert(result == HTTPRequest.RESULT_SUCCESS) var img = Image.new() var err = img.load_jpg_from_buffer(body) + assert(err == OK) # Depending if card pic is a problem or not, rotate the card image mesh if img.get_width() > img.get_height(): cardImage.scale = Vector3(0.45,1,0.319) @@ -141,7 +154,6 @@ func _card_fetched(result: int, response_code: int, headers: PoolStringArray, bo else: cardImage.scale = Vector3(0.319,1,0.45) cardImage.rotation.y = 0 - assert(err == OK) var mat = cardMat.duplicate() texture = ImageTexture.new() texture.create_from_image(img) diff --git a/Scenes/Components/Stack.tscn b/Scenes/Components/Stack.tscn index 2b88ec3..127f56c 100644 --- a/Scenes/Components/Stack.tscn +++ b/Scenes/Components/Stack.tscn @@ -1,10 +1,18 @@ -[gd_scene load_steps=6 format=2] +[gd_scene load_steps=7 format=2] [ext_resource path="res://Scenes/Components/Stack.gd" type="Script" id=1] [sub_resource type="BoxShape" id=1] extents = Vector3( 0.424389, 0.024053, 0.546632 ) +[sub_resource type="SpatialMaterial" id=5] +flags_transparent = true +flags_unshaded = true +flags_vertex_lighting = true +flags_do_not_receive_shadows = true +flags_disable_ambient_light = true +albedo_color = Color( 1, 1, 1, 0.392157 ) + [sub_resource type="DynamicFontData" id=2] font_path = "res://UIAssets/Fonts/Catamaran-Bold.ttf" @@ -24,16 +32,18 @@ transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.0239744, 0 ) shape = SubResource( 1 ) [node name="CSGBox" type="CSGBox" parent="."] -transform = Transform( 0.85598, 0, 0, 0, 1, 0, 0, 0, 0.871019, 0, 0, 0 ) -width = 0.946586 +transform = Transform( 0.802373, 0, 0, 0, 1, 0, 0, 0, 0.81647, 0, 0, 0 ) +width = 0.85 height = 0.002 -depth = 1.18809 +depth = 1.15 +material = SubResource( 5 ) [node name="CSGBox2" type="CSGBox" parent="CSGBox"] +transform = Transform( 1.00679, 0, 0, 0, 1.00679, 0, 0, 0, 1.00679, 0, 0, 0 ) operation = 2 -width = 0.891339 +width = 0.8 height = 0.102173 -depth = 1.1406 +depth = 1.1 [node name="CSGBox3" type="CSGBox" parent="CSGBox"] operation = 2 diff --git a/Scenes/Global/Remote.gd b/Scenes/Global/Remote.gd index 1838a93..5ca400d 100644 --- a/Scenes/Global/Remote.gd +++ b/Scenes/Global/Remote.gd @@ -16,7 +16,6 @@ func fetch(url: String, cbObj: Object, cbFn: String): var flen := file.get_len() var buf := file.get_buffer(flen) cbObj.call(cbFn, HTTPRequest.RESULT_SUCCESS, 200, [], buf) - print("CACHED") return var req := HTTPRequest.new() add_child(req) @@ -31,6 +30,5 @@ func _request_completed(result: int, response_code: int, headers: PoolStringArra file.open(res_file_name(url), File.WRITE) file.store_buffer(body) file.close() - print("SAVED") # Call callback cbObj.call(cbFn, result, response_code, headers, body) \ No newline at end of file diff --git a/Scenes/Scripts/Board.gd b/Scenes/Scripts/Board.gd index bc24462..fbf14d2 100644 --- a/Scenes/Scripts/Board.gd +++ b/Scenes/Scripts/Board.gd @@ -5,7 +5,8 @@ class_name Board onready var CardTemplate := preload("res://Scenes/Components/Card.tscn") onready var camera := $Camera -onready var hand := $Camera/Hand +onready var hand := $Camera/PlayerHand +onready var oppHand := $Camera/OppHand onready var ui := $BoardUI onready var cards := $Cards @@ -19,10 +20,13 @@ var mouseOrigin: Vector2 var lastCameraTransform: Transform onready var zones: Dictionary = { - "player1.deck": $Cards/Deck, - "player1.banished": $Cards/Banished, - "player1.graveyard": $Cards/Graveyard, + "player1.deck": $Cards/P1Deck, + "player1.banished": $Cards/P1Banished, + "player1.graveyard": $Cards/P1Graveyard, "player1.problem": $Cards/P1Problem, + "player2.deck": $Cards/P2Deck, + "player2.banished": $Cards/P2Banished, + "player2.graveyard": $Cards/P2Graveyard, "player2.problem": $Cards/P2Problem } @@ -34,7 +38,13 @@ func _ready(): add_card("eo11", 0, true) add_card("pr168", 0, true) add_card("ad176", 0, true) - reorder_hand() + + add_card("ff33", 1, true) + add_card("ff33", 1, true) + add_card("ff33", 1, true) + add_card("ff33", 1, true) + reorder_hand(0) + reorder_hand(1) func _input(event: InputEvent): # Camera zoom @@ -139,7 +149,7 @@ func reparent(object: Node, from: Node, to: Node): from.remove_child(object) to.add_child(object) object.set_owner(to) - reorder_hand() + reorder_hand(0) func add_card(cardID: String, playerID: int, inHand: bool): var card := CardTemplate.instance() @@ -155,8 +165,11 @@ func add_card(cardID: String, playerID: int, inHand: bool): card.connect("card_dropped_anim", self, "check_hand_drop", [card]) card.connect("card_menu", ui, "show_card_menu", [card]) if inHand: - # TODO if player != me, put in opponent's hand - hand.add_child(card) + # TODO support for >2 players + if playerID == 0: + hand.add_child(card) + else: + oppHand.add_child(card) else: cards.add_child(card) @@ -164,15 +177,19 @@ func check_hand_drop(card: Card): # Re-order hand as soon as the animation is over if card.inHand: card.reset_transform() - reorder_hand() + reorder_hand(0) const MAX_CARD_DISTANCE := 0.5 const HAND_SCREEN_PERC := 0.6 const CARD_ROTATION := 0.03 const UNITSPERPX := 0.003 -func reorder_hand(): - var cardsInHand: Array = hand.get_children() +func reorder_hand(playerID: int): + var cardsInHand: Array = [] + if playerID == 0: + cardsInHand = hand.get_children() + else: + cardsInHand = oppHand.get_children() cardsInHand.sort_custom(TransformSorter, "sort") var size := cardsInHand.size() diff --git a/Scenes/Scripts/BoardUI.gd b/Scenes/Scripts/BoardUI.gd index 462b3ae..06ceae4 100644 --- a/Scenes/Scripts/BoardUI.gd +++ b/Scenes/Scripts/BoardUI.gd @@ -6,6 +6,7 @@ onready var cardPic = $CardZoom var menu: PopupMenu = null func _card_selected(card: Card): + # TODO Hide card if it shouldn't be visible cardPic.texture = card.texture animation.play("fade ui card")