gather-and-defend/Assets/Scripts/Drag&Drop/GameObjectPlacementButton.cs
Felix Boucher 43f4c6a39e Linked resource management to unit creation
Problem :

Les unités et bâtiments ne coutaient rien à construire

Solution :

J'ai link le système de drag and drop au resource manager.

Note :

J'ai déshérité le ResourceManager de MonoBehaviour aussi, vu que c'est pas une fonctionalité qui nécessite d'être updaté par frame vraiment, c'est plus du stockage.

J'ai testé dans l'éditeur et tout semble fonctionel *fingers crossed*
2023-06-22 13:58:02 -04:00

59 lines
2.0 KiB
C#

using System.Linq;
using UnityEngine;
public class GameObjectPlacementButton : UnitPlacementButton
{
[SerializeField]
private GameObject _prefab;
protected override DraggablePlaceholder Place()
{
var instance = Instantiate(_prefab);
//we need to fetch the detection size before stripping the object
var detectComp = instance.GetComponentInChildren<Detection>();
Rect detectionRect = default;
if(detectComp) detectionRect = instance.GetComponentInChildren<Detection>().DetectionRectangle;
//strip the object
foreach (var r_body in instance.transform.GetAllComponents<Rigidbody2D>()) Destroy(r_body);
foreach (var coll in instance.transform.GetAllComponents<Collider2D>()) Destroy(coll);
foreach (var script in instance.transform.GetAllComponents<MonoBehaviour>()) Destroy(script);
var placeholder = instance.AddComponent<ObjectPlaceholder>();
placeholder.Prefab = _prefab;
//assign outline material to all renderers of the placeholder
foreach (var rend in instance.transform.GetAllComponents<SpriteRenderer>())
{
var color = rend.color;
color.a = 0.6f;
rend.color = color;
rend.material = _outlineMaterial;
placeholder.OutlineRenderers.Add(rend);
}
CreateRange(placeholder, detectionRect);
return placeholder;
}
void CreateRange(DraggablePlaceholder placeholder, Rect detectionRect)
{
if (detectionRect == default) return;
var detection = new GameObject("Detection");
var rend = detection.AddComponent<SpriteRenderer>();
rend.sprite = _detectionRangeSprite;
rend.sortingLayerName = "Character";
rend.sortingOrder = 0;
rend.color = new Color(1, 1, 1, 0.2f);
detection.transform.SetParent(placeholder.transform);
detection.transform.localPosition = detectionRect.center;
detection.transform.localScale = detectionRect.size;
}
}