enemy spawner
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user