commit428243f4a6Author: AsanoRema <asanorema2036@gmail.com> Date: Sat Aug 29 13:43:13 2026 +0300 Squashed commit of the following: commit68e78fa464Author: AsanoRema <asanorema2036@gmail.com> Date: Sat Aug 29 13:41:49 2026 +0300 Updated .gitignore commit9f87122a34Author: AsanoRema <asanorema2036@gmail.com> Date: Sat Aug 29 13:34:57 2026 +0300 Added Dohya commitf6a7547e84Author: AsanoRema <asanorema2036@gmail.com> Date: Fri Aug 21 17:59:13 2026 +0300 Fixed commitb98901c366Author: AsanoRema <asanorema2036@gmail.com> Date: Tue Aug 18 17:37:22 2026 +0300 Added new particle Package commitbb2f4a3b16Author: AsanoRema <asanorema2036@gmail.com> Date: Tue Aug 18 17:17:48 2026 +0300 Map mehanic ready to multiplayer commitc01ff800f6Author: AsanoRema <asanorema2036@gmail.com> Date: Tue Aug 18 16:16:19 2026 +0300 Squashed commit of the following: commit173bbb165cAuthor: henjkey <henjkey@gmail.com> Date: Fri Aug 14 18:51:23 2026 +0500 Mappp commitd559ab338aAuthor: henjkey <henjkey@gmail.com> Date: Thu Aug 13 18:42:41 2026 +0500 Map Controller Coordinates Target System Crosshair System Radar System
88 lines
2.9 KiB
C#
88 lines
2.9 KiB
C#
using UnityEngine;
|
|
|
|
[DisallowMultipleComponent]
|
|
public class MapTarget : MonoBehaviour
|
|
{
|
|
[Header("Target State (Runtime)")]
|
|
[SerializeField] private TargetConfig config;
|
|
[SerializeField] private int targetId = -1;
|
|
[SerializeField] private float timeUntilAttack;
|
|
[SerializeField] private Vector2 mapCoordinates;
|
|
[SerializeField] private int currentHealth;
|
|
[SerializeField] private MissileType requiredMissileType;
|
|
|
|
private MapCoordinateSystem coordinateSystem;
|
|
private MapPlayer player;
|
|
private Renderer[] targetRenderers;
|
|
private Collider[] targetColliders;
|
|
|
|
public int TargetId => targetId;
|
|
public Vector2 MapCoordinates => mapCoordinates;
|
|
public MapCoordinateSystem CoordinateSystem => coordinateSystem;
|
|
public TargetConfig Config => config;
|
|
public MapPlayer Player => player;
|
|
public float TimeUntilAttack => timeUntilAttack;
|
|
public int CurrentHealth => currentHealth;
|
|
public MissileType RequiredMissileType => requiredMissileType;
|
|
|
|
public void Configure(
|
|
TargetConfig newConfig,
|
|
MapCoordinateSystem newCoordinateSystem,
|
|
MapPlayer newPlayer)
|
|
{
|
|
config = newConfig;
|
|
coordinateSystem = newCoordinateSystem;
|
|
player = newPlayer;
|
|
}
|
|
|
|
public void ApplyNetworkState(MapTargetNetworkState state)
|
|
{
|
|
targetId = state.TargetId;
|
|
timeUntilAttack = state.AttackTimeRemaining;
|
|
currentHealth = state.Health;
|
|
requiredMissileType = config != null
|
|
? config.RequiredMissileType
|
|
: MissileType.None;
|
|
SetMapCoordinates(state.Coordinates);
|
|
}
|
|
|
|
public void SetMapCoordinates(Vector2 coordinates)
|
|
{
|
|
mapCoordinates = coordinateSystem != null
|
|
? coordinateSystem.ClampCoordinates(coordinates)
|
|
: new Vector2(
|
|
Mathf.Clamp(coordinates.x, 0f, MapCoordinateSystem.CoordinateMaximum),
|
|
Mathf.Clamp(coordinates.y, 0f, MapCoordinateSystem.CoordinateMaximum));
|
|
|
|
if (coordinateSystem != null && coordinateSystem.HasValidCorners())
|
|
transform.position = coordinateSystem.CoordinatesToWorldPosition(mapCoordinates);
|
|
}
|
|
|
|
public Vector2 GetMapCoordinates() => mapCoordinates;
|
|
|
|
public void SetVisualsVisible(bool isVisible)
|
|
{
|
|
if (targetRenderers == null)
|
|
targetRenderers = GetComponentsInChildren<Renderer>(true);
|
|
if (targetColliders == null)
|
|
targetColliders = GetComponentsInChildren<Collider>(true);
|
|
|
|
foreach (Renderer targetRenderer in targetRenderers)
|
|
{
|
|
if (targetRenderer != null)
|
|
targetRenderer.enabled = isVisible;
|
|
}
|
|
|
|
// Map targets are presentation objects, never physical world objects.
|
|
foreach (Collider targetCollider in targetColliders)
|
|
{
|
|
if (targetCollider != null)
|
|
targetCollider.enabled = false;
|
|
}
|
|
}
|
|
|
|
protected virtual void TickMovement(float deltaTime)
|
|
{
|
|
}
|
|
}
|