87 lines
2.8 KiB
C#
87 lines
2.8 KiB
C#
using DoomDeathmatch.Scene.Play.Prefab;
|
|
using DoomDeathmatch.Script.Model.Enemy.Attack;
|
|
using DoomDeathmatch.Script.Model.Enemy.Movement;
|
|
using Engine.Util;
|
|
using OpenTK.Mathematics;
|
|
|
|
namespace DoomDeathmatch.Script.Model.Enemy;
|
|
|
|
public class EnemyData
|
|
{
|
|
public static EnemyData Demon =>
|
|
new()
|
|
{
|
|
Id = "demon",
|
|
Name = "Демон",
|
|
Texture = "texture/demon.png",
|
|
BaseHealth = 150,
|
|
BaseScore = 50,
|
|
BaseSpeed = 8,
|
|
MovementBehavior = new FollowPlayerMovementBehavior(1.5f),
|
|
AttackBehaviorCreator = new FuncAttackBehaviorCreator(
|
|
(parEnemyController, parHealthController) =>
|
|
new CloseCooldownAttackBehavior(parEnemyController, parHealthController, 1.75f, 2.5f, 10)
|
|
)
|
|
};
|
|
|
|
public static EnemyData Imp =>
|
|
new()
|
|
{
|
|
Id = "imp",
|
|
Name = "Имп",
|
|
Texture = "texture/imp.png",
|
|
BaseHealth = 300,
|
|
BaseScore = 200,
|
|
BaseSpeed = 7,
|
|
MovementBehavior = new FollowPlayerMovementBehavior(10f),
|
|
AttackBehaviorCreator = new FuncAttackBehaviorCreator(
|
|
(parEnemyController, parHealthController) =>
|
|
new CompositeAttackBehavior(parEnemyController, parHealthController,
|
|
[
|
|
new CloseContinuousAttackBehavior(parEnemyController, parHealthController, 1.75f, 10f),
|
|
new ObjectSpawnAttackBehavior(parEnemyController, parHealthController, 4f,
|
|
(parEnemyController, parHealthController) =>
|
|
{
|
|
var direction =
|
|
(parHealthController.GameObject.Transform.Translation -
|
|
parEnemyController.GameObject.Transform.Translation).Normalized();
|
|
|
|
var fireballObject = EnemyPrefab.CreateFireball(EngineUtil.SceneManager.CurrentScene!,
|
|
parEnemyController.GameObject.Transform.Translation + new Vector3(0, 0f, 1.75f),
|
|
direction * 25,
|
|
35,
|
|
parHealthController.GameObject.Transform
|
|
);
|
|
|
|
return fireballObject;
|
|
}
|
|
)
|
|
]
|
|
)
|
|
)
|
|
};
|
|
|
|
public string Id { get; private init; } = "";
|
|
public string Name { get; private init; } = "";
|
|
|
|
public string Texture { get; private init; } = "";
|
|
|
|
public float BaseHealth { get; private init; }
|
|
public int BaseScore { get; private init; }
|
|
public float BaseSpeed { get; private init; }
|
|
|
|
public IMovementBehavior MovementBehavior { get; private init; }
|
|
public IAttackBehaviorCreator AttackBehaviorCreator { get; private init; }
|
|
|
|
private EnemyData() { }
|
|
|
|
public override bool Equals(object? parObj)
|
|
{
|
|
return parObj is EnemyData enemyData && Id == enemyData.Id;
|
|
}
|
|
|
|
public override int GetHashCode()
|
|
{
|
|
return HashCode.Combine(Id);
|
|
}
|
|
} |