Files
GeoSusGame/Assets/Scripts/hod_veci_do_diry/Hole.cs
2026-03-28 19:28:59 +01:00

106 lines
2.8 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using UnityEngine;
using System.Collections;
public class Hole : MonoBehaviour
{
[Header("Nastavení")]
[Tooltip("Poloměr zachycení do kolika jednotek od středu se item 'vtáhne'")]
public float catchRadius = 0.6f;
[Tooltip("Síla vtahování itemu k díře")]
public float pullForce = 4f;
[Header("Pohyb díry (volitelné)")]
public bool hasMovement = false;
public float moveSpeed = 2f;
public Vector2 moveRange = new Vector2(1.5f, 0f);
[Header("Vizuál")]
public SpriteRenderer glowRenderer;
private Vector3 startPosition;
private bool isGlowing = false;
void Awake()
{
startPosition = transform.position;
CircleCollider2D col = GetComponent<CircleCollider2D>();
if (col != null)
{
col.isTrigger = true;
col.radius = catchRadius;
}
}
void Update()
{
if (hasMovement)
{
float x = startPosition.x + Mathf.Sin(Time.time * moveSpeed) * moveRange.x;
float y = startPosition.y + Mathf.Cos(Time.time * moveSpeed * 0.7f) * moveRange.y;
transform.position = new Vector3(x, y, transform.position.z);
}
}
void OnTriggerStay2D(Collider2D other)
{
DraggableObject draggable = other.GetComponent<DraggableObject>();
if (draggable == null) return;
float dist = Vector2.Distance(transform.position, other.transform.position);
Rigidbody2D rb = other.GetComponent<Rigidbody2D>();
if (rb != null)
{
Vector2 dir = ((Vector2)transform.position - rb.position).normalized;
rb.AddForce(dir * pullForce * Time.fixedDeltaTime, ForceMode2D.Impulse);
}
if (dist < catchRadius * 0.4f)
{
draggable.OnScored();
SetGlow(false);
}
}
void OnTriggerEnter2D(Collider2D other)
{
if (other.GetComponent<DraggableObject>() != null) SetGlow(true);
}
void OnTriggerExit2D(Collider2D other)
{
if (other.GetComponent<DraggableObject>() != null) SetGlow(false);
}
void SetGlow(bool active)
{
isGlowing = active;
if (glowRenderer == null) return;
glowRenderer.enabled = active;
if (active) StartCoroutine(PulseGlow());
}
IEnumerator PulseGlow()
{
while (isGlowing && glowRenderer != null)
{
float t = Mathf.PingPong(Time.time * 3f, 1f);
Color c = glowRenderer.color;
glowRenderer.color = new Color(c.r, c.g, c.b, Mathf.Lerp(0.3f, 0.9f, t));
yield return null;
}
}
void OnDrawGizmosSelected()
{
Gizmos.color = Color.green;
Gizmos.DrawWireSphere(transform.position, catchRadius);
Gizmos.color = Color.yellow;
Gizmos.DrawWireSphere(transform.position, catchRadius * 0.4f);
}
}