2022-05-10 05:46:56 +02:00
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
|
|
public class Shadow : MonoBehaviour
|
|
|
|
|
{
|
2022-09-18 16:22:36 +03:00
|
|
|
[SerializeField] private GameObject _playerShadowPrefab = default;
|
|
|
|
|
private SpriteRenderer _spriteRenderer;
|
|
|
|
|
private SpriteRenderer _shadowSpriteRenderer;
|
|
|
|
|
private Transform _shadow;
|
2023-01-13 15:28:18 +02:00
|
|
|
private bool _activated;
|
2022-05-10 05:46:56 +02:00
|
|
|
|
|
|
|
|
|
2022-09-18 16:22:36 +03:00
|
|
|
void OnEnable()
|
|
|
|
|
{
|
2023-01-13 15:28:18 +02:00
|
|
|
if (!_activated)
|
|
|
|
|
{
|
|
|
|
|
_activated = true;
|
|
|
|
|
_spriteRenderer = GetComponent<SpriteRenderer>();
|
|
|
|
|
_shadow = Instantiate(_playerShadowPrefab).transform.GetChild(0);
|
|
|
|
|
_shadowSpriteRenderer = _shadow.GetComponent<SpriteRenderer>();
|
|
|
|
|
_shadow.localRotation = Quaternion.Euler(-45.0f, 0.0f, -180.0f - transform.root.eulerAngles.z);
|
|
|
|
|
}
|
2022-09-18 16:22:36 +03:00
|
|
|
}
|
2022-05-10 05:46:56 +02:00
|
|
|
|
2022-09-18 16:22:36 +03:00
|
|
|
void LateUpdate()
|
|
|
|
|
{
|
|
|
|
|
_shadow.localPosition = new Vector2(transform.position.x, transform.position.y * -1);
|
|
|
|
|
_shadow.localScale = new Vector2(transform.root.localScale.x * -1, 1.0f);
|
|
|
|
|
_shadowSpriteRenderer.sprite = _spriteRenderer.sprite;
|
|
|
|
|
}
|
2022-05-10 05:46:56 +02:00
|
|
|
|
2022-10-21 21:20:37 +03:00
|
|
|
public void SetInvinsible(bool state)
|
|
|
|
|
{
|
|
|
|
|
_shadowSpriteRenderer.enabled = !state;
|
|
|
|
|
}
|
|
|
|
|
|
2022-09-18 16:22:36 +03:00
|
|
|
private void OnDestroy()
|
|
|
|
|
{
|
|
|
|
|
if (_shadowSpriteRenderer != null)
|
|
|
|
|
{
|
|
|
|
|
Destroy(_shadow.root.gameObject);
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-07-28 15:16:08 +03:00
|
|
|
|
2022-09-18 16:22:36 +03:00
|
|
|
private void OnDisable()
|
|
|
|
|
{
|
|
|
|
|
if (_shadowSpriteRenderer != null)
|
|
|
|
|
{
|
|
|
|
|
_shadow.root.gameObject.SetActive(false);
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-05-10 05:46:56 +02:00
|
|
|
}
|