166 lines
5.2 KiB
C#
166 lines
5.2 KiB
C#
using UnityEngine;
|
|
using System.Collections.Generic;
|
|
using UnityEngine.UI;
|
|
using System;
|
|
using TMPro;
|
|
|
|
namespace Octopus.Simulator
|
|
{
|
|
public class Panel_PlacedObject : MonoBehaviour
|
|
{
|
|
List<Button> buttons = new List<Button>();
|
|
[SerializeField]
|
|
Button ButtonPrefab;
|
|
RectTransform rect;
|
|
[SerializeField]
|
|
RectTransform contentRect;
|
|
[SerializeField]
|
|
TMP_Dropdown dropdown;
|
|
|
|
string mappingkey="";
|
|
public Action<string> onPlacedObjectSelected;
|
|
// Start is called once before the first execution of Update after the MonoBehaviour is created
|
|
void Awake()
|
|
{
|
|
rect = GetComponent<RectTransform>();
|
|
DataManager.I.onModelsUpdated += (value)=>SetDropdown();
|
|
}
|
|
|
|
public void SetDropdown(string mappingKey)
|
|
{
|
|
mappingkey = mappingKey;
|
|
gameObject.SetActive(true);
|
|
|
|
var models = DataManager.I.GetModels();
|
|
|
|
dropdown.onValueChanged.RemoveAllListeners();
|
|
dropdown.ClearOptions();
|
|
|
|
// 3) 옵션 데이터 생성
|
|
List<TMP_Dropdown.OptionData> options = new List<TMP_Dropdown.OptionData>
|
|
{
|
|
new TMP_Dropdown.OptionData("선택되지않음")
|
|
};
|
|
foreach (var model in models)
|
|
{
|
|
options.Add(new TMP_Dropdown.OptionData(model.name));
|
|
}
|
|
dropdown.AddOptions(options);
|
|
var current = LogicMappingDataBase.GetGameObject(mappingKey);
|
|
if (current != null)
|
|
{
|
|
// models 리스트에서 current와 같은 객체의 인덱스 찾기
|
|
int modelIndex = models.FindIndex(m => m == current);
|
|
if (modelIndex >= 0)
|
|
{
|
|
// 플레이스홀더(0) 다음이므로 +1
|
|
dropdown.value = modelIndex + 1;
|
|
}
|
|
else
|
|
{
|
|
dropdown.value = 0; // 혹시 리스트에 없으면 플레이스홀더
|
|
}
|
|
}
|
|
else
|
|
{
|
|
dropdown.value = 0; // 매핑된 게 없으면 플레이스홀더
|
|
}
|
|
dropdown.RefreshShownValue();
|
|
|
|
// 4) 콜백 초기화 후 등록
|
|
dropdown.onValueChanged.RemoveAllListeners();
|
|
dropdown.onValueChanged.AddListener(idx =>
|
|
{
|
|
if (idx == 0)
|
|
{
|
|
LogicMappingDataBase.SetMapping(mappingKey, null);
|
|
}
|
|
else
|
|
{
|
|
var selectedModel = models[idx-1];
|
|
LogicMappingDataBase.SetMapping(mappingKey, selectedModel);
|
|
Debug.Log(mappingKey);
|
|
}
|
|
onPlacedObjectSelected?.Invoke(mappingKey);
|
|
});
|
|
}
|
|
|
|
public void SetDropdown()
|
|
{
|
|
gameObject.SetActive(true);
|
|
|
|
var models = DataManager.I.GetModels();
|
|
|
|
dropdown.onValueChanged.RemoveAllListeners();
|
|
dropdown.ClearOptions();
|
|
|
|
// 3) 옵션 데이터 생성
|
|
List<TMP_Dropdown.OptionData> options = new List<TMP_Dropdown.OptionData>
|
|
{
|
|
new TMP_Dropdown.OptionData("선택되지않음")
|
|
};
|
|
foreach (var model in models)
|
|
{
|
|
options.Add(new TMP_Dropdown.OptionData(model.name));
|
|
}
|
|
dropdown.AddOptions(options);
|
|
var current = LogicMappingDataBase.GetGameObject(mappingkey);
|
|
if (current != null)
|
|
{
|
|
// models 리스트에서 current와 같은 객체의 인덱스 찾기
|
|
int modelIndex = models.FindIndex(m => m == current);
|
|
if (modelIndex >= 0)
|
|
{
|
|
// 플레이스홀더(0) 다음이므로 +1
|
|
dropdown.value = modelIndex + 1;
|
|
}
|
|
else
|
|
{
|
|
dropdown.value = 0; // 혹시 리스트에 없으면 플레이스홀더
|
|
}
|
|
}
|
|
else
|
|
{
|
|
dropdown.value = 0; // 매핑된 게 없으면 플레이스홀더
|
|
}
|
|
dropdown.RefreshShownValue();
|
|
// 4) 콜백 초기화 후 등록
|
|
dropdown.onValueChanged.RemoveAllListeners();
|
|
dropdown.onValueChanged.AddListener(idx =>
|
|
{
|
|
if (idx == 0)
|
|
{
|
|
LogicMappingDataBase.SetMapping(mappingkey, null);
|
|
}
|
|
else
|
|
{
|
|
var selectedModel = models[idx - 1];
|
|
LogicMappingDataBase.SetMapping(mappingkey, selectedModel);
|
|
Debug.Log(mappingkey);
|
|
}
|
|
onPlacedObjectSelected?.Invoke(mappingkey);
|
|
});
|
|
}
|
|
|
|
void ClearButton()
|
|
{
|
|
foreach (var button in buttons)
|
|
{
|
|
Destroy(button.gameObject);
|
|
}
|
|
buttons.Clear();
|
|
}
|
|
|
|
public void OnLogicDataSelected(ILogicItem item)
|
|
{
|
|
ClearButton();
|
|
SetDropdown(item.Name);
|
|
}
|
|
|
|
public void DataDeSelected()
|
|
{
|
|
mappingkey = "";
|
|
gameObject.SetActive(false);
|
|
}
|
|
}
|
|
} |