IEnumerator GetTargetPathNode() { isTargetFinding = true; yield return(new WaitForSeconds(0.0f)); System.Collections.Generic.List <PathNodeClass> pathNodeList = new System.Collections.Generic.List <PathNodeClass> (); int pi, pj; PathNodeClass pn; if (targetRange < 0) { targetRange = 90; } pj = (int)targetPos.y + targetRange; for (int i = -targetRange; i < targetRange; i++) { pi = (int)targetPos.x + i; if (pi >= 0 && pi < GlobalInfo.mapWidth && pj >= 0 && pj < GlobalInfo.mapHeight) { if (GlobalInfo.aiMapData[pi, pj]) { if (IsLinked(pi, pj, curPathNode.i, curPathNode.j)) { pn = new PathNodeClass(); pn.i = pi; pn.j = pj; pn.distance = Mathf.Sqrt(Mathf.Pow(curPathNode.i - pi, 2) + Mathf.Pow(curPathNode.j - pj, 2)); pathNodeList.Add(pn); } } } } pi = (int)targetPos.x + targetRange; for (int j = -targetRange; j < targetRange; j++) { pj = (int)targetPos.y + j; if (pi >= 0 && pi < GlobalInfo.mapWidth && pj >= 0 && pj < GlobalInfo.mapHeight) { if (GlobalInfo.aiMapData[pi, pj]) { if (IsLinked(pi, pj, curPathNode.i, curPathNode.j)) { pn = new PathNodeClass(); pn.i = pi; pn.j = pj; pn.distance = Mathf.Sqrt(Mathf.Pow(curPathNode.i - pi, 2) + Mathf.Pow(curPathNode.j - pj, 2)); pathNodeList.Add(pn); } } } } pj = (int)targetPos.y - targetRange; for (int i = -targetRange; i < targetRange; i++) { pi = (int)targetPos.x + i; if (pi >= 0 && pi < GlobalInfo.mapWidth && pj >= 0 && pj < GlobalInfo.mapHeight) { if (GlobalInfo.aiMapData[pi, pj]) { if (IsLinked(pi, pj, curPathNode.i, curPathNode.j)) { pn = new PathNodeClass(); pn.i = pi; pn.j = pj; pn.distance = Mathf.Sqrt(Mathf.Pow(curPathNode.i - pi, 2) + Mathf.Pow(curPathNode.j - pj, 2)); pathNodeList.Add(pn); } } } } pi = (int)targetPos.x - targetRange; for (int j = -targetRange; j < targetRange; j++) { pj = (int)targetPos.y + j; if (pi >= 0 && pi < GlobalInfo.mapWidth && pj >= 0 && pj < GlobalInfo.mapHeight) { if (GlobalInfo.aiMapData[pi, pj]) { if (IsLinked(pi, pj, curPathNode.i, curPathNode.j)) { pn = new PathNodeClass(); pn.i = pi; pn.j = pj; pn.distance = Mathf.Sqrt(Mathf.Pow(curPathNode.i - pi, 2) + Mathf.Pow(curPathNode.j - pj, 2)); pathNodeList.Add(pn); } } } } if (pathNodeList.Count > 0) { pn = new PathNodeClass(); float min = 10000.0f; foreach (PathNodeClass a in pathNodeList) { if (a.distance < min) { min = a.distance; pn = a; } } targetPathNode = new Vector2(pn.i, pn.j); targetFound = true; } else { targetFound = false; } isTargetFinding = false; }
IEnumerator GetNextPathNode() { isFinding = true; yield return(new WaitForSeconds(0.0f)); System.Collections.Generic.List <PathNodeClass> pathNodeList = new System.Collections.Generic.List <PathNodeClass> (); int pi, pj; PathNodeClass pn; targetPos = new Vector2(target.position.x - basePoint.position.x, basePoint.position.z - target.position.z); if (aiRange < 0) { aiRange = 35; this.gameObject.SendMessage("OnStopMove", SendMessageOptions.DontRequireReceiver); // SendMessage("OnMoveBackWard",SendMessageOptions.DontRequireReceiver); } float curDist = Mathf.Sqrt(Mathf.Pow(targetPos.x - curPathNode.i, 2) + Mathf.Pow(targetPos.y - curPathNode.j, 2)); pj = curPathNode.j + aiRange; for (int i = -aiRange; i < aiRange; i++) { pi = curPathNode.i + i; if (pi >= 0 && pi < GlobalInfo.mapWidth && pj >= 0 && pj < GlobalInfo.mapHeight) { if (GlobalInfo.aiMapData[pi, pj]) { if (IsLinked(pi, pj, curPathNode.i, curPathNode.j)) { pn = new PathNodeClass(); pn.i = pi; pn.j = pj; pn.distance = Mathf.Sqrt(Mathf.Pow(targetPos.x - pi, 2) + Mathf.Pow(targetPos.y - pj, 2)); // if(pn.distance <= curDist){ pathNodeList.Add(pn); // } } } } } pi = curPathNode.i + aiRange; for (int j = -aiRange; j < aiRange; j++) { pj = curPathNode.j + j; if (pi >= 0 && pi < GlobalInfo.mapWidth && pj >= 0 && pj < GlobalInfo.mapHeight) { if (GlobalInfo.aiMapData[pi, pj]) { if (IsLinked(pi, pj, curPathNode.i, curPathNode.j)) { pn = new PathNodeClass(); pn.i = pi; pn.j = pj; pn.distance = Mathf.Sqrt(Mathf.Pow(targetPos.x - pi, 2) + Mathf.Pow(targetPos.y - pj, 2)); // if(pn.distance <= curDist){ pathNodeList.Add(pn); // } } } } } pj = curPathNode.j - aiRange; for (int i = -aiRange; i < aiRange; i++) { pi = curPathNode.i + i; if (pi >= 0 && pi < GlobalInfo.mapWidth && pj >= 0 && pj < GlobalInfo.mapHeight) { if (GlobalInfo.aiMapData[pi, pj]) { if (IsLinked(pi, pj, curPathNode.i, curPathNode.j)) { pn = new PathNodeClass(); pn.i = pi; pn.j = pj; pn.distance = Mathf.Sqrt(Mathf.Pow(targetPos.x - pi, 2) + Mathf.Pow(targetPos.y - pj, 2)); // if(pn.distance <= curDist){ pathNodeList.Add(pn); // } } } } } pi = curPathNode.i - aiRange; for (int j = -aiRange; j < aiRange; j++) { pj = curPathNode.j + j; if (pi >= 0 && pi < GlobalInfo.mapWidth && pj >= 0 && pj < GlobalInfo.mapHeight) { if (GlobalInfo.aiMapData[pi, pj]) { if (IsLinked(pi, pj, curPathNode.i, curPathNode.j)) { pn = new PathNodeClass(); pn.i = pi; pn.j = pj; pn.distance = Mathf.Sqrt(Mathf.Pow(targetPos.x - pi, 2) + Mathf.Pow(targetPos.y - pj, 2)); // if(pn.distance <= curDist){ pathNodeList.Add(pn); // } } } } } if (pathNodeList.Count > 0) { float min = 10000.0f; pn = new PathNodeClass(); foreach (PathNodeClass a in pathNodeList) { if (min > a.distance) { min = a.distance; pn = a; } } nextPathNode = pn; pathFound = true; } else { pathFound = false; } isFinding = false; }