1
0
Fork 0

convert units as rigid body

This commit is contained in:
Michaël Lemaire 2022-10-31 11:59:41 +01:00
parent 2b94671759
commit 4af7630109
4 changed files with 35 additions and 13 deletions

View File

@ -17,3 +17,8 @@ static func get_nearest(from: Node2D, nodes: Array[Node], predicate: Callable) -
static func jitter(pos: Vector2, min_dist = 0.0, max_dist = 100.0) -> Vector2:
# TODO uniform distribution
return pos + Vector2.from_angle(randf_range(0.0, PI * 2.0)) * randf_range(min_dist, max_dist)
# Acceleration toward a value
static func accel(current: Variant, target: Variant, accel: float, delta: float) -> Variant:
var diff = target - current
return current + min(diff * accel * delta, diff * accel * 0.1)

View File

@ -18,12 +18,13 @@ signal promoted
_check_compose()
@export var hitpoints := 1
@export var rotation_offset := 0.0
var chief_ref := WeakRef.new()
var target_reached = true
var target_position := Vector2.ZERO
var target_linear_velocity := Vector2.ZERO
var target_angular_velocity := 0.0
var target_reached := false
var is_chief := false
var subordinates := 0
@ -39,16 +40,21 @@ func _compose():
if player.code and not Engine.is_editor_hint():
add_to_group("player:" + player.code)
func _physics_process(delta):
if not target_reached:
# TODO use position instead of global_position, once parented to battlefield
var previous = global_position
global_position += (target_position - global_position).normalized() * 100.0 * delta
var diff = global_position - previous
if diff.length() > 0.01:
$sprite.rotation = rotation_offset + diff.angle()
if global_position.distance_to(target_position) < 5.0:
func _process(delta):
if Engine.is_editor_hint():
return
if target_reached:
target_linear_velocity = Vector2.ZERO
else:
var current_position = self.global_position
var diff = target_position - current_position
if diff.length() > 5.0:
target_linear_velocity = diff.normalized() * clamp(diff.length() * 0.1, 1.0, 10.0) * 10.0
else:
target_reached = true
self.linear_velocity = Tools.accel(self.linear_velocity, target_linear_velocity, 0.4, delta)
func move_to(pos: Vector2):
if pos != target_position:

View File

@ -1,8 +1,14 @@
[gd_scene load_steps=2 format=3 uid="uid://bft45rcp7v3a6"]
[gd_scene load_steps=3 format=3 uid="uid://bft45rcp7v3a6"]
[ext_resource type="Script" path="res://core/unit.gd" id="1_1i367"]
[node name="unit" type="Node2D" groups=["unit"]]
[sub_resource type="CircleShape2D" id="CircleShape2D_n7nby"]
[node name="unit" type="RigidBody2D" groups=["unit"]]
script = ExtResource("1_1i367")
[node name="shape" type="CollisionShape2D" parent="."]
shape = SubResource("CircleShape2D_n7nby")
disabled = true
[node name="sprite" type="Sprite2D" parent="."]

View File

@ -74,6 +74,11 @@ config/icon="res://tac/assets/icon.png"
window/size/viewport_width=1280
window/size/viewport_height=720
[physics]
2d/default_gravity=0.0
2d/default_gravity_vector=Vector2(0, 0)
[rendering]
renderer/rendering_method="mobile"