This commit is contained in:
Segey Lapin
2021-12-24 23:56:10 +03:00
parent d401cf1090
commit f62e7fa720
113 changed files with 198252 additions and 412103 deletions

View File

@@ -1,13 +1,14 @@
extends Node
extends AIScriptModule
var raycast_queue = []
var blood = preload("res://scenes/decals/blood.tscn")
var blood_decal = preload("res://scenes/decals/blood1-decal.gltf")
var rnd
func _ready():
var root = get_parent()
func init():
var root = get_character()
var queue = [root]
var hurtboxes = []
assert(root.has_meta("skeleton"))
while queue.size() > 0:
var item = queue.pop_front()
if item is Area && item.name.ends_with("_hurt"):
@@ -20,7 +21,15 @@ func _ready():
rnd = RandomNumberGenerator.new()
rnd.randomize()
func area_hit(area, e):
var root = get_character()
if area.is_in_group("weapon_hit"):
var mo = area.get_meta("owner")
if mo == root:
# var cam = get_character().get_viewport().get_camera()
# var pl = cam.get_meta("player")
# print(mo.name, " ", root.name, " ", e.name)
# print(mo, " ", root, " ", " ", pl)
return
print("HIT")
var bi = blood.instance()
var d = area.global_transform.origin.linear_interpolate(e.global_transform.origin, 0.5)
@@ -40,14 +49,15 @@ func area_hit(area, e):
offt.y = 0
org += xoff + offt
raycast_queue.push_back(org)
yield(get_tree().create_timer(8), "timeout")
yield(root.get_tree().create_timer(8), "timeout")
# TODO: add delay
bi.queue_free()
func _physics_process(delta):
var root = get_parent()
func update_physics(delta):
var root = get_character()
var space_state: PhysicsDirectSpaceState = root.get_world().direct_space_state
var offsets = [Vector3(0, -2, 0)]
var cam = get_viewport().get_camera()
var cam = root.get_viewport().get_camera()
if !cam.has_meta("player"):
return
var player = cam.get_meta("player")

View File

@@ -1,4 +1,4 @@
extends Node
extends AIScriptModule
# Declare member variables here. Examples:
@@ -10,12 +10,24 @@ extends Node
var animtree: AnimationTree
var root_motion_track
func _ready():
process_priority = 0
func init():
# process_priority = 0
pass
func _physics_process(delta):
var root = get_parent()
func can_walk_there(dest: Vector3) -> bool:
var root = get_character()
var space: PhysicsDirectSpaceState = root.get_world().get_direct_space_state()
var result = space.intersect_ray(root.global_transform.origin, dest, [root])
if result.has("collider"):
return false
else:
return true
func update_physics(delta):
var root = get_character()
var orientation: Transform
assert(root.has_meta("skeleton"))
if root.has_meta("orientation"):
orientation = root.get_meta("orientation")
if !animtree:
@@ -139,6 +151,7 @@ func _physics_process(delta):
"walkto":
if !root.has_meta("cmdq_walk"):
root.set_meta("cmdq_walk", true)
var can_walk = true
var fwd_probe = characters.forward_probe(root, 0.5, 0.05, 1.9, 0.2)
var climb = false
if fwd_probe < 0.1:
@@ -149,18 +162,29 @@ func _physics_process(delta):
elif fwd_probe < 1.2:
# print("trying climb!!!")
climb = true
characters.set_walk_speed(root, 0.5, 0)
else:
can_walk = false
if can_walk:
characters.set_walk_speed(root, 0.4, 0)
else:
characters.set_walk_speed(root, 0.0, 0)
# animtree["parameters/state/locomotion/loc/blend_position"].x = 0.5
# animtree["parameters/state/locomotion/loc/blend_position"].y = 0
var gt: Transform = root.global_transform
var mp: Transform = root.global_transform
var target: = Vector3()
if cmd[1] is Spatial:
target = cmd[1].global_transform.origin
else:
target = cmd[1]
target.y = root.global_transform.origin.y
if gt.origin != target:
gt = gt.looking_at(target, Vector3.UP)
var current_dir = root.global_transform.xform(Vector3(0, 0, -1))
var locnav_probe = characters.locnav_probe(root, 3.0, (target - mp.origin).normalized(), 0.15)
# var where_to = target.linear_interpolate(gt.origin + locnav_probe, 0.3)
# var where_to = mp.origin + current_dir * 0.8 + locnav_probe * 0.0 + (target - mp.origin).normalized() * 0.2
var where_to = mp.origin + (target - mp.origin).normalized()
if gt.origin != where_to:
gt = gt.looking_at(where_to, Vector3.UP)
gt.origin = Vector3()
# print("target: ", target)
var timeout = cmd[3]
@@ -175,20 +199,18 @@ func _physics_process(delta):
cmd_new = ["climb", "1"]
cmds.push_front(cmd_new)
elif timeout >= 0.0 && d > cmd[2]:
var cmd_new = ["walkto", cmd[1], cmd[2], timeout]
cmds.push_front(cmd_new)
if can_walk:
var cmd_new = ["walkto", cmd[1], cmd[2], timeout]
cmds.push_front(cmd_new)
elif d > cmd[2]:
var dir = target - root.global_transform.origin
dir = dir.normalized() * (d - cmd[2])
root.global_transform.origin += dir
characters.set_walk_speed(root, 0.0, 0.0)
# animtree["parameters/state/locomotion/loc/blend_position"].x = 0.0
root.remove_meta("cmdq_walk")
else:
characters.set_walk_speed(root, 0.0, 0.0)
# animtree["parameters/state/locomotion/loc/blend_position"].x = 0.0
root.remove_meta("cmdq_walk")
# print(d, " ", timeout, " ", gt)
"set_other":
var cmdq_other = []
if cmd[1].has_meta("cmdqueue"):

