|
|
@ -173,6 +173,104 @@ namespace GWConquest |
|
|
|
} |
|
|
|
UnityEditor.PrefabUtility.RecordPrefabInstancePropertyModifications(this); |
|
|
|
} |
|
|
|
|
|
|
|
[ContextMenu("Setup Zones From Database")] |
|
|
|
public void SetupZonesFromDatabase() |
|
|
|
{ |
|
|
|
UnityEditor.Undo.RecordObject(this, "Setting up zones"); |
|
|
|
|
|
|
|
var facotryPrefab = UnityEditor.AssetDatabase.LoadAssetAtPath<GameObject>("Assets/GWConquest/Prefabs/Factory.prefab"); |
|
|
|
|
|
|
|
var data = PlanetData; |
|
|
|
|
|
|
|
foreach(Zone z in groundZones) |
|
|
|
{ |
|
|
|
if(!z.attackZone) |
|
|
|
{ |
|
|
|
DestroyImmediate(z.gameObject); |
|
|
|
UnityEditor.ArrayUtility.Remove(ref groundZones, z); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
foreach(DistrictConnection conn in GetComponentsInChildren<DistrictConnection>()) |
|
|
|
{ |
|
|
|
DestroyImmediate(conn.gameObject); |
|
|
|
} |
|
|
|
|
|
|
|
District lastDistrict = null; |
|
|
|
|
|
|
|
for(int i = 0; i < data.DistrictData.Length; i++) |
|
|
|
{ |
|
|
|
var districtData = data.DistrictData[i]; |
|
|
|
Zone zone; |
|
|
|
if (districtData.DistrictType == DistrictType.Civil || districtData.DistrictType == DistrictType.Factory) |
|
|
|
{ |
|
|
|
var go = UnityEditor.PrefabUtility.InstantiatePrefab(facotryPrefab) as GameObject; |
|
|
|
zone = go.GetComponent<Zone>(); |
|
|
|
go.name = districtData.Name; |
|
|
|
go.transform.SetParent(transform); |
|
|
|
go.transform.localPosition = Vector3.zero; |
|
|
|
go.transform.localRotation = Quaternion.identity; |
|
|
|
go.transform.localScale = Vector3.one; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
zone = CreateZone(districtData.Name); |
|
|
|
zone.gameObject.AddComponent<District>(); |
|
|
|
} |
|
|
|
|
|
|
|
var coll = GetComponentInChildren<SphereCollider>(); |
|
|
|
float radius = coll.radius * coll.transform.lossyScale.x; |
|
|
|
Vector3 basePoint = (planetCameraTransform.position - transform.position).normalized; |
|
|
|
|
|
|
|
Vector3 randomPoint = UnityEngine.Random.onUnitSphere; |
|
|
|
Vector3 dPoint = Vector3.RotateTowards(basePoint, randomPoint, UnityEngine.Random.Range(0f, Mathf.PI / 8f), 0f); |
|
|
|
|
|
|
|
zone.transform.position = transform.position + radius * dPoint; |
|
|
|
|
|
|
|
District d = zone.GetComponent<District>(); |
|
|
|
d.DistrictType = districtData.DistrictType; |
|
|
|
d.DistrictName = districtData.Name; |
|
|
|
if (districtData.DistrictType == DistrictType.Civil || districtData.DistrictType == DistrictType.Factory) |
|
|
|
{ |
|
|
|
var factory = zone.GetComponent<DistrictFactory>(); |
|
|
|
factory.FactoryType = districtData.DistrictType == DistrictType.Factory ? FactoryType.Infantry : FactoryType.City; |
|
|
|
} |
|
|
|
|
|
|
|
if(i >= 1) |
|
|
|
{ |
|
|
|
GameObject connGO = gameObject.CreateEmpty("Connection"); |
|
|
|
var conn = connGO.AddComponent<DistrictConnection>(); |
|
|
|
conn.district1 = lastDistrict; |
|
|
|
conn.district2 = d; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
lastDistrict = d; |
|
|
|
|
|
|
|
Util.ArrayAppend(ref groundZones, zone); |
|
|
|
} |
|
|
|
|
|
|
|
UnityEditor.PrefabUtility.RecordPrefabInstancePropertyModifications(this); |
|
|
|
} |
|
|
|
|
|
|
|
[ContextMenu("Setup Zones From Database - All")] |
|
|
|
public void SetupAllZones() |
|
|
|
{ |
|
|
|
foreach(Planet p in AllPlanets) |
|
|
|
{ |
|
|
|
Debug.LogFormat("Setting up zones on {0}", p.gameObject.name); |
|
|
|
try |
|
|
|
{ |
|
|
|
p.SetupZonesFromDatabase(); |
|
|
|
} |
|
|
|
catch(Exception ex) |
|
|
|
{ |
|
|
|
Debug.LogException(ex); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
#endif
|
|
|
|
} |
|
|
|
} |