LayerHex searchPositionInMap(GameObject hex) { float d = 100000f; LayerHex findHex = null; int indexOfArray = -1; int len = mLayerHex.Length; for (int i = 0; i < len; i++) { LayerHex layerHex = mLayerHex[i]; float tmp = Mathf.Sqrt(Mathf.Pow((layerHex.x - hex.transform.position.x), 2) + Mathf.Pow((layerHex.y - hex.transform.position.y), 2)); if (d > tmp) { d = tmp; layerHex.indexOfArray = i; findHex = layerHex; indexOfArray = i; } } if (d > mHexColliderD) { return(null); } return(findHex); }
public bool addHexsForMap(GameObject[] hexs) { int len = hexs.Length; LayerHex[] hexsPosition = new LayerHex[len]; for (int i = 0; i < len; i++) { hexsPosition[i] = searchPositionInMap(hexs[i]); if (hexsPosition[i] == null || hexsPosition[i].hex != null) { return(false); } } for (int i = 0; i < len; i++) { //保存用来计算是否练成线,以消除 mLayerFilledHexs[hexsPosition[i].indexOfArray] = hexs[i]; Vector3 position = new Vector3(hexsPosition[i].x, hexsPosition[i].y, 0); hexs[i].GetComponent <SpriteRenderer>().sortingOrder = 1; hexs[i].transform.position = position; hexsPosition[i].hex = hexs[i]; //hexsPosition[i].hex = (GameObject)Instantiate(mRedPrefabHex, position, mRedPrefabHex.transform.rotation); } calcResult(); return(true); }
public bool addHexsForMap(GameObject[] hexs) { int len = hexs.Length; LayerHex[] hexsPosition = new LayerHex[len]; for (int i = 0; i < len; i++) { hexsPosition[i] = searchPositionInMap(hexs[i]); if (hexsPosition[i] == null || hexsPosition[i].hex != null) return false; } for (int i = 0; i < len; i++) { //保存用来计算是否练成线,以消除 mLayerFilledHexs[hexsPosition[i].indexOfArray] = hexs[i]; Vector3 position = new Vector3(hexsPosition[i].x, hexsPosition[i].y, 0); hexs[i].GetComponent<SpriteRenderer>().sortingOrder = 1; hexs[i].transform.position = position; hexsPosition[i].hex = hexs[i]; //hexsPosition[i].hex = (GameObject)Instantiate(mRedPrefabHex, position, mRedPrefabHex.transform.rotation); } calcResult(); return true; }
void initUnderLayers(int layer, int indexOfLayer, int indexOfAllHex, float layerSpace, LayerHex firstHex) { LayerHex layerHex = new LayerHex(); layerHex.layer = layer; layerHex.y = firstHex.y - layer * layerSpace; layerHex.x = firstHex.x - (8 - layer) * mHexColliderD + 2 * mHexColliderD * indexOfLayer; mLayerHex[indexOfAllHex] = layerHex; }
// Use this for initialization void Start() { mRedPrefabHex = GameObject.Find("RedPrefab"); mPrefabHex = GameObject.Find("BGFirstHex"); mHexColliderR = mPrefabHex.gameObject.GetComponent <CircleCollider2D>().bounds.size.x / 2; mHexColliderD = Mathf.Sqrt(3.0f) / 2.0f * mHexColliderR; //每一层hex的距离 float layerSpace = 3.0f / 2.0f * mHexColliderR; LayerHex firstHex = new LayerHex(); firstHex.x = mPrefabHex.transform.position.x; firstHex.y = mPrefabHex.transform.position.y; int layer = 0, indexOfAllHex = 0; for (int i = 5; i < 10; i++) { for (int j = 0; j < i; j++) { initAboveLayers(layer, j, indexOfAllHex, layerSpace, firstHex); indexOfAllHex++; } layer++; } for (int i = 8; i > 4; i--) { for (int j = 0; j < i; j++) { initUnderLayers(layer, j, indexOfAllHex, layerSpace, firstHex); indexOfAllHex++; } layer++; } foreach (LayerHex layerHex in mLayerHex) { Vector3 position = new Vector3(layerHex.x, layerHex.y, 0); Instantiate(mPrefabHex, position, mPrefabHex.transform.rotation); } }
// Use this for initialization void Start() { mRedPrefabHex = GameObject.Find("RedPrefab"); mPrefabHex = GameObject.Find("BGFirstHex"); mHexColliderR = mPrefabHex.gameObject.GetComponent<CircleCollider2D>().bounds.size.x / 2; mHexColliderD = Mathf.Sqrt(3.0f) / 2.0f * mHexColliderR; //每一层hex的距离 float layerSpace = 3.0f / 2.0f * mHexColliderR; LayerHex firstHex = new LayerHex(); firstHex.x = mPrefabHex.transform.position.x; firstHex.y = mPrefabHex.transform.position.y; int layer = 0, indexOfAllHex = 0; for (int i = 5; i < 10; i++) { for (int j = 0; j < i; j++) { initAboveLayers(layer, j, indexOfAllHex, layerSpace, firstHex); indexOfAllHex++; } layer++; } for (int i = 8; i > 4; i--) { for (int j = 0; j < i; j++) { initUnderLayers(layer, j, indexOfAllHex, layerSpace, firstHex); indexOfAllHex++; } layer++; } foreach (LayerHex layerHex in mLayerHex) { Vector3 position = new Vector3(layerHex.x, layerHex.y, 0); Instantiate(mPrefabHex, position, mPrefabHex.transform.rotation); } }