enemy spawner

This commit is contained in:
2025-10-26 14:17:31 +01:00
parent 20d3b46834
commit 40a62b5b5a
2102 changed files with 1255290 additions and 70 deletions

View File

@@ -38,6 +38,9 @@ namespace MegaKoop.Game.WeaponSystem
private bool hasTarget;
private Collider[] ownerColliders;
private Health ownerHealth;
private bool isLocallyControlled = true;
private bool hasDamageOverride;
private float damageOverrideValue = -1f;
private void Awake()
{
@@ -81,6 +84,11 @@ namespace MegaKoop.Game.WeaponSystem
private void Update()
{
if (!isLocallyControlled)
{
return;
}
if (equippedWeapons.Count == 0)
{
return;
@@ -99,6 +107,41 @@ namespace MegaKoop.Game.WeaponSystem
}
}
public void SetLocalAuthority(bool allowLocalControl)
{
if (isLocallyControlled == allowLocalControl)
{
return;
}
isLocallyControlled = allowLocalControl;
if (!isLocallyControlled)
{
hasTarget = false;
retargetTimer = 0f;
}
}
public void SetDamageOverride(float damage)
{
if (damage > 0f)
{
damageOverrideValue = damage;
hasDamageOverride = true;
}
else
{
ClearDamageOverride();
}
}
public void ClearDamageOverride()
{
hasDamageOverride = false;
damageOverrideValue = -1f;
}
public void Equip(WeaponDefinition definition, Transform mount)
{
if (definition == null || mount == null)
@@ -140,6 +183,7 @@ namespace MegaKoop.Game.WeaponSystem
equippedWeapons.Clear();
hasTarget = false;
ClearDamageOverride();
}
private void UpdateTargetSelection(float deltaTime)
@@ -323,9 +367,10 @@ namespace MegaKoop.Game.WeaponSystem
Quaternion rotation = direction.sqrMagnitude > 0f ? Quaternion.LookRotation(direction) : muzzle.rotation;
Projectile projectile = Instantiate(projectilePrefab, muzzle.position, rotation);
projectile.Initialize(direction, weapon.Definition.ProjectileSpeed, weapon.Definition.Damage, weapon.Definition.ProjectileLifetime, gameObject, ownerTeam, ownerColliders, weapon.Definition.HitMask);
float resolvedDamage = hasDamageOverride ? damageOverrideValue : weapon.Definition.Damage;
projectile.Initialize(direction, weapon.Definition.ProjectileSpeed, resolvedDamage, weapon.Definition.ProjectileLifetime, gameObject, ownerTeam, ownerColliders, weapon.Definition.HitMask, true);
ProjectileSpawned?.Invoke(new ProjectileSpawnEvent(weapon.Index, muzzle.position, direction, weapon.Definition.ProjectileSpeed, weapon.Definition.ProjectileLifetime, weapon.Definition.Damage));
ProjectileSpawned?.Invoke(new ProjectileSpawnEvent(weapon.Index, muzzle.position, direction, weapon.Definition.ProjectileSpeed, weapon.Definition.ProjectileLifetime, resolvedDamage));
}
public void SpawnNetworkProjectile(int weaponIndex, Vector3 position, Vector3 direction, float speed, float lifetime, float damage)
@@ -507,8 +552,8 @@ namespace MegaKoop.Game.WeaponSystem
float resolvedSpeed = speed > 0f ? speed : Definition.ProjectileSpeed;
float resolvedLifetime = lifetime > 0f ? lifetime : Definition.ProjectileLifetime;
float resolvedDamage = damage > 0f ? damage : Definition.Damage;
projectile.Initialize(direction, resolvedSpeed, resolvedDamage, resolvedLifetime, owner, ownerTeam, ownerColliders, Definition.HitMask);
}
projectile.Initialize(direction, resolvedSpeed, resolvedDamage, resolvedLifetime, owner, ownerTeam, ownerColliders, Definition.HitMask, false);
}
}
public readonly struct ProjectileSpawnEvent