public void FinishUp()
    {
        if (newTiles.Count > 0)
        {
            if (forApplyObj.Count > 0)
            {
                forApplyObj.Clear();
                forApplyPos.Clear();
                forApplyGuids.Clear();
                forApplyNames.Clear();
                forApplyRot.Clear();
            }

            for (int i = 0; i < newTiles.Count; i++)
            {
                Tile tile = (Tile)newTiles[i];

                int sizeX = (int)tile.collider.bounds.size.x;
                int sizeY = (int)tile.collider.bounds.size.y;
                int sizeZ = (int)tile.collider.bounds.size.z;

                float centerX = ((float)sizeX) / 2.0f;
                float centerY = ((float)sizeY) / 2.0f;
                float centerZ = ((float)sizeZ) / 2.0f;

                float centerPosX = centerX + (tile.pos.x - ((float)sizeX / 2.0f));
                float centerPosY = centerY + (tile.pos.y - ((float)sizeY / 2.0f));
                float centerPosZ = centerZ + (tile.pos.z - ((float)sizeZ / 2.0f));

                float offsetFix = tile.collider.bounds.size.x;
                float castPosX  = centerPosX + (tile.collider.center.x * tile.scale.x);
                float castPosZ  = centerPosZ + (tile.collider.center.z * tile.scale.z);
                float castPosY  = centerPosY + (tile.collider.center.y * tile.scale.y);

                castFullPos = new Vector3(castPosX, castPosY, castPosZ);
                checkXA     = new Vector3(castPosX + centerX - offsetFix, castPosY, castPosZ);
                checkXB     = new Vector3(castPosX - centerX + offsetFix, castPosY, castPosZ);
                checkZA     = new Vector3(castPosX, castPosY, castPosZ - offsetFix + centerZ);
                checkZB     = new Vector3(castPosX, castPosY, castPosZ + offsetFix - centerZ);

                bool collXB = false;
                bool collXA = false;
                bool collZB = false;
                bool collZA = false;

                RaycastHit lineHit;
                if (Physics.Linecast(castFullPos, checkZB, out lineHit))
                {
                    collZB = hasValidIdentity(lineHit.collider.gameObject);
                }

                if (Physics.Linecast(castFullPos, checkZA, out lineHit))
                {
                    collZA = hasValidIdentity(lineHit.collider.gameObject);
                }

                if (Physics.Linecast(castFullPos, checkXB, out lineHit))
                {
                    collXB = hasValidIdentity(lineHit.collider.gameObject);
                }

                if (Physics.Linecast(castFullPos, checkXA, out lineHit))
                {
                    collXA = hasValidIdentity(lineHit.collider.gameObject);
                }

                int     tcID  = 0;
                Vector3 tcRot = Vector3.zero;

                int[] rDefaults = new int[5];

                for (int z = 0; z < 5; z++)
                {
                    rDefaults[z] = System.Convert.ToInt32(tileRots[z]);
                }

                if (collZB && collZA && collXA && collXB)
                {
                    tcRot = new Vector3(.0f, .0f, .0f);
                    tcID  = 3;
                }
                else if ((collZB && collZA && collXA && !collXB) || (collZB && collZA && !collXA && collXB) || (collZB && !collZA && collXA && collXB) || (!collZB && collZA && collXA && collXB))
                {
                    if (collZB && collZA && collXA && !collXB)
                    {
                        tcRot = new Vector3(0, 270, 0);
                    }
                    else if (collZB && collZA && !collXA && collXB)
                    {
                        tcRot = new Vector3(0, 90, 0);
                    }
                    else if (collZB && !collZA && collXA && collXB)
                    {
                        tcRot = new Vector3(.0f, .0f, .0f);
                    }
                    else if (!collZB && collZA && collXA && collXB)
                    {
                        tcRot = new Vector3(0, 180, 0);
                    }

                    tcID = 2;
                }
                else if ((collZB && collZA) || (collXA && collXB))
                {
                    if (collZB && collZA)
                    {
                        tcRot = new Vector3(.0f, .0f, .0f);
                    }
                    else if (collXA && collXB)
                    {
                        tcRot = new Vector3(.0f, 90, .0f);
                    }

                    tcID = 1;
                }
                else if ((collZB && collXB) || (collZA && collXA) || (collZB && collXA) || (collZA && collXB))
                {
                    if (collZB && collXB)
                    {
                        tcRot = new Vector3(0, 90, 0);
                    }
                    else if (collZA && collXA)
                    {
                        tcRot = new Vector3(0, 270, 0);
                    }
                    else if (collZB && collXA)
                    {
                        tcRot = new Vector3(.0f, .0f, .0f);
                    }
                    else if (collZA && collXB)
                    {
                        tcRot = new Vector3(0, 180, 0);
                    }

                    tcID = 0;
                }
                else if (collZB || collZA || collXA || collXB)
                {
                    if (collZB)
                    {
                        tcRot = new Vector3(.0f, .0f, .0f);
                    }
                    else if (collZA)
                    {
                        tcRot = new Vector3(0, 180, 0);
                    }
                    else if (collXA)
                    {
                        tcRot = new Vector3(0, 270, 0);
                    }
                    else if (collXB)
                    {
                        tcRot = new Vector3(0, 90, 0);
                    }

                    tcID = 4;
                }
                else
                {
                    tcID = currentTileID;
                }

                GameObject obj    = (GameObject)tileSet[tcID];
                string     tcGuid = tileGuids[tcID].ToString();
                string     tcName = tileNames[tcID].ToString();

                forApplyObj.Add(obj);
                forApplyPos.Add(tile.pos);
                forApplyGuids.Add(tcGuid);
                forApplyNames.Add(tcName);
                forApplyRot.Add(tcRot + new Vector3(0, rDefaults[tcID], 0));
            }
        }

        if (forApplyObj.Count > 0)
        {
            for (int i = 0; i < forApplyObj.Count; i++)
            {
                GameObject obj    = (GameObject)forApplyObj[i];
                Vector3    pos    = forApplyPos[i];
                string     tcName = forApplyNames[i].ToString();
                string     tcGuid = forApplyGuids[i].ToString();
                Vector3    rot    = forApplyRot[i];
                uteMEE.ApplyBuild(obj, pos, tcName, tcGuid, rot, currentTcFamilyName);
            }
        }

        if (newTiles.Count > 0)
        {
            newTiles.Clear();
        }

        if (dummyTrash.Count > 0)
        {
            for (int i = 0; i < dummyTrash.Count; i++)
            {
                GameObject go = (GameObject)dummyTrash[i];
                Destroy(go);
            }

            dummyTrash.Clear();
        }

        isBuilding = false;
    }
