You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1.5 KiB
C#
41 lines
1.5 KiB
C#
using UnityEngine;
|
|
using Unity.BossRoom.Gameplay.GameplayObjects.Character;
|
|
using Unity.Netcode;
|
|
|
|
[CreateAssetMenu(menuName = "Abilities/TheExecutioner")]
|
|
public class TheExecutionerAbility : Ability
|
|
{
|
|
[Header("Executioner Settings")]
|
|
public float travelTime = 2f;
|
|
public float spawnRadius = 18f; // Fixed spawn radius around the map center
|
|
|
|
public override void Execute(ServerCharacter character, Vector3 ignoredStartPoint, Vector3 ignoredDirection)
|
|
{
|
|
Vector3 mapCenter = CrowManager.Instance.mapCenter.position; // Use dynamic map center
|
|
|
|
// Generate a random point on the edge of the circle (radius = spawnRadius)
|
|
float angle = Random.Range(0f, Mathf.PI * 2);
|
|
Vector3 spawnPoint = new Vector3(
|
|
mapCenter.x + Mathf.Cos(angle) * spawnRadius,
|
|
mapCenter.y,
|
|
mapCenter.z + Mathf.Sin(angle) * spawnRadius
|
|
);
|
|
|
|
// Calculate the exact opposite point across the center (radius * 2 away)
|
|
Vector3 endPoint = mapCenter + (mapCenter - spawnPoint);
|
|
|
|
// Spawn and initialize the executioner box
|
|
GameObject boxInstance = Instantiate(prefab, spawnPoint, Quaternion.LookRotation(endPoint - spawnPoint));
|
|
if (boxInstance.TryGetComponent<NetworkObject>(out var netObj))
|
|
{
|
|
netObj.Spawn();
|
|
boxInstance.GetComponent<ExecutionerBox>().Initialize(
|
|
character,
|
|
spawnPoint,
|
|
endPoint,
|
|
travelTime
|
|
);
|
|
}
|
|
}
|
|
}
|