using System.Collections.Generic; using Framework; using Gameplay.Area; using Gameplay.Unit; using PhxhSDK; using UnityEngine; using Constants = Framework.Constants; namespace Gameplay.Fight.Capture { public class CaptureInst { public int cellIndex; public int checkDistance = 1; public int maxCaptureProgress = 10; public List inAreaUnits; public float captureProgress; private bool _lastIsInArea; public bool isCaptured { get; private set; } private GameObject _displayObj; public CaptureInst(int cellIndex, int captureValue) { maxCaptureProgress = captureValue; this.cellIndex = cellIndex; inAreaUnits = new List(); captureProgress = 0f; isCaptured = false; var sampleObj = AssetManager.Instance.GetPreLoadResult(Constants.CAPTURE_POINT_PATH); _displayObj = Object.Instantiate(sampleObj); var worldPos = AreaManager.instance.GetCellPosByIndex(cellIndex); _displayObj.transform.position = worldPos; _lastIsInArea = false; } public void UpdateInAreaUnits(List checkUnits) { if (isCaptured) return; inAreaUnits.Clear(); for (int i = 0; i < checkUnits.Count; i++) { var unit = checkUnits[i]; var unitCellIndex = unit.transData.cellIndex; var distance = AreaManager.instance.GetDistance(unitCellIndex, cellIndex); if (distance <= checkDistance) { inAreaUnits.Add(unit); } } } public void LogicUpdate(float dt) { if (isCaptured) return; if (inAreaUnits.Count > 0) { captureProgress += dt * inAreaUnits.Count; if (captureProgress >= maxCaptureProgress) { isCaptured = true; EventManager.Instance.Send(EventManager.EventName.INFIGHT_CAPTURE_FINSIHED, this); _CreateNoticeOnGround(); } // else // { // EventManager.Instance.Send(EventManager.EventName.INFIGHT_CAPTURE_PROGRESS, this); // } if (!_lastIsInArea) { _lastIsInArea = true; EventManager.Instance.Send(EventManager.EventName.INFIGHT_CAPTURE_START, this); } } else { if (_lastIsInArea) { _lastIsInArea = false; EventManager.Instance.Send(EventManager.EventName.INFIGHT_CAPTURE_STOP, this); } } } private void _CreateNoticeOnGround() { var sampleObj = AssetManager.Instance.GetPreLoadResult(Constants.CAPTURE_FINISHED_POINT_PATH); var displayObj = Object.Instantiate(sampleObj); var worldPos = _displayObj.transform.position; displayObj.transform.position = worldPos; _displayObj.Destroy(); _displayObj = displayObj; } public void Dispose() { if (_displayObj != null) { _displayObj.Destroy(); _displayObj = null; } } } }