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; }
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; }