Exemple #2
0
    public void FinishUp(bool isCancel = false)
    {
        isItFirst = true;

        if (mDummy)
        {
            Destroy(mDummy);
        }

        if (newTiles.Count > 0)
        {
            if (!isCancel)
            {
#if UNITY_EDITOR
                uteGLOBAL3dMapEditor.UndoSession = 1;
#endif
                for (int i = 0; i < newTiles.Count; i++)
                {
                    Tile tile = (Tile)newTiles[i];
#if UNITY_EDITOR
                    if (uteMEE)
                    {
                        if (newTiles.Count == 1)
                        {
                            uteGLOBAL3dMapEditor.UndoSession = 2;
                        }

                        uteMEE.ApplyBuild(mTile, tile.pos, mName, mGuid, mTile.transform.localEulerAngles, "", true);

                        if (i == newTiles.Count - 2)
                        {
                            uteGLOBAL3dMapEditor.UndoSession = 2;
                        }
                    }
                    else
                    {
#endif
                    uteMEER.ApplyBuild(mTile, tile.pos, mName, mGuid, mTile.transform.localEulerAngles, "", true);
#if UNITY_EDITOR
                }
#endif
                }
            }

            if (newTiles.Count > 0)
            {
                newTiles.Clear();
            }

            if (dummyTrash.Count > 0)
            {
                for (int i = 0; i < dummyTrash.Count; i++)
                {
                    GameObject go = (GameObject)dummyTrash[i];
                    Destroy(go);
                }

                dummyTrash.Clear();
            }
        }

        isBuilding = false;
    }