Added global cooldown for executioner

dev-hazim
Hazim Bin Ijaz 2 days ago
parent 26bcb17d0c
commit 0cce6c3d1f

@ -17,9 +17,9 @@ MonoBehaviour:
abilityRadius: 100
abilityMagnitude: 0
abilityDuration: 10
abilityCooldownTime: 0
abilityCooldownTime: 10
abilityApplicationRadius: 20
prefab: {fileID: 2026889198986879358, guid: cbe217685dd069b47ac56eefeb3f6cdc, type: 3}
travelTime: 3
spawnRadius: 30
moveThroughCenterDistance: 60
warningTime: 3

@ -424,4 +424,19 @@ public class AbilitySystem : NetworkBehaviour
currentAbilityIndicator.transform.localScale = Vector3.one * activeAbility.abilityRadius;
}
}
public void InitiateGlobalCooldown(string abilityKey)
{
Debug.Log($"InitiateGlobalCooldown: Initiating Global Cooldown");
var ability = abilities.FirstOrDefault(a => a.abilityKey == abilityKey);
if (ability != null)
{
Debug.Log($"InitiateGlobalCooldown: Found ability: {ability.abilityKey}");
StartCoroutine(StartCooldown(ability));
}
else
{
Debug.Log($"InitiateGlobalCooldown: Count find ability: {abilityKey}");
}
}
}

@ -8,7 +8,7 @@ public class CrowManager : NetworkBehaviour
{
public static CrowManager Instance { get; private set; }
private List<ServerCharacter> players = new List<ServerCharacter>();
public List<ServerCharacter> players = new List<ServerCharacter>();
private ServerCharacter currentCrow;
public Transform mapCenter;

@ -1,7 +1,8 @@
using UnityEngine;
using Unity.Netcode;
using Unity.BossRoom.Gameplay.GameplayObjects.Character;
using UnityEngine.SocialPlatforms.Impl;
using System.Collections;
using Unity.BossRoom.Gameplay.GameplayObjects;
public class ExecutionerBox : NetworkBehaviour
{
@ -10,26 +11,60 @@ public class ExecutionerBox : NetworkBehaviour
private float _travelTime;
private float _startTime;
private Vector3 _startPos;
private float _warningTime;
public void Initialize(ServerCharacter owner, Vector3 startPos, Vector3 endPos, float travelTime)
public override void OnNetworkSpawn()
{
var playerList = CrowManager.Instance.players;
foreach (ServerCharacter serverCharacter in playerList)
{
if (serverCharacter.NetworkObject.IsOwner) // Check if this player is the local player
{
var abilitySystem = serverCharacter.GetComponent<AbilitySystem>();
if (abilitySystem != null)
{
abilitySystem.InitiateGlobalCooldown(GameDataSource.Instance.TheExecutionerKey);
}
break; // Exit loop after finding the local player
}
}
}
public void Initialize(ServerCharacter owner, Vector3 startPos, Vector3 endPos, float travelTime, float warningTime)
{
_owner = owner;
_startPos = startPos;
_endPos = endPos;
_travelTime = travelTime;
_warningTime = warningTime;
transform.position = startPos;
transform.LookAt(endPos);
_startTime = Time.time;
StartCoroutine(StartExecutionerSequence());
}
private void Update()
private IEnumerator StartExecutionerSequence()
{
if (!IsServer) return;
// Show warning UI on all clients
// UIManager.Instance.ShowExecutionerWarning(_warningTime);
float journeyProgress = (Time.time - _startTime) / _travelTime;
transform.position = Vector3.Lerp(_startPos, _endPos, journeyProgress);
// Wait for the warning time before moving
yield return new WaitForSeconds(_warningTime);
_startTime = Time.time;
StartCoroutine(MoveExecutioner());
}
if (journeyProgress >= 1f)
private IEnumerator MoveExecutioner()
{
float elapsedTime = 0f;
while (elapsedTime < _travelTime)
{
elapsedTime = Time.time - _startTime;
transform.position = Vector3.Lerp(_startPos, _endPos, elapsedTime / _travelTime);
yield return null;
}
NetworkObject.Despawn();
}
@ -37,14 +72,11 @@ public class ExecutionerBox : NetworkBehaviour
{
if (!IsServer) return;
if (other.TryGetComponent<ServerCharacter>(out var victim) && victim != _owner)
if (other.TryGetComponent<ServerCharacter>(out var victim))
{
// Get owner client ID before despawning
ulong ownerId = _owner.OwnerClientId;
// Handle score changes
ScoreManager.Instance.AddPlayerScore(ownerId, 10); // Add to owner
ScoreManager.Instance.SubtractPlayerScore(victim.OwnerClientId, 10); // Subtract from victim
ScoreManager.Instance.SubtractPlayerScore(victim.OwnerClientId, 10);
ScoreManager.Instance.AddPlayerScore(ownerId, 10);
Debug.Log($"[ExecutionerBox] Scores updated. " +
$"Owner ({ownerId}) gained 10, " +

@ -8,6 +8,7 @@ public class TheExecutionerAbility : Ability
[Header("Executioner Settings")]
public float travelTime = 2f;
public float spawnRadius = 18f; // Fixed spawn radius around the map center
public float warningTime = 5f;
public override void Execute(ServerCharacter character, Vector3 ignoredStartPoint, Vector3 ignoredDirection)
{
@ -33,7 +34,8 @@ public class TheExecutionerAbility : Ability
character,
spawnPoint,
endPoint,
travelTime
travelTime,
warningTime
);
}
}

Loading…
Cancel
Save