Beeg checkin
This commit is contained in:
10
Enemies/Attacks/EnemyBullet.cs
Normal file
10
Enemies/Attacks/EnemyBullet.cs
Normal file
@@ -0,0 +1,10 @@
|
||||
using Godot;
|
||||
|
||||
public partial class EnemyBullet : Projectile
|
||||
{
|
||||
|
||||
public override void _PhysicsProcess(double delta)
|
||||
{
|
||||
TranslateObjectLocal(new Vector3(0, 0, -Speed * (float)delta));
|
||||
}
|
||||
}
|
||||
48
Enemies/Attacks/EnemyBullet.tscn
Normal file
48
Enemies/Attacks/EnemyBullet.tscn
Normal file
@@ -0,0 +1,48 @@
|
||||
[gd_scene load_steps=6 format=3 uid="uid://rlxnnw4yay7e"]
|
||||
|
||||
[ext_resource type="Script" path="res://Enemies/Attacks/EnemyBullet.cs" id="1_rv13r"]
|
||||
[ext_resource type="Texture2D" uid="uid://dd71tdgrgic46" path="res://Textures/Projectiles/LB ORB.png" id="2_6l2aj"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_phgri"]
|
||||
albedo_color = Color(0.584314, 0.0352941, 0.141176, 1)
|
||||
|
||||
[sub_resource type="SphereMesh" id="SphereMesh_wuk0e"]
|
||||
material = SubResource("StandardMaterial3D_phgri")
|
||||
|
||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_e4v7f"]
|
||||
radius = 0.4
|
||||
|
||||
[node name="TestBullet" type="Node3D"]
|
||||
script = ExtResource("1_rv13r")
|
||||
_projectileSpeed = 3.0
|
||||
|
||||
[node name="RigidBody3D" type="RigidBody3D" parent="."]
|
||||
collision_layer = 4
|
||||
collision_mask = 0
|
||||
gravity_scale = 0.0
|
||||
custom_integrator = true
|
||||
continuous_cd = true
|
||||
max_contacts_reported = 10
|
||||
contact_monitor = true
|
||||
can_sleep = false
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="RigidBody3D"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.02602, 0)
|
||||
visible = false
|
||||
mesh = SubResource("SphereMesh_wuk0e")
|
||||
skeleton = NodePath("../..")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="RigidBody3D"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0111055, 1.02602, 0)
|
||||
shape = SubResource("CylinderShape3D_e4v7f")
|
||||
|
||||
[node name="Sprite3D" type="Sprite3D" parent="RigidBody3D"]
|
||||
transform = Transform3D(0.08, 0, 0, 0, 0.08, 0, 0, 0, 0.08, -0.379318, 1.02602, 0.436329)
|
||||
centered = false
|
||||
axis = 1
|
||||
texture = ExtResource("2_6l2aj")
|
||||
|
||||
[node name="TTL" type="Timer" parent="."]
|
||||
process_callback = 0
|
||||
wait_time = 0.8
|
||||
autostart = true
|
||||
29
Enemies/Attacks/FireAtPlayer.cs
Normal file
29
Enemies/Attacks/FireAtPlayer.cs
Normal file
@@ -0,0 +1,29 @@
|
||||
using Godot;
|
||||
using System.Linq;
|
||||
|
||||
public partial class FireAtPlayer : Timer
|
||||
{
|
||||
[Export]
|
||||
private Area3D _enemy;
|
||||
[Export]
|
||||
private PackedScene _fireProjectile;
|
||||
|
||||
public void OnFireAtPlayer()
|
||||
{
|
||||
var players = GetTree().GetNodesInGroup("Player");
|
||||
if (players.Any())
|
||||
{
|
||||
var convertedPlayers = players.Select(x => (Node3D)x);
|
||||
var target = convertedPlayers.OrderBy(x => _enemy.Position.DistanceTo(x.Position)).FirstOrDefault();
|
||||
var projectile = _fireProjectile.Instantiate<Projectile>() as EnemyBullet;
|
||||
projectile.Rotation = _enemy.Rotation;
|
||||
projectile.Position = _enemy.Position;
|
||||
GetParent().AddChild(projectile);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnDied()
|
||||
{
|
||||
Stop();
|
||||
}
|
||||
}
|
||||
30
Enemies/GodCircuit.tscn
Normal file
30
Enemies/GodCircuit.tscn
Normal file
@@ -0,0 +1,30 @@
|
||||
[gd_scene load_steps=4 format=3 uid="uid://brbshysbgd47q"]
|
||||
|
||||
[ext_resource type="Script" path="res://Enemies/Scripts/GodCircuit.cs" id="1_gyfww"]
|
||||
[ext_resource type="PackedScene" uid="uid://cigdj84f0m3jd" path="res://Levels/Models/Stage10/god circuit stage 1.glb" id="1_w12q0"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_l1qm4"]
|
||||
size = Vector3(2.64724, 5.07315, 0.653787)
|
||||
|
||||
[node name="God Circuit" type="Node3D"]
|
||||
script = ExtResource("1_gyfww")
|
||||
|
||||
[node name="god circuit stage 1" parent="." instance=ExtResource("1_w12q0")]
|
||||
|
||||
[node name="Area3D" type="Area3D" parent="god circuit stage 1"]
|
||||
collision_layer = 0
|
||||
collision_mask = 2
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="god circuit stage 1/Area3D"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.93109, 1.49955, -2.35288)
|
||||
shape = SubResource("BoxShape3D_l1qm4")
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="god circuit stage 1"]
|
||||
collision_layer = 4096
|
||||
collision_mask = 0
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="god circuit stage 1/StaticBody3D"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.93109, 1.49955, -2.35288)
|
||||
shape = SubResource("BoxShape3D_l1qm4")
|
||||
|
||||
[connection signal="body_entered" from="god circuit stage 1/Area3D" to="." method="OnHit"]
|
||||
6
Enemies/HPComponent.tscn
Normal file
6
Enemies/HPComponent.tscn
Normal file
@@ -0,0 +1,6 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://b1j0g6ikmnibm"]
|
||||
|
||||
[ext_resource type="Script" path="res://Enemies/HealthPoints.cs" id="1_rrase"]
|
||||
|
||||
[node name="HP Component" type="Node2D"]
|
||||
script = ExtResource("1_rrase")
|
||||
28
Enemies/HealthPoints.cs
Normal file
28
Enemies/HealthPoints.cs
Normal file
@@ -0,0 +1,28 @@
|
||||
using Godot;
|
||||
|
||||
public partial class HealthPoints : Node
|
||||
{
|
||||
[Export]
|
||||
public long MaximumHP { get; protected set; }
|
||||
|
||||
public long CurrentHP { get; protected set; }
|
||||
|
||||
[Export]
|
||||
private TextureProgressBar _healthBar;
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
CurrentHP = MaximumHP;
|
||||
}
|
||||
|
||||
public void TakeDamage(long damage)
|
||||
{
|
||||
CurrentHP -= damage;
|
||||
GD.Print(CurrentHP);
|
||||
}
|
||||
|
||||
public void UpdateHealthbar()
|
||||
{
|
||||
_healthBar.Value = CurrentHP;
|
||||
}
|
||||
}
|
||||
9
Enemies/HealthbarProgress.cs
Normal file
9
Enemies/HealthbarProgress.cs
Normal file
@@ -0,0 +1,9 @@
|
||||
using Godot;
|
||||
|
||||
public partial class HealthbarProgress : TextureProgressBar
|
||||
{
|
||||
public void UpdateBar(long amount, long full)
|
||||
{
|
||||
Value = amount;
|
||||
}
|
||||
}
|
||||
37
Enemies/MeleeEnemy.tscn
Normal file
37
Enemies/MeleeEnemy.tscn
Normal file
@@ -0,0 +1,37 @@
|
||||
[gd_scene load_steps=5 format=3 uid="uid://bt5rolsyjmx55"]
|
||||
|
||||
[ext_resource type="Script" path="res://Enemies/Scripts/MeleeEnemy.cs" id="1_50och"]
|
||||
[ext_resource type="PackedScene" uid="uid://bg18q3cj6wdie" path="res://Enemies/Models/MeleeEnemy.glb" id="2_l827r"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_1nq5h"]
|
||||
size = Vector3(0.579358, 2.18762, 0.423598)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_i1yvp"]
|
||||
size = Vector3(0.470892, 2.18133, 0.423598)
|
||||
|
||||
[node name="MeleeEnemyOrb" type="Node3D" groups=["Enemy"]]
|
||||
script = ExtResource("1_50och")
|
||||
|
||||
[node name="CharacterBody3D" type="CharacterBody3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.251952, 0)
|
||||
collision_layer = 0
|
||||
collision_mask = 0
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="CharacterBody3D"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0840461, 0.475385, 0.143401)
|
||||
shape = SubResource("BoxShape3D_1nq5h")
|
||||
|
||||
[node name="meleeenemy - Updated" type="Node3D" parent="CharacterBody3D"]
|
||||
|
||||
[node name="Area3D" type="Area3D" parent="CharacterBody3D"]
|
||||
collision_layer = 0
|
||||
collision_mask = 4098
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="CharacterBody3D/Area3D"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0840461, 0.475385, 0.143401)
|
||||
shape = SubResource("BoxShape3D_i1yvp")
|
||||
|
||||
[node name="MeleeEnemy" parent="." instance=ExtResource("2_l827r")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.716768, 0)
|
||||
|
||||
[connection signal="body_entered" from="CharacterBody3D/Area3D" to="." method="OnEnemyHit"]
|
||||
BIN
Enemies/Models/MeleeEnemy.glb
Normal file
BIN
Enemies/Models/MeleeEnemy.glb
Normal file
Binary file not shown.
1834
Enemies/Models/MeleeEnemy.glb.import
Normal file
1834
Enemies/Models/MeleeEnemy.glb.import
Normal file
File diff suppressed because it is too large
Load Diff
BIN
Enemies/Models/RangedEnemy.glb
Normal file
BIN
Enemies/Models/RangedEnemy.glb
Normal file
Binary file not shown.
32
Enemies/Models/RangedEnemy.glb.import
Normal file
32
Enemies/Models/RangedEnemy.glb.import
Normal file
@@ -0,0 +1,32 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://dotxb4dc15l4k"
|
||||
path="res://.godot/imported/RangedEnemy.glb-b55597650bade0297f264b6e0420a5b0.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Enemies/Models/RangedEnemy.glb"
|
||||
dest_files=["res://.godot/imported/RangedEnemy.glb-b55597650bade0297f264b6e0420a5b0.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type="Node3D"
|
||||
nodes/root_name="Scene Root"
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
import_script/path=""
|
||||
_subresources={}
|
||||
gltf/embedded_image_handling=1
|
||||
34
Enemies/RangedEnemy.tscn
Normal file
34
Enemies/RangedEnemy.tscn
Normal file
@@ -0,0 +1,34 @@
|
||||
[gd_scene load_steps=6 format=3 uid="uid://dahp73fwld24h"]
|
||||
|
||||
[ext_resource type="Script" path="res://Enemies/Scripts/RangedEnemy.cs" id="1_01lvj"]
|
||||
[ext_resource type="PackedScene" uid="uid://dotxb4dc15l4k" path="res://Models/Enemies/ranged enemy.glb" id="1_aj5wt"]
|
||||
[ext_resource type="PackedScene" uid="uid://rlxnnw4yay7e" path="res://Scenes/Weapons/EnemyBullet.tscn" id="3_qenx3"]
|
||||
[ext_resource type="Script" path="res://Enemies/Attacks/FireAtPlayer.cs" id="3_qt2md"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_dm3u7"]
|
||||
size = Vector3(0.721796, 2.18529, 0.564825)
|
||||
|
||||
[node name="RangedEnemy" type="Node3D" groups=["Enemy"]]
|
||||
script = ExtResource("1_01lvj")
|
||||
|
||||
[node name="Area3D" type="Area3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||
collision_layer = 0
|
||||
collision_mask = 4098
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Area3D"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.113206, 0.5, 0)
|
||||
shape = SubResource("BoxShape3D_dm3u7")
|
||||
|
||||
[node name="ranged enemy" parent="Area3D" instance=ExtResource("1_aj5wt")]
|
||||
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0, 0)
|
||||
|
||||
[node name="Timer" type="Timer" parent="." node_paths=PackedStringArray("_enemy")]
|
||||
wait_time = 3.0
|
||||
autostart = true
|
||||
script = ExtResource("3_qt2md")
|
||||
_enemy = NodePath("../Area3D")
|
||||
_fireProjectile = ExtResource("3_qenx3")
|
||||
|
||||
[connection signal="body_entered" from="Area3D" to="." method="OnEnemyHit"]
|
||||
[connection signal="timeout" from="Timer" to="Timer" method="OnFireAtPlayer"]
|
||||
18
Enemies/Scripts/BasicEnemy.cs
Normal file
18
Enemies/Scripts/BasicEnemy.cs
Normal file
@@ -0,0 +1,18 @@
|
||||
using Godot;
|
||||
|
||||
public partial class BasicEnemy : Node3D
|
||||
{
|
||||
protected GameManager _gameManager;
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
_gameManager = GetTree().Root.GetNode<GameManager>("Main/GameManager");
|
||||
}
|
||||
|
||||
public void OnEnemyHit(Node3D node)
|
||||
{
|
||||
var currentLevel = (Level)GetTree().GetFirstNodeInGroup("Level");
|
||||
currentLevel.OnEnemyDefeated(this);
|
||||
QueueFree();
|
||||
}
|
||||
}
|
||||
14
Enemies/Scripts/GodCircuit.cs
Normal file
14
Enemies/Scripts/GodCircuit.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
using Godot;
|
||||
|
||||
public partial class GodCircuit : Node3D
|
||||
{
|
||||
private void OnHit(Node3D node)
|
||||
{
|
||||
GD.Print("Hit");
|
||||
var hpComponent = GetNode<HealthPoints>("HP Component");
|
||||
hpComponent.TakeDamage(800000);
|
||||
hpComponent.UpdateHealthbar();
|
||||
if (hpComponent.CurrentHP <= 0)
|
||||
QueueFree();
|
||||
}
|
||||
}
|
||||
20
Enemies/Scripts/MeleeEnemy.cs
Normal file
20
Enemies/Scripts/MeleeEnemy.cs
Normal file
@@ -0,0 +1,20 @@
|
||||
using Godot;
|
||||
using System.Linq;
|
||||
|
||||
public partial class MeleeEnemy : BasicEnemy
|
||||
{
|
||||
[Export]
|
||||
private float _speed = 0.4f;
|
||||
|
||||
public override void _PhysicsProcess(double delta)
|
||||
{
|
||||
var players = GetTree().GetNodesInGroup("Player");
|
||||
if (players.Any())
|
||||
{
|
||||
var convertedPlayers = players.Select(x => (Node3D)x);
|
||||
var target = convertedPlayers.OrderBy(x => Position.DistanceTo(x.Position)).FirstOrDefault();
|
||||
Position = Position.MoveToward(target.Position, _speed * (float)delta);
|
||||
LookAt(-target.Position, Vector3.Up);
|
||||
}
|
||||
}
|
||||
}
|
||||
17
Enemies/Scripts/RangedEnemy.cs
Normal file
17
Enemies/Scripts/RangedEnemy.cs
Normal file
@@ -0,0 +1,17 @@
|
||||
using Godot;
|
||||
using System.Linq;
|
||||
|
||||
public partial class RangedEnemy : BasicEnemy
|
||||
{
|
||||
public override void _Process(double delta)
|
||||
{
|
||||
var players = GetTree().GetNodesInGroup("Player");
|
||||
if (players.Any())
|
||||
{
|
||||
var convertedPlayers = players.Select(x => (Node3D)x);
|
||||
var target = convertedPlayers.OrderBy(x => Position.DistanceTo(x.Position)).FirstOrDefault();
|
||||
var area = GetChildren().OfType<Area3D>().Single();
|
||||
area.LookAt(target.Position, Vector3.Up);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user