128 lines
4.4 KiB
C#
128 lines
4.4 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Runtime.Serialization.Formatters.Binary;
|
|
using HexFiled;
|
|
using Sirenix.OdinInspector;
|
|
using TMPro;
|
|
using Unity.Collections;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
#if UNITY_EDITOR
|
|
using Sirenix.OdinInspector.Editor;
|
|
#endif
|
|
|
|
|
|
namespace Data
|
|
{
|
|
[CreateAssetMenu(fileName = "FieldData", menuName = "Data/Field Data")]
|
|
public class FieldData : SerializedScriptableObject
|
|
{
|
|
[SerializeField] private List<GameObject> enviroment;
|
|
[SerializeField] private List<GameObject> buildings;
|
|
|
|
[Sirenix.OdinInspector.ReadOnly, ExecuteAlways]
|
|
public GridToSave Field;
|
|
|
|
public bool isSimpleField;
|
|
[EnableIf("isSimpleField")] public int width = 6;
|
|
[EnableIf("isSimpleField")] public int height = 6;
|
|
[EnableIf("isSimpleField")] public List<HexCoordinates> spawnFields;
|
|
#if UNITY_EDITOR
|
|
[InlineProperty, DisableIf("isSimpleField")] [InlineButton("OpenLevelList")]
|
|
#endif
|
|
public string levelPath;
|
|
|
|
public int hexCaptureManaCost;
|
|
public int hexHardCaptureManaCost;
|
|
public float hexHardCaptureTime;
|
|
public GameObject cellPrefab;
|
|
public TMP_Text cellLabelPrefab;
|
|
public GameObject CoordinatesCanvas;
|
|
public Dictionary<UnitColor, CellColor> colors;
|
|
|
|
|
|
public List<GameObject> Enviroment => enviroment;
|
|
|
|
public List<GameObject> Buildings => buildings;
|
|
|
|
#if UNITY_EDITOR
|
|
private void OpenLevelList()
|
|
{
|
|
SelectLevelWindow.OpenWindow(SetLevelName);
|
|
}
|
|
|
|
private void SetLevelName(string name, List<GameObject> enviroment, List<GameObject> buildings,
|
|
GridToSave serializeField)
|
|
{
|
|
this.enviroment = enviroment;
|
|
this.buildings = buildings;
|
|
|
|
levelPath = name;
|
|
Field = serializeField;
|
|
}
|
|
|
|
public class SelectLevelWindow : OdinEditorWindow
|
|
{
|
|
public static void OpenWindow(Action<string, List<GameObject>, List<GameObject>, GridToSave> SetName)
|
|
{
|
|
var loadMapWindow = GetWindow<SelectLevelWindow>();
|
|
loadMapWindow.Show();
|
|
loadMapWindow.MapsList = new List<MapPath>();
|
|
Directory.GetDirectories("Assets/Resources/Maps").ToList().ForEach(x =>
|
|
{
|
|
loadMapWindow.MapsList.Add(new MapPath(x, SetName));
|
|
});
|
|
}
|
|
|
|
[TableList(IsReadOnly = true, DrawScrollView = false, AlwaysExpanded = true, HideToolbar = true)]
|
|
public List<MapPath> MapsList;
|
|
|
|
public class MapPath
|
|
{
|
|
private Action<string, List<GameObject>, List<GameObject>, GridToSave> _setName;
|
|
|
|
public MapPath(string path, Action<string, List<GameObject>, List<GameObject>, GridToSave> SetName)
|
|
{
|
|
this.path = path;
|
|
_setName += SetName;
|
|
}
|
|
|
|
public string path;
|
|
|
|
[Button("Select")]
|
|
private void Select()
|
|
{
|
|
List<GameObject> enviroment = new List<GameObject>();
|
|
Directory.GetFiles($"{path}/Enviroment", "*.prefab", SearchOption.AllDirectories).ToList().ForEach(
|
|
x =>
|
|
{
|
|
var prefab = x.Replace("\\", "/");
|
|
var go = (GameObject) AssetDatabase.LoadAssetAtPath(prefab, typeof(GameObject));
|
|
enviroment.Add(go);
|
|
});
|
|
List<GameObject> buildings = new List<GameObject>();
|
|
Directory.GetFiles($"{path}/Buildings", "*.prefab", SearchOption.AllDirectories).ToList().ForEach(
|
|
x =>
|
|
{
|
|
var prefab = x.Replace("\\", "/");
|
|
|
|
var go =(GameObject) AssetDatabase.LoadAssetAtPath(prefab, typeof(GameObject));
|
|
buildings.Add(go);
|
|
});
|
|
|
|
|
|
GridToSave data = JsonUtility.FromJson<GridToSave>(File.ReadAllText($"{path}/map.dat"));
|
|
|
|
|
|
_setName.Invoke(path, enviroment, buildings, data);
|
|
AssetDatabase.SaveAssets();
|
|
}
|
|
}
|
|
}
|
|
#endif
|
|
}
|
|
} |