View File

@@ -0,0 +1,138 @@
extends AIScriptModule
# Declare member variables here. Examples:
# var a = 2
# var b = "text"
# Called when the node enters the scene tree for the first time.
var root
var skel
var hair_skel
var name
var garments_female_lingerie = ["female-panties1", "female-bra1"]
var garments_head_female = []
var garments_male_lingerie = ["male-panties1"]
var garments_head_male = []
var garments_female_main = ["female-shirt_skirt1"]
var garments_male_main = ["male-pants1", "male-shoes1"]
var basedir = "res://scenes/clothes/"
var material_female = preload("res://scenes/clothes/nun-clothes.material")
var material_male = preload("res://scenes/clothes/clothes-male.material")
var state = 0
var health = 100.0
var stamina = 100.0
func init():
name = "bandit_ai"
root = get_character()
assert(root.has_meta("skeleton"))
root.add_to_group("students")
root.add_to_group("student")
var character_data = root.get_meta("character_data")
if character_data.sex == "female":
var g = garments_female_lingerie
var h = []
g += garments_female_main
h += garments_head_female
characters.call_deferred("setup_garments", root, g, h, material_female)
else:
var g = garments_male_lingerie
var h = []
g += garments_male_main
h += garments_head_male
characters.call_deferred("setup_garments", root, g, h, material_male)
state = 0
var cooldown = 0.0
func update_physics(delta):
var cam = root.get_viewport().get_camera()
if !cam:
return
if !cam.has_meta("player"):
return
var space: PhysicsDirectSpaceState = root.get_world().get_direct_space_state()
var o = root.global_transform.origin
var p = cam.get_meta("player").global_transform
var pdst = o.distance_squared_to(p.origin)
var adest = o + (p.origin - o).normalized() * 3.0
var fdest = o + (o - p.origin).normalized() * 3.0
var cmdq = []
if root.has_meta("cmdqueue"):
cmdq = root.get_meta("cmdqueue")
match state:
0:
if stamina < 100.0:
stamina += delta
if stamina > 50.0 && pdst < 100.0 && pdst > 8.0:
var skel = root.get_meta("skeleton")
var wslot = skel.get_node("wrist_r/weapon_right")
wslot.set_meta("owner", root)
inventory.equip(wslot, "s_dagger")
# walk to enemy
state = 10
elif stamina > 50.0 && pdst <= 8.0:
# melee attack enemy
state = 20
elif stamina <= 50.0 && stamina > 10.0 && pdst < 50.0:
# flee away
state = 30
elif stamina <= 10.0 && pdst <= 16.0:
# still flee away
state = 30
elif stamina <= 10.0 && pdst > 16.0:
# rest
state = 40
10:
# walk to enemy (player)
stamina -= 4 * delta
var dest = adest
cmdq.push_back(["walkto", dest, 1.5, 2])
state = 11
11:
# wait for start walking
if root.has_meta("cmdq_walk"):
characters.set_walk_speed(root, 0.5, 0)
state = 12
12:
# finished walking
stamina -= 4 * delta
if !root.has_meta("cmdq_walk"):
state = 0
20:
# attack
stamina -= 3500 * delta
characters.animation_node_travel(root, "attack-melee1")
cooldown = 0.8
state = 21
21:
cooldown -= delta
stamina -= 5 * delta
if cooldown <= 0.0:
state = 0
30:
# walk away from enemy (player)
stamina -= 15 * delta
var dest = fdest
cmdq.push_back(["walkto", dest, 1.5, 2])
state = 31
31:
# wait for start fleeing
if root.has_meta("cmdq_walk"):
characters.set_walk_speed(root, 0.65, 0)
state = 32
32:
# finished fleeing
stamina -= 15 * delta
if !root.has_meta("cmdq_walk"):
state = 0
40:
stamina += 15500.0 * delta
if stamina > 90.0:
state = 0
stamina = clamp(stamina, 0, 100.0)
root.set_meta("cmdqueue", cmdq)

