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

@@ -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)