summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-12-25 19:58:35 +0100
committermetamuffin <metamuffin@disroot.org>2024-12-25 19:58:35 +0100
commit64082ef5ca1bc6baeff23930d85e154e90b3c69f (patch)
treeaf290a98682ddee37a0076d11f31abe560abbcee
parentbd74a4e0c0e4e42717c2931eab3febfae219ac9c (diff)
downloadhurrycurry-64082ef5ca1bc6baeff23930d85e154e90b3c69f.tar
hurrycurry-64082ef5ca1bc6baeff23930d85e154e90b3c69f.tar.bz2
hurrycurry-64082ef5ca1bc6baeff23930d85e154e90b3c69f.tar.zst
map-specific two-handed mode
-rw-r--r--client/game.gd2
-rw-r--r--client/player/player.gd37
-rw-r--r--data/maps/village.yaml1
-rw-r--r--server/src/data/mod.rs3
4 files changed, 28 insertions, 15 deletions
diff --git a/client/game.gd b/client/game.gd
index 9502d2fc..6c152d8a 100644
--- a/client/game.gd
+++ b/client/game.gd
@@ -53,6 +53,7 @@ var tile_collide: Array = []
var tile_interact: Array = []
var maps: Array = []
var bot_algos: Array
+var hand_count = 0
var text_message_history: Array[TextMessage] = []
var join_state: JoinState = JoinState.SPECTATING
@@ -95,6 +96,7 @@ func handle_packet(p):
tile_interact = p["data"]["tile_interact"]
maps = p["data"]["maps"]
bot_algos = p["data"]["bot_algos"]
+ hand_count = p["data"]["hand_count"]
tile_index_by_name.clear()
for id in tile_names.size():
diff --git a/client/player/player.gd b/client/player/player.gd
index 39b9fb3e..031cba29 100644
--- a/client/player/player.gd
+++ b/client/player/player.gd
@@ -42,15 +42,14 @@ var marker_target = Vector3(0, 0, 0)
var clear_timer: Timer = Timer.new()
var hand = [null, null]
-var hand_base = [Node3D.new(), Node3D.new()]
+var hand_base
var character_idx: int
var is_customer: bool
var current_item_message = null
var _anim_angle: float = 0.0
-var hand_base_position = [DEFAULT_HAND_BASE_POSITION_LEFT, DEFAULT_HAND_BASE_POSITION_RIGHT]
-const DEFAULT_HAND_BASE_POSITION_BOTH: Vector3 = Vector3(0, .425, .4)
+const DEFAULT_HAND_BASE_POSITION_CENTER: Vector3 = Vector3(0, .425, .4)
const DEFAULT_HAND_BASE_POSITION_LEFT: Vector3 = Vector3(.3, .425, .4)
const DEFAULT_HAND_BASE_POSITION_RIGHT: Vector3 = Vector3(-.3, .425, .4)
@@ -64,12 +63,22 @@ func _init(_id: int, new_name: String, pos: Vector2, new_character_idx: int, new
game = new_game
username = new_name
- hand_base[0].name = "HandBaseLeft"
- hand_base[1].name = "HandBaseRight"
- hand_base[0].position = hand_base_position[0]
- hand_base[1].position = hand_base_position[1]
- movement_base.add_child(hand_base[0])
- movement_base.add_child(hand_base[1])
+ if game.hand_count == 1:
+ var center = Node3D.new()
+ center.name = "HandBaseCenter"
+ center.position = DEFAULT_HAND_BASE_POSITION_CENTER
+ hand_base = [center]
+ else:
+ var left = Node3D.new()
+ var right = Node3D.new()
+ left.name = "HandBaseLeft"
+ right.name = "HandBaseRight"
+ left.position = DEFAULT_HAND_BASE_POSITION_LEFT
+ right.position = DEFAULT_HAND_BASE_POSITION_RIGHT
+ hand_base = [left, right]
+
+ for h in hand_base:
+ movement_base.add_child(h)
movement_base.add_child(chat_bubble)
movement_base.add_child(item_bubble)
@@ -103,11 +112,11 @@ func update_username_tag(state):
func set_item(i: Item, h: int):
if hand[h] != null: hand[h].remove()
- if i != null:
- @warning_ignore("static_called_on_instance")
- hand_base_position[0] = DEFAULT_HAND_BASE_POSITION_LEFT - Vector3(0.,i.height() * 0.5, 0.)
- @warning_ignore("static_called_on_instance")
- hand_base_position[1] = DEFAULT_HAND_BASE_POSITION_RIGHT - Vector3(0.,i.height() * 0.5, 0.)
+ # if i != null:
+ # @warning_ignore("static_called_on_instance")
+ # hand_base_position[h] = DEFAULT_HAND_BASE_POSITION_LEFT - Vector3(0.,i.height() * 0.5, 0.)
+ # @warning_ignore("static_called_on_instance")
+ # hand_base_position[1] = DEFAULT_HAND_BASE_POSITION_RIGHT - Vector3(0.,i.height() * 0.5, 0.)
character.holding = i != null
hand[h] = i
if hand[h] != null: hand[h].owned_by = hand_base[h]
diff --git a/data/maps/village.yaml b/data/maps/village.yaml
index 9538ae9d..56cd49b0 100644
--- a/data/maps/village.yaml
+++ b/data/maps/village.yaml
@@ -17,6 +17,7 @@
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
score_baseline: 200
+hand_count: 2
map:
- "''''''''''''''~_''''''''''''''"
- "''''''''''''''__''''''''''''''"
diff --git a/server/src/data/mod.rs b/server/src/data/mod.rs
index 15fdfa6b..64f40217 100644
--- a/server/src/data/mod.rs
+++ b/server/src/data/mod.rs
@@ -73,6 +73,7 @@ pub struct MapDecl {
walkable: Vec<String>,
chef_spawn: char,
customer_spawn: char,
+ #[serde(default)] hand_count: Option<usize>,
#[serde(default)] entities: Vec<EntityDecl>,
#[serde(default)] tile_entities: HashMap<char, EntityDecl>,
#[serde(default)] score_baseline: i64,
@@ -314,7 +315,7 @@ pub fn build_data(
item_names,
demands,
tile_names,
- hand_count: 2,
+ hand_count: map_in.hand_count.unwrap_or(1),
},
Serverdata {
initial_map,