public static void GetArtifactUnit(VArtifactTown townData, ArtifactUnit[] artifactUnitArray, System.Random myRand) { int townPosXMin = townData.PosGen.x; int townPosZMin = townData.PosGen.y; int townPosXMax = townData.PosGen.x; int townPosZMax = townData.PosGen.y; int unitIndex = 0; for (int m = 0; m < artifactUnitArray.Count(); m++) { IntVector2 posXZ = VArtifactUtil.GetIntVector2FromStr(artifactUnitArray[m].pos); int unitID; if (artifactUnitArray[m].id.Equals("-1")) { List <int> idList = VArtifactUtil.townArtifactsData.Keys.ToList(); unitID = idList[myRand.Next(idList.Count)]; } else { unitID = VArtifactUtil.RandIntFromStr(artifactUnitArray[m].id, myRand); } //Debug.Log("unitID:" + unitID); Town_artifacts townDataFromDataBase = VArtifactUtil.townArtifactsData[unitID]; string isoName = townDataFromDataBase.isoName; float rot; if (artifactUnitArray[m].rot.Equals("-1")) { //--to do: "type" is not used rot = (float)(myRand.NextDouble() * 360); } else { rot = VArtifactUtil.RandFloatFromStr(artifactUnitArray[m].rot, myRand); } //--to do: get the isoData from id; ulong guid; //townData.isodataList.Add(posXZ,GetIsoData(isoName,out guid)); VArtifactUnit vau = new VArtifactUnit(); VArtifactData isoData = VArtifactUtil.GetIsoData(isoName, out guid); if (isoData == null) { Debug.LogError("unitID:" + unitID + " isoName not found! IsoName: " + isoName); continue; } vau.isoName = isoName; vau.unitIndex = unitIndex++; vau.isoId = unitID; vau.isoGuId = guid; vau.vat = townData; vau.rot = rot; vau.PosCenter = posXZ + townData.PosGen; int xIsoSize = isoData.m_HeadInfo.xSize; int zIsoSize = isoData.m_HeadInfo.zSize; vau.isoStartPos = new IntVector2(posXZ.x - xIsoSize / 2, posXZ.y - zIsoSize / 2) + townData.PosGen; vau.isoEndPos = new IntVector2(posXZ.x + xIsoSize / 2, posXZ.y + zIsoSize / 2) + townData.PosGen; int xSize = townDataFromDataBase.vaSize.x; int zSize = townDataFromDataBase.vaSize.y; vau.PosStart = new IntVector2(posXZ.x - xSize / 2, posXZ.y - zSize / 2) + townData.PosGen; vau.PosEnd = new IntVector2(posXZ.x + xSize / 2, posXZ.y + zSize / 2) + townData.PosGen; vau.level = townData.level; vau.type = townData.type; vau.buildingIdNum = artifactUnitArray[m].buildingIdNum.ToList(); vau.npcIdNum = artifactUnitArray[m].npcIdNum.ToList(); vau.buildingCell = townDataFromDataBase.buildingCell; vau.npcPos = townDataFromDataBase.npcPos; vau.vaSize = townDataFromDataBase.vaSize; vau.towerPos = townDataFromDataBase.towerPos; if (vau.PosStart.x < townPosXMin) { townPosXMin = vau.PosStart.x; } if (vau.PosStart.y < townPosZMin) { townPosZMin = vau.PosStart.y; } if (vau.PosEnd.x > townPosXMax) { townPosXMax = vau.PosEnd.x; } if (vau.PosEnd.y > townPosZMax) { townPosZMax = vau.PosEnd.y; } townData.VAUnits.Add(vau); } townData.PosStart = new IntVector2(townPosXMin, townPosZMin); townData.PosEnd = new IntVector2(townPosXMax, townPosZMax); townData.PosCenter = new IntVector2((townPosXMin + townPosXMax) / 2, (townPosZMin + townPosZMax) / 2); // townData.height = Mathf.CeilToInt(townData.VAUnits[0].worldPos.y + townData.VAUnits[0].vaSize.z); // townData.TransPos = new Vector3(townData.PosCenter.x, townData.height, townData.PosCenter.y); townData.radius = (int)Mathf.Sqrt(Mathf.Pow((townPosXMax - townPosXMin) / 2, 2) + Mathf.Pow((townPosZMax - townPosZMin) / 2, 2)); }