using System.Collections.Generic; using UnityEngine; /*************This class is essientially a data class for storing a GridSquares placed object information. It does this per grid.**************/ [System.Serializable] public class GridData { public List GridId = new List(); //Initialises a lot of lists containing data per placed object public List objectName = new List(); public List prefabID = new List(); public List instanceID = new List(); public List xPositions = new List(); public List yPositions = new List(); public List zPositions = new List(); public List xOffsetPositions = new List(); public List yOffsetPositions = new List(); public List zOffsetPositions = new List(); public List xOriginalOffsetPos = new List(); public List yOriginalOffsetPos = new List(); public List zOriginalOffsetPos = new List(); public List rotationY = new List(); public List amountOfCheckPositions = new List(); public List xcheckPositions = new List(); public List ycheckPositions = new List(); public List zcheckPositions = new List(); public List selectChecks = new List(); public List moveOnPoints = new List(); public List buildTime = new List(); public List buildTimeRemaining = new List(); public List upgradeLevel = new List(); public GridData (GridSquare gridSquare) { Transform objContainer = gridSquare.transform.Find("GridObjContainer"); foreach (Transform child in objContainer) { GridObject.Data objData = child.GetComponent().data; objectName.Add(objData.ObjName); prefabID.Add(objData.PrefabId); instanceID.Add(objData.InstanceId); xPositions.Add(objData.Position.x); yPositions.Add(objData.Position.y); zPositions.Add(objData.Position.z); xOffsetPositions.Add(objData.Offset.x); yOffsetPositions.Add(objData.Offset.y); zOffsetPositions.Add(objData.Offset.z); xOriginalOffsetPos.Add(objData.OriginalOffset.x); yOriginalOffsetPos.Add(objData.OriginalOffset.y); zOriginalOffsetPos.Add(objData.OriginalOffset.z); rotationY.Add(objData.Rotation); foreach(Vector3 pos in objData.CheckPositions) { xcheckPositions.Add(pos.x); ycheckPositions.Add(pos.y); zcheckPositions.Add(pos.z); } amountOfCheckPositions.Add(objData.CheckPositions.Count); foreach (System.Reflection.FieldInfo prop in objData.ObjSize.GetType().GetFields()) { selectChecks.Add((bool)prop.GetValue(objData.ObjSize)); } moveOnPoints.Add(objData.MoveOnPoints); buildTime.Add(objData.BuildTime); upgradeLevel.Add(objData.UpgradeLevel); //If the object has remaining time, get it and add it to the data for use on load Timer timer = child.transform.GetComponentInChildren(); if(timer) { //We send the same time remaining in, but have to use different methods because of timeRemaining works in Timer.cs if(timer.countMethod == Timer.CountMethod.CountDown) { buildTimeRemaining.Add((int)timer.timeRemaining); } else { buildTimeRemaining.Add((int)timer.ReturnTotalSeconds() - (int)timer.timeRemaining); } } else { //Already fully built buildTimeRemaining.Add(0); } } } }