Cultist Works!
This commit is contained in:
parent
bbb160cd40
commit
d227d15ed3
|
@ -1,12 +1,9 @@
|
||||||
[gd_scene load_steps=7 format=3 uid="uid://cdm267rtmop75"]
|
[gd_scene load_steps=6 format=3 uid="uid://cdm267rtmop75"]
|
||||||
|
|
||||||
|
[ext_resource type="PackedScene" uid="uid://c4s6y758n77lw" path="res://villager_shared.tscn" id="1_6uu34"]
|
||||||
[ext_resource type="PackedScene" uid="uid://7utef1nnena8" path="res://player.tscn" id="1_jbc4n"]
|
[ext_resource type="PackedScene" uid="uid://7utef1nnena8" path="res://player.tscn" id="1_jbc4n"]
|
||||||
[ext_resource type="PackedScene" uid="uid://dl4g083w17qh1" path="res://villager.tscn" id="2_i3gws"]
|
|
||||||
[ext_resource type="PackedScene" uid="uid://e0s4phx2jiit" path="res://cultist.tscn" id="3_renxb"]
|
[ext_resource type="PackedScene" uid="uid://e0s4phx2jiit" path="res://cultist.tscn" id="3_renxb"]
|
||||||
|
|
||||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_62oje"]
|
|
||||||
radius = 10.0
|
|
||||||
|
|
||||||
[sub_resource type="CylinderMesh" id="CylinderMesh_c2b6h"]
|
[sub_resource type="CylinderMesh" id="CylinderMesh_c2b6h"]
|
||||||
top_radius = 80.23
|
top_radius = 80.23
|
||||||
|
|
||||||
|
@ -15,33 +12,23 @@ data = PackedVector3Array(0, 1, 80.23, 7.8639, 1, 79.8437, 0, 0.6, 64.284, 7.863
|
||||||
|
|
||||||
[node name="Node3D" type="Node3D"]
|
[node name="Node3D" type="Node3D"]
|
||||||
|
|
||||||
[node name="Player" parent="." instance=ExtResource("1_jbc4n")]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -24, 5, 40)
|
|
||||||
|
|
||||||
[node name="StaticBody3D" type="StaticBody3D" parent="."]
|
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D"]
|
|
||||||
shape = SubResource("CylinderShape3D_62oje")
|
|
||||||
|
|
||||||
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
|
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
|
||||||
transform = Transform3D(1, 0, 0, 0, -0.523317, 0.852138, 0, -0.852138, -0.523317, 0, 10.6239, 0)
|
transform = Transform3D(1, 0, 0, 0, -0.523317, 0.852138, 0, -0.852138, -0.523317, 0, 10.6239, 0)
|
||||||
|
|
||||||
[node name="Node3D" parent="." instance=ExtResource("2_i3gws")]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -22, 3, 43)
|
|
||||||
|
|
||||||
[node name="Node3D2" parent="." instance=ExtResource("3_renxb")]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 29, 4, 33)
|
|
||||||
walk_chance = 0.1
|
|
||||||
spin_chance = 0.2
|
|
||||||
walk_speed = 0.5
|
|
||||||
dir_correction_rate = 0.95
|
|
||||||
dir_accuracy = 0.00174533
|
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||||
mesh = SubResource("CylinderMesh_c2b6h")
|
mesh = SubResource("CylinderMesh_c2b6h")
|
||||||
skeleton = NodePath("../StaticBody3D/CollisionShape3D")
|
skeleton = NodePath("")
|
||||||
|
|
||||||
[node name="StaticBody3D" type="StaticBody3D" parent="MeshInstance3D"]
|
[node name="StaticBody3D" type="StaticBody3D" parent="MeshInstance3D"]
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="MeshInstance3D/StaticBody3D"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="MeshInstance3D/StaticBody3D"]
|
||||||
shape = SubResource("ConcavePolygonShape3D_8q044")
|
shape = SubResource("ConcavePolygonShape3D_8q044")
|
||||||
|
|
||||||
|
[node name="villager" parent="." instance=ExtResource("1_6uu34")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.28115, 0)
|
||||||
|
|
||||||
|
[node name="Cultist" parent="." instance=ExtResource("3_renxb")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.87818, 2, 0.191837)
|
||||||
|
|
||||||
|
[node name="Player" parent="." instance=ExtResource("1_jbc4n")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.140476, 0.999999, 1.27725)
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
extends SharedSlime
|
|
||||||
class_name Villager
|
class_name Villager
|
||||||
|
extends SharedSlime
|
||||||
|
|
||||||
|
|
||||||
var color_changes = true
|
var color_changes = true
|
||||||
|
|
||||||
|
var is_villager = true
|
||||||
|
|
||||||
var hp = 100
|
var hp = 100
|
||||||
var aggressor
|
var aggressor
|
||||||
|
|
||||||
|
@ -13,13 +16,16 @@ func _process(delta):
|
||||||
become_corrupted()
|
become_corrupted()
|
||||||
|
|
||||||
func become_corrupted():
|
func become_corrupted():
|
||||||
if location_xz.distance_to(aggressor.location_xy) <= 1:
|
if location_xz.distance_to(aggressor.location_xz) <= 1:
|
||||||
|
print("becoming corrupted")
|
||||||
|
print(hp)
|
||||||
# Spin for effect and lose hp.
|
# Spin for effect and lose hp.
|
||||||
rotate_y(deg_to_rad(-15))
|
rotate_y(deg_to_rad(-15))
|
||||||
hp -= 0.5
|
hp -= 0.5
|
||||||
else:
|
else:
|
||||||
hp = 100
|
hp = 100
|
||||||
task = "idle"
|
task = "idle"
|
||||||
|
print("cultist left")
|
||||||
|
|
||||||
# Create a new cultist and then destroy self.
|
# Create a new cultist and then destroy self.
|
||||||
if hp <= 0:
|
if hp <= 0:
|
||||||
|
@ -30,8 +36,8 @@ func become_corrupted():
|
||||||
# Load and instantiate a new cultist.
|
# Load and instantiate a new cultist.
|
||||||
var cultist = load("res://cultist.tscn")
|
var cultist = load("res://cultist.tscn")
|
||||||
cultist = cultist.instantiate()
|
cultist = cultist.instantiate()
|
||||||
get_tree().get_root().add_child(cultist)
|
get_parent_node_3d().add_child(cultist)
|
||||||
cultist.location_xz = location_xz
|
cultist.set_global_position(get_global_position())
|
||||||
|
|
||||||
# Destroy self.
|
# Destroy self.
|
||||||
queue_free()
|
queue_free()
|
||||||
|
@ -58,6 +64,6 @@ func _on_area_3d_body_entered(body):
|
||||||
|
|
||||||
|
|
||||||
func _on_collision_detection_body_entered(body):
|
func _on_collision_detection_body_entered(body):
|
||||||
if body.is_class("Cultist"):
|
if "is_cultist" in body:
|
||||||
aggressor = body
|
aggressor = body as Cultist
|
||||||
task = "become_corrupted"
|
task = "become_corrupted"
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
extends SharedSlime
|
|
||||||
class_name Cultist
|
class_name Cultist
|
||||||
|
extends SharedSlime
|
||||||
|
|
||||||
var victim
|
var victim
|
||||||
|
|
||||||
|
var is_cultist = true
|
||||||
|
|
||||||
func _process(delta):
|
func _process(delta):
|
||||||
super._process(delta)
|
super._process(delta)
|
||||||
|
|
||||||
|
@ -11,23 +13,26 @@ func _process(delta):
|
||||||
|
|
||||||
func corrupt():
|
func corrupt():
|
||||||
# Make sure the victim is still next to the cultist.
|
# Make sure the victim is still next to the cultist.
|
||||||
if location_xz.distance_to(victim.location_xy) <= 1 and victim != null:
|
if location_xz.distance_to(victim.location_xz) <= 0.5 and victim != null:
|
||||||
|
print("corrupting")
|
||||||
rotate_y(deg_to_rad(15))
|
rotate_y(deg_to_rad(15))
|
||||||
if victim.hp <= 0:
|
if victim.hp <= 0:
|
||||||
$evilslime.play()
|
$evilslime.play()
|
||||||
task = "idle"
|
task = "idle"
|
||||||
else:
|
else:
|
||||||
|
print("target lost")
|
||||||
task = "idle"
|
task = "idle"
|
||||||
|
|
||||||
# For corruption detection range.
|
# For corruption detection range.
|
||||||
func _on_target_radius_body_entered(body):
|
func _on_target_radius_body_entered(body):
|
||||||
if body.is_class("Villager"):
|
if "is_villager" in body:
|
||||||
victim = body
|
print("target found")
|
||||||
walk_speed = 2 * walk_speed
|
victim = body as Villager
|
||||||
target_location_xz = victim.location_xz
|
target_location_xz = victim.location_xz
|
||||||
task = "walk"
|
task = "walk"
|
||||||
|
|
||||||
|
|
||||||
# For collision with other slimes.
|
# For collision with other slimes.
|
||||||
func _on_collision_detection_body_entered(body):
|
func _on_collision_detection_body_entered(body):
|
||||||
if body.is_class("Villager"):
|
if "is_villager" in body:
|
||||||
task = "corrupt"
|
task = "corrupt"
|
||||||
|
|
|
@ -5,10 +5,10 @@
|
||||||
[ext_resource type="AudioStream" uid="uid://cxadu5w3jwv0b" path="res://Sounds/evilslime.ogg" id="3_novm4"]
|
[ext_resource type="AudioStream" uid="uid://cxadu5w3jwv0b" path="res://Sounds/evilslime.ogg" id="3_novm4"]
|
||||||
|
|
||||||
[sub_resource type="SphereShape3D" id="SphereShape3D_rypky"]
|
[sub_resource type="SphereShape3D" id="SphereShape3D_rypky"]
|
||||||
radius = 5.0
|
radius = 2.5
|
||||||
|
|
||||||
[sub_resource type="SphereShape3D" id="SphereShape3D_pa038"]
|
[sub_resource type="SphereShape3D" id="SphereShape3D_pa038"]
|
||||||
radius = 0.05
|
radius = 0.055
|
||||||
|
|
||||||
[sub_resource type="SphereShape3D" id="SphereShape3D_bmc5i"]
|
[sub_resource type="SphereShape3D" id="SphereShape3D_bmc5i"]
|
||||||
radius = 0.05
|
radius = 0.05
|
||||||
|
@ -22,13 +22,17 @@ script = ExtResource("1_k6djk")
|
||||||
shape = SubResource("SphereShape3D_rypky")
|
shape = SubResource("SphereShape3D_rypky")
|
||||||
|
|
||||||
[node name="slime" parent="." instance=ExtResource("2_004fn")]
|
[node name="slime" parent="." instance=ExtResource("2_004fn")]
|
||||||
|
transform = Transform3D(0.035, 0, 0, 0, 0.035, 0, 0, 0, 0.035, 0, 0, 0)
|
||||||
|
|
||||||
[node name="CollisionDetection" type="Area3D" parent="."]
|
[node name="CollisionDetection" type="Area3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.03, 0)
|
||||||
|
|
||||||
[node name="collision_ range" type="CollisionShape3D" parent="CollisionDetection"]
|
[node name="collision_ range" type="CollisionShape3D" parent="CollisionDetection"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.013, 0)
|
||||||
shape = SubResource("SphereShape3D_pa038")
|
shape = SubResource("SphereShape3D_pa038")
|
||||||
|
|
||||||
[node name="cultist_collision" type="CollisionShape3D" parent="."]
|
[node name="cultist_collision" type="CollisionShape3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.0429018, 0)
|
||||||
shape = SubResource("SphereShape3D_bmc5i")
|
shape = SubResource("SphereShape3D_bmc5i")
|
||||||
|
|
||||||
[node name="evilslime" type="AudioStreamPlayer3D" parent="."]
|
[node name="evilslime" type="AudioStreamPlayer3D" parent="."]
|
||||||
|
|
|
@ -38,7 +38,7 @@ func walk():
|
||||||
# Rotate towards destination at specified percentage rate.
|
# Rotate towards destination at specified percentage rate.
|
||||||
rotate_y(direction_xz.angle_to(target_direction_xz) * dir_correction_rate)
|
rotate_y(direction_xz.angle_to(target_direction_xz) * dir_correction_rate)
|
||||||
|
|
||||||
if location_xz.distance_to(target_location_xz) <= (Vector2(direction_xz.x, direction_xz.z) * walk_speed).length():
|
if location_xz.distance_to(target_location_xz) <= 0.1:
|
||||||
target_direction_xz = direction_xz
|
target_direction_xz = direction_xz
|
||||||
target_location_xz = location_xz
|
target_location_xz = location_xz
|
||||||
task = "idle"
|
task = "idle"
|
||||||
|
@ -89,7 +89,7 @@ func _physics_process(delta):
|
||||||
velocity.y -= gravity * delta
|
velocity.y -= gravity * delta
|
||||||
|
|
||||||
# Walk to target location.
|
# Walk to target location.
|
||||||
if (location_xz.distance_to(target_location_xz) > walk_speed) and task == "walk":
|
if (location_xz.distance_to(target_location_xz) >= 0.1) and task == "walk":
|
||||||
velocity.x = direction_xz.x * walk_speed
|
velocity.x = direction_xz.x * walk_speed
|
||||||
velocity.z = direction_xz.z * walk_speed
|
velocity.z = direction_xz.z * walk_speed
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
[ext_resource type="Script" path="res://Villager.gd" id="2_uf6mh"]
|
[ext_resource type="Script" path="res://Villager.gd" id="2_uf6mh"]
|
||||||
|
|
||||||
[sub_resource type="SphereShape3D" id="SphereShape3D_k5rhc"]
|
[sub_resource type="SphereShape3D" id="SphereShape3D_k5rhc"]
|
||||||
radius = 0.05
|
radius = 0.055
|
||||||
|
|
||||||
[sub_resource type="SphereShape3D" id="SphereShape3D_wx128"]
|
[sub_resource type="SphereShape3D" id="SphereShape3D_wx128"]
|
||||||
radius = 0.1
|
radius = 0.1
|
||||||
|
|
Loading…
Reference in New Issue