Esempio n. 1
0
    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));
    }