Update
This commit is contained in:
138
scripts/modules/npc_bandit.gd
Normal file
138
scripts/modules/npc_bandit.gd
Normal 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)
|
||||
|
||||
Reference in New Issue
Block a user