View File

@@ -1,4 +1,4 @@
extends Node
extends AIScriptModule
# Declare member variables here. Examples:
# var a = 2
@@ -6,8 +6,9 @@ extends Node
# Called when the node enters the scene tree for the first time.
func _ready():
var root = get_parent()
func init():
var root = get_character()
assert(root.has_meta("skeleton"))
var cmdq = []
if root.has_meta("cmdqueue"):
cmdq = root.get_meta("cmdqueue")

View File

@@ -0,0 +1,227 @@
extends AIScriptModule
# Declare member variables here. Examples:
# var a = 2
# var b = "text"
# Called when the node enters the scene tree for the first time.
var root
var skel
var hair_skel
var garments = ["female-panties1", "mystress-dress", "mystress-necklace"]
var garments_head = []
var basedir = "res://scenes/clothes/"
var material = preload("res://scenes/clothes/mystress_clothes.material")
#var tween: Tween
#enum {
# IDLE,
# WALKING
# PRAYING,
# PRAYING_STARTLED,
# ACTION
#}
#var state = PRAYING
func init():
root = get_character()
assert(root.has_meta("skeleton"))
root.add_to_group("mystress")
# tween = Tween.new()
# tween.playback_process_mode = Tween.TWEEN_PROCESS_PHYSICS
# tween.process_priority = 30
# add_child(tween)
# call_deferred("setup_markers")
characters.call_deferred("setup_garments", root, garments, garments_head, material)
#func setup_markers():
# var cmdq = []
# if root.has_meta("cmdqueue"):
# cmdq = root.get_meta("cmdqueue")
# cmdq.push_back(["hide_marker", "head/marker_talk"])
# cmdq.push_back(["hide_marker", "head/marker_hips_action"])
# cmdq.push_back(["register_marker", self, "hips/marker_dagger_sacrifice",
# {
# "method": "dagger_sacrifice"
# }
# ])
# cmdq.push_back(["hide_marker", "hips/marker_dagger_sacrifice"])
# cmdq.push_back(["anim_state", "pray"])
# root.set_meta("cmdqueue", cmdq)
# state = PRAYING
#var state_changed = 0.0
func set_orientation(v: Transform):
root.set_meta("orientation", v)
func set_basis_dir(dir: Vector3):
var xdir: Vector3 = dir
xdir.y = 0
var d0 = xdir.cross(Vector3.UP)
var d1 = Vector3.UP
var d2 = xdir
var basis = Basis(d0, d1, -d2)
var orientation = root.get_meta("orientation")
orientation.basis = basis
root.set_meta("orientation", orientation)
var state = 0
var sw_delay = 0.0
var oldx = Vector3()
func get_dest(pt: Vector3, exclusions: Array) -> Vector3:
var ret = pt
var o = root.global_transform.origin
var offt = Vector3.UP * 0.3
var space: PhysicsDirectSpaceState = root.get_world().get_direct_space_state()
var r = space.intersect_ray(o + offt, pt + offt, exclusions)
if !r.empty():
ret = r.position - offt
return ret
func update_physics(delta):
var cmdq = []
if !skel:
skel = root.get_meta("skeleton")
var cam = root.get_viewport().get_camera()
if !cam:
return
if !cam.has_meta("player"):
return
var space: PhysicsDirectSpaceState = root.get_world().get_direct_space_state()
var o = root.global_transform.origin
var p = cam.get_meta("player").global_transform
var orientation = Transform(root.global_transform.basis, Vector3())
var dir = orientation.xform(Vector3(0, 0, -1))
var dp = dir.dot(p.origin - o)
if oldx.length() == 0:
oldx = p.origin
var v = (p.origin - oldx) / delta
v.y = 0
var d = p.origin.distance_squared_to(root.global_transform.origin)
if root.has_meta("cmdqueue"):
cmdq = root.get_meta("cmdqueue")
sw_delay -= delta
match state:
0:
if d > 30.0:
state = 30
if d > 4.5 * 4.5 && v.length() == 0 && sw_delay < 0.0:
state = 10
elif d < 2.5 * 2.5 && v.length() > 0 && dp > 0:
state = 20
elif d < 1.0 * 1.0 && v.length() > 0:
var here = (o - p.origin).normalized()
if v.dot(here) > 0:
state = 22
10:
if !root.has_meta("cmd_walk"):
state = 11
11:
var dest = get_dest(p.origin, [root, cam.get_meta("player")])
cmdq.push_back(["walkto", dest, 2.5, 15])
state = 12
12:
if !root.has_meta("cmd_walk"):
state = 0
20:
if !root.has_meta("cmd_walk"):
state = 21
21:
var pt = (root.global_transform.origin - p.origin).normalized() * 5 + root.global_transform.origin
var ddir = characters.locnav_probe(root, 2.5, (pt - o).normalized(), 0.2)
var dpt = ddir + o
var dest = get_dest(dpt, [root, cam.get_meta("player")])
print("from: ", o, " to: ", dest, " ddir: ", ddir)
cmdq.push_back(["walkto", dest, 1.5, 15])
if dest != pt:
sw_delay = 1.5
else:
sw_delay = 5.0
state = 12
22:
if dp > 0 && dp < 0.9999:
var tf = root.global_transform
tf = tf.looking_at(p.origin, Vector3.UP)
orientation.basis = orientation.basis.slerp(tf.basis, 0.3)
root.set_meta("orientation", orientation)
elif dp > 0:
orchestration.grab(cam.get_meta("player"), root)
state = 23
23:
if d > 5.0 * 5.0:
state = 0
30:
if d < 20.0:
state = 0
root.set_meta("cmdqueue", cmdq)
oldx = p.origin
# print("state =", state)
# var px = p.origin
# px.y = root.global_transform.origin.y
# var pdir = px - root.global_transform.origin
# var fdir = -root.global_transform.basis[2]
# fdir.y = 0
# pdir.y = 0
# pdir = pdir.normalized()
# fdir = fdir.normalized()
# var cmdq = []
# if root.has_meta("cmdqueue"):
# cmdq = root.get_meta("cmdqueue")
# state_changed -= delta
# state_changed = clamp(state_changed, 0.0, 10.0)
# match state:
# PRAYING:
# if root.has_meta("req_state") && root.get_meta("req_state") in ["TALK", "ACTION"]:
# state = ACTION
# cmdq.push_back(["anim_state", "locomotion"])
# root.set_meta("cmdqueue", cmdq)
# elif d < 2.0 && state_changed <= 0.0:
# if pdir.angle_to(fdir) > PI / 8.0:
# tween.interpolate_method(self, "set_basis_dir", fdir, pdir, 0.3 + randf() * 0.6, Tween.TRANS_CUBIC)
# tween.start()
# state_changed = 0.5
# else:
# cmdq.push_back(["anim_state", "pray-startled"])
## cmdq.push_back(["anim_state", "locomotion"])
## cmdq.push_back(["anim_param", "state/locomotion/loc/blend_position", Vector2(0.5, 0)])
# root.set_meta("cmdqueue", cmdq)
# state = PRAYING_STARTLED
# state_changed = 3.0
# PRAYING_STARTLED:
# if root.get_meta("req_state") in ["TALK", "ACTION"]:
# state = ACTION
# cmdq.push_back(["anim_state", "locomotion"])
# root.set_meta("cmdqueue", cmdq)
# elif d > 4.0 && state_changed <= 0.0:
# cmdq.push_back(["anim_state", "pray"])
# root.set_meta("cmdqueue", cmdq)
# state = PRAYING
# state_changed = 4.0
# else:
# var f = root.global_transform.origin + Vector3.UP * 0.5
# var t = f + root.global_transform.basis[2] * 0.22
# var result = space.intersect_ray(f, t, [root])
# if result.has("collider"):
# cmdq.push_back(["anim_state", "pray"])
# root.set_meta("cmdqueue", cmdq)
# state = PRAYING
# state_changed = 2.0
# ACTION:
# if !root.has_meta("req_state"):
# state = PRAYING
#
## elif d <= 4.0 || state_changed > 0.0:
## tween.interpolate_method(self, "set_orientation", root.get_meta("orientation"), root.get_meta("orientation").looking_at(px, Vector3(0, 1, 0)), 0.3 + randf() * 0.6, Tween.TRANS_CUBIC)
## tween.start()
## var sacrifice_marker = skel.get_node("hips/marker_dagger_sacrifice")
## if sacrifice_marker.visible && !inventory.items.s_dagger:
## sacrifice_marker.hide()
## elif !sacrifice_marker.visible && inventory.items.s_dagger:
## sacrifice_marker.show()
#
##func dagger_sacrifice(data):
## print("dagger sacrifice")
## var cmdq = []
## var other = group_manager.player
## if other.has_meta("cmdqueue"):
## cmdq = other.get_meta("cmdqueue")
## cmdq.push_back(["anim_param", "blade_right/blend_amount", 1.0])
## cmdq.push_back(["equip", "wrist_r/weapon_right", "s_dagger"])
## other.set_meta("cmdqueue", cmdq)
## group_manager.submit_player_npc_event_arot(root, "sacrificed-a", root, "sacrificed", root)

