aboutsummaryrefslogtreecommitdiff
path: root/client/scripts/controllable_player.gd
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-06-23 20:05:28 +0200
committermetamuffin <metamuffin@disroot.org>2024-06-23 20:05:28 +0200
commit3885cbfae528608350804f704dba9c82fdbfd027 (patch)
tree384a37820cf43d1868493600a8e0566c78b9ab4a /client/scripts/controllable_player.gd
parent93221433e704e1c98cc84c55caefddb85c2d5717 (diff)
downloadhurrycurry-3885cbfae528608350804f704dba9c82fdbfd027.tar
hurrycurry-3885cbfae528608350804f704dba9c82fdbfd027.tar.bz2
hurrycurry-3885cbfae528608350804f704dba9c82fdbfd027.tar.zst
move files around
Diffstat (limited to 'client/scripts/controllable_player.gd')
-rw-r--r--client/scripts/controllable_player.gd110
1 files changed, 0 insertions, 110 deletions
diff --git a/client/scripts/controllable_player.gd b/client/scripts/controllable_player.gd
deleted file mode 100644
index 4c157349..00000000
--- a/client/scripts/controllable_player.gd
+++ /dev/null
@@ -1,110 +0,0 @@
-# Undercooked - a game about cooking
-# Copyright 2024 nokoe
-# Copyright 2024 metamuffin
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, version 3 of the License only.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see <https://www.gnu.org/licenses/>.
-#
-class_name ControllablePlayer
-extends Player
-
-
-const PLAYER_SPEED: float = 25.;
-
-var facing = Vector2(1, 0)
-var velocity_ = Vector2(0, 0)
-
-var target: Vector2i = Vector2i(0, 0)
-
-func _ready():
- var timer = Timer.new()
- timer.one_shot = false
- timer.wait_time = 1. / 25.
- add_child(timer)
- timer.start()
- timer.connect("timeout", func():
- Multiplayer.send_position(Vector2(position.x, position.z), rotation.y)
- )
-
-func _process(delta):
- var input = Vector2(Input.get_axis("left", "right"), Input.get_axis("forward", "backwards")).normalized()
- input = input.rotated(-game.camera.angle_target)
- position_anim = position_
- rotation_anim = rotation_
- if Input.is_action_pressed("interact") or Input.is_action_just_released("interact"):
- input *= 0
- else:
- target = Vector2i(
- int(floor(position.x + sin(rotation.y))),
- int(floor(position.z + cos(rotation.y)))
- )
- interact()
- update(delta, input)
- super(delta)
-
-func update(dt: float, input: Vector2):
- var direction = input.limit_length(1.);
- rotation.y = atan2(self.facing.x, self.facing.y);
- if direction.length() > 0.1:
- self.facing = direction + (self.facing - direction) * exp(-dt * 10.);
- self.velocity_ += direction * dt * PLAYER_SPEED;
- self.position_ += self.velocity_ * dt;
- self.velocity_ = self.velocity_ * exp(-dt * 5.);
- collide(dt);
-
-func collide(dt: float):
- for xo in range(-1,2):
- for yo in range(-1,2):
- var tile = Vector2i(xo, yo) + Vector2i(self.position_);
- if !Multiplayer.get_tile_collision(tile): continue
- tile = Vector2(tile)
- var d = aabb_point_distance(tile, tile + Vector2.ONE, self.position_);
- if d > PLAYER_SIZE: continue
- var h = 0.01;
- var d_sample_x = aabb_point_distance(tile, tile + Vector2.ONE, self.position_ + Vector2(h, 0));
- var d_sample_y = aabb_point_distance(tile, tile + Vector2.ONE, self.position_ + Vector2(0, h));
- var grad = (Vector2(d_sample_x - d, d_sample_y - d)) / h;
-
- self.position_ += (PLAYER_SIZE - d) * grad;
- self.velocity_ -= grad * grad.dot(self.velocity_)
-
- for player: Player in game.players.values():
- var diff = self.position_ - player.position_
- var d = diff.length()
- if d < 0.01: continue
- if d >= PLAYER_SIZE * 2: continue
- var norm = diff.normalized();
- var f = 100 / (1 + d)
- self.velocity_.x += norm.x * f * dt
- self.velocity_.y += norm.y * f * dt
-
-func aabb_point_distance(mi: Vector2, ma: Vector2, p: Vector2) -> float:
- return (p - p.clamp(mi, ma)).length()
-
-func update_position(new_position: Vector2, _new_rotation: float):
- if (new_position - position_).length() > 3.:
- position_ = new_position
-
-func interact():
- var tile_idx = str(target)
- var t: Floor = game.map.tile_by_pos.get(tile_idx)
- if t != null:
- game.marker.set_interactive(Multiplayer.get_tile_interactive(target))
- game.marker.visible = true
- game.marker_target = t.item_base.global_position
- if Input.is_action_just_pressed("interact"):
- Multiplayer.send_interact(target, true)
- t.interact()
- elif Input.is_action_just_released("interact"):
- Multiplayer.send_interact(target, false)
- else:
- game.marker.visible = false