View File

@@ -24,8 +24,9 @@ var material = preload("res://scenes/clothes/nun-clothes.material")
# ACTION
#}
#var state = PRAYING
func _ready():
func _init():
root = get_parent()
assert(root.has_meta("skeleton"))
root.add_to_group("nuns")
# tween = Tween.new()
# tween.playback_process_mode = Tween.TWEEN_PROCESS_PHYSICS

View File

@@ -12,8 +12,9 @@ var skel
var garments = ["female-panties1", "female-bra1"]
var basedir = "res://scenes/clothes/"
var material = preload("res://scenes/clothes/cloth.material")
func _ready():
func _init():
root = get_parent()
assert(root.has_meta("skeleton"))
root.add_to_group("sacrifice")
call_deferred("setup_markers")
characters.call_deferred("setup_garments", root, garments, [], material)

View File

@@ -1,4 +1,4 @@
extends Node
extends AIScriptModule
# Declare member variables here. Examples:
@@ -10,6 +10,7 @@ extends Node
var root
var skel
var hair_skel
var name
var garments_female_lingerie = ["female-panties1", "female-bra1"]
var garments_head_female = []
@@ -20,23 +21,14 @@ var garments_male_main = ["male-pants1", "male-shirt1", "male-shoes1"]
var basedir = "res://scenes/clothes/"
var material_female = preload("res://scenes/clothes/nun-clothes.material")
var material_male = preload("res://scenes/clothes/clothes-male.material")
#var tween: Tween
#enum {
# IDLE,
# WALKING,
# SLEEPING
#}
#var state = SLEEPING
func _ready():
func init():
name = "student_ai"
root = get_parent()
root = get_character()
assert(root.has_meta("skeleton"))
root.add_to_group("students")
root.add_to_group("student")
# tween = Tween.new()
# tween.playback_process_mode = Tween.TWEEN_PROCESS_PHYSICS
# tween.process_priority = 30
# add_child(tween)
# call_deferred("setup_markers")
var character_data = root.get_meta("character_data")
if character_data.sex == "female":
var g = garments_female_lingerie
@@ -50,96 +42,3 @@ func _ready():
g += garments_male_main
h += garments_head_male
characters.call_deferred("setup_garments", root, g, h, material_male)
#func setup_markers():
# var cmdq = []
# if root.has_meta("cmdqueue"):
# cmdq = root.get_meta("cmdqueue")
# if root.has_meta("saved_anim_state"):
# var st = root.get_meta("saved_anim_state")
# cmdq.push_back(["anim_state", st])
# root.set_meta("cmdqueue", cmdq)
# root.remove_meta("saved_anim_state")
# if st == "sleeping":
# state = SLEEPING
# else:
# state = IDLE
# elif scenario.period > scenario.EARLY_MORNING:
# cmdq.push_back(["anim_state", "locomotion"])
# root.set_meta("cmdqueue", cmdq)
# else:
# cmdq.push_back(["anim_state", "sleeping"])
# root.set_meta("cmdqueue", cmdq)
# state = SLEEPING
#var state_changed = 0.0
#func set_basis_dir(dir: Vector3):
# var xdir: Vector3 = dir
# xdir.y = 0
# var d0 = xdir.cross(Vector3.UP)
# var d1 = Vector3.UP
# var d2 = xdir
# var basis = Basis(d0, d1, -d2)
# var orientation = root.get_meta("orientation")
# orientation.basis = basis
# root.set_meta("orientation", orientation)
#func _process(delta):
# if !skel:
# skel = root.get_meta("skeleton")
# var space: PhysicsDirectSpaceState = root.get_world().get_direct_space_state()
# var p = get_viewport().get_camera().get_meta("player").global_transform
# var d = p.origin.distance_to(root.global_transform.origin)
# var px = p.origin
# px.y = root.global_transform.origin.y
# var pdir = px - root.global_transform.origin
# var fdir = -root.global_transform.basis[2]
# fdir.y = 0
# pdir.y = 0
# pdir = pdir.normalized()
# fdir = fdir.normalized()
# var cmdq = []
# if root.has_meta("cmdqueue"):
# cmdq = root.get_meta("cmdqueue")
# state_changed -= delta
# state_changed = clamp(state_changed, 0.0, 10.0)
# match state:
# SLEEPING:
# if scenario.period > scenario.EARLY_MORNING:
# state = WALKING
# cmdq.push_back(["anim_state", "locomotion"])
# else:
# cmdq.push_back(["anim_state", "sleeping"])
# root.set_meta("cmdqueue", cmdq)
# WALKING:
# pass
# IDLE:
# pass
## cmdq.push_back(["anim_state", "locomotion"])
## root.set_meta("cmdqueue", cmdq)
#func switch_state(root, st):
# print("seitch state: ", state, " ", st)
# var cmdq = []
# if state == st:
# return
# if root.has_meta("cmdqueue"):
# cmdq = root.get_meta("cmdqueue")
# match state:
# IDLE:
# pass
# SLEEPING:
# pass
# WALKING:
# pass
# match st:
# IDLE:
# cmdq.push_back(["anim_state", "locomotion"])
# SLEEPING:
# cmdq.push_back(["anim_state", "sleeping"])
# WALKING:
# cmdq.push_back(["anim_state", "locomotion"])
# root.set_meta("cmdqueue", cmdq)
# state = st
#func command(cmd):
# print(name, " command: ", cmd)
# match cmd[0]:
# "wakeup":
# switch_state(get_parent(), WALKING)

View File

@@ -1,4 +1,4 @@
extends Node
extends AIScriptModule
# Declare member variables here. Examples:
@@ -15,8 +15,10 @@ var garments = ["male-panties1", "male-shirt1"]
var garments_head = []
var basedir = "res://scenes/clothes/"
var material = preload("res://scenes/clothes/clothes-male.material")
func _ready():
root = get_parent()
func init():
root = get_character()
assert(root.has_meta("skeleton"))
call_deferred("setup_markers")
call_deferred("setup_garments")
func setup_markers():

View File

@@ -1,4 +1,4 @@
extends Node
extends AIScriptModule
# Declare member variables here. Examples:
@@ -10,18 +10,20 @@ extends Node
var cam
var fps_cam
var motion = Vector2()
func _ready():
var root = get_parent()
process_priority = 200
func init():
var root = get_character()
assert(root.has_meta("skeleton"))
var attack = false
var equipped = false
func update(delta):
if Input.is_action_pressed("attack"):
attack = true
# Called every frame. 'delta' is the elapsed time since the previous frame.
#func _process(delta):
# pass
func _physics_process(delta):
func update_physics(delta):
var orientation: Transform
var root = get_parent()
var root = get_character()
if !root.has_meta("cam"):
return
cam = root.get_meta("cam")
@@ -47,7 +49,7 @@ func _physics_process(delta):
# if root.has_meta("group_behavior"):
# if motion_target.y < 0:
# behavior.destroy_group_behavior(root.get_meta("group_behavior"))
if !root.has_meta("vehicle") && !root.has_meta("cmdqueue") && !root.has_meta("group_behavior"):
if !root.has_meta("vehicle") && !root.has_meta("cmdqueue") && !root.has_meta("group_behavior") && !root.has_meta("orchestrated"):
if Input.is_action_just_pressed("activate"):
markers.activate_marker()
if Input.is_action_pressed("run"):
@@ -75,37 +77,48 @@ func _physics_process(delta):
cmdq.push_back(["climb", "1"])
root.set_meta("cmdqueue", cmdq)
animtree["parameters/state/playback"].travel("locomotion")
var strafing = 0
var linear = 0
if fps_cam.current:
strafing = motion.x
linear = motion.y
if attack:
if !equipped:
var skel = root.get_meta("skeleton")
var wslot = skel.get_node("wrist_r/weapon_right")
wslot.set_meta("owner", root)
inventory.equip(wslot, "s_dagger")
equipped = true
animtree["parameters/state/playback"].travel("attack-melee1")
attack = false
else:
strafing = 0
linear = motion.length()
if running:
animtree["parameters/state/locomotion/loc/blend_position"] = Vector2(linear * 3.0, strafing * 2.0)
else:
animtree["parameters/state/locomotion/loc/blend_position"] = Vector2(linear * 0.5, strafing)
animtree["parameters/state/playback"].travel("locomotion")
var strafing = 0
var linear = 0
if fps_cam.current:
strafing = motion.x
linear = motion.y
else:
strafing = 0
linear = motion.length()
if running:
animtree["parameters/state/locomotion/loc/blend_position"] = Vector2(linear * 3.0, strafing * 2.0)
else:
animtree["parameters/state/locomotion/loc/blend_position"] = Vector2(linear * 0.5, strafing)
elif root.has_meta("vehicle"):
if Input.is_action_just_pressed("activate"):
markers.activate_marker()
var vehicle: VehicleBody = root.get_meta("vehicle")
var driver = vehicle.get_meta("driver")
if driver == root:
if vehicle.parked:
vehicle.parked = false
vehicle.mode = vehicle.MODE_RIGID
if abs(xmotion.y) < 0.001:
vehicle.brake = 1000
vehicle.steering = -xmotion.x * 0.7
else:
vehicle.brake = 0
if vehicle.linear_velocity.length() < 16.6:
vehicle.engine_force = 4000 * xmotion.y
if vehicle.has_meta("driver"):
var driver = vehicle.get_meta("driver")
if driver == root:
if vehicle.parked:
vehicle.parked = false
vehicle.mode = vehicle.MODE_RIGID
if abs(xmotion.y) < 0.001:
vehicle.brake = 1000
vehicle.steering = -xmotion.x * 0.7
else:
vehicle.engine_force = 500 * xmotion.y
var accel = vehicle.angular_velocity * 350.0 * delta
vehicle.steering = -xmotion.x * 0.7
vehicle.brake = 0
if vehicle.linear_velocity.length() < 16.6:
vehicle.engine_force = 4000 * xmotion.y
else:
vehicle.engine_force = 500 * xmotion.y
var accel = vehicle.angular_velocity * 350.0 * delta
vehicle.steering = -xmotion.x * 0.7