GameObject FindBestOption() { var pos = GameSystem.GetPosition(gameObject); var originUp = new Vector3(pos.x, 0.5f, pos.z); var originDown = new Vector3(pos.x, 0.5f, pos.z); var originLeft = new Vector3(pos.x, 0.5f, pos.z); var originRight = new Vector3(pos.x, 0.5f, pos.z); RaycastHit upHit; RaycastHit downHit; RaycastHit leftHit; RaycastHit rightHit; var upRay = new Ray(originUp, Vector3.forward); Physics.Raycast(upRay, out upHit); var downRay = new Ray(originDown, Vector3.back); Physics.Raycast(downRay, out downHit); var leftRay = new Ray(originLeft, Vector3.left); Physics.Raycast(leftRay, out leftHit); var rightRay = new Ray(originRight, Vector3.right); Physics.Raycast(rightRay, out rightHit); /* FIND BOMBS */ if (upHit.collider.CompareTag("BOMB") && upHit.distance < upHit.transform.GetComponent <BombExplosion>().GetBombPower()) { return(upHit.collider.gameObject); } if (downHit.collider.CompareTag("BOMB") && downHit.distance < downHit.transform.GetComponent <BombExplosion>().GetBombPower()) { return(downHit.collider.gameObject); } if (leftHit.collider.CompareTag("BOMB") && leftHit.distance < leftHit.transform.GetComponent <BombExplosion>().GetBombPower()) { return(leftHit.collider.gameObject); } if (rightHit.collider.CompareTag("BOMB") && rightHit.distance < rightHit.transform.GetComponent <BombExplosion>().GetBombPower()) { return(rightHit.collider.gameObject); } /* FIND SMOKE */ if (GameSystem.CompareFirstTagLetters(upHit.collider.tag, "SMOKE")) { return(upHit.collider.gameObject); } if (GameSystem.CompareFirstTagLetters(downHit.collider.tag, "SMOKE")) { return(downHit.collider.gameObject); } if (GameSystem.CompareFirstTagLetters(leftHit.collider.tag, "SMOKE")) { return(leftHit.collider.gameObject); } if (GameSystem.CompareFirstTagLetters(rightHit.collider.tag, "SMOKE")) { return(rightHit.collider.gameObject); } /* FIND GIFTS */ if (GameSystem.CompareFirstTagLetters(upHit.collider.tag, "GIFT")) { return(upHit.collider.gameObject); } if (GameSystem.CompareFirstTagLetters(downHit.collider.tag, "GIFT")) { return(downHit.collider.gameObject); } if (GameSystem.CompareFirstTagLetters(leftHit.collider.tag, "GIFT")) { return(leftHit.collider.gameObject); } if (GameSystem.CompareFirstTagLetters(rightHit.collider.tag, "GIFT")) { return(rightHit.collider.gameObject); } /* FIND OPPONENTS */ if (upHit.collider.CompareTag("BALL")) { return(upHit.collider.gameObject); } if (downHit.collider.CompareTag("BALL")) { return(downHit.collider.gameObject); } if (leftHit.collider.CompareTag("BALL")) { return(leftHit.collider.gameObject); } if (rightHit.collider.CompareTag("BALL")) { return(rightHit.collider.gameObject); } /* FIND GREENS */ if (upHit.collider.CompareTag("GREEN")) { return(upHit.collider.gameObject); } if (downHit.collider.CompareTag("GREEN")) { return(downHit.collider.gameObject); } if (leftHit.collider.CompareTag("GREEN")) { return(leftHit.collider.gameObject); } if (rightHit.collider.CompareTag("GREEN")) { return(rightHit.collider.gameObject); } /* NOTHING INTERESTING */ return(OptionNotFound); }
private void FindTask() { var option = FindBestOption(); //print(option); // ----- ----- ----- if (option == OptionNotFound) { bm.RandomMove(); return; } // ----- ----- ----- var optionPos = GameSystem.GetPosition(option); if (option.CompareTag("SMOKE")) { print("SMOKE"); } if (option.CompareTag("BOMB")) { var ballPos = GameSystem.GetPosition(gameObject); var relation = GetRelationWithObject(option); if (relation.Equals("OnUp")) { if (bm.FreePosOnRight()) { bm.goal = new Vector3Int(ballPos.x + 2, 0, ballPos.z); } else if (bm.FreePosOnLeft()) { bm.goal = new Vector3Int(ballPos.x - 2, 0, ballPos.z); } else { bm.goal = new Vector3Int(ballPos.x, 0, ballPos.z - 2); } } else if (relation.Equals("OnDown")) { if (bm.FreePosOnRight()) { bm.goal = new Vector3Int(ballPos.x + 2, 0, ballPos.z); } else if (bm.FreePosOnLeft()) { bm.goal = new Vector3Int(ballPos.x - 2, 0, ballPos.z); } else { bm.goal = new Vector3Int(ballPos.x, 0, ballPos.z + 2); } } else if (relation.Equals("OnLeft")) { if (bm.FreePosOnUp()) { bm.goal = new Vector3Int(ballPos.x, 0, ballPos.z + 2); } else if (bm.FreePosOnDown()) { bm.goal = new Vector3Int(ballPos.x, 0, ballPos.z - 2); } else { bm.goal = new Vector3Int(ballPos.x + 2, 0, ballPos.z); } } else if (relation.Equals("OnRight")) { if (bm.FreePosOnUp()) { bm.goal = new Vector3Int(ballPos.x, 0, ballPos.z + 2); } else if (bm.FreePosOnDown()) { bm.goal = new Vector3Int(ballPos.x, 0, ballPos.z - 2); } else { bm.goal = new Vector3Int(ballPos.x - 2, 0, ballPos.z); } } return; } if (GameSystem.CompareFirstTagLetters(option.tag, "GIFT")) { var relation = GetRelationWithObject(option); if (relation.Equals("OnUp")) { bm.goal = new Vector3Int(optionPos.x, 0, optionPos.z + 2); } if (relation.Equals("OnDown")) { bm.goal = new Vector3Int(optionPos.x, 0, optionPos.z - 2); } if (relation.Equals("OnLeft")) { bm.goal = new Vector3Int(optionPos.x - 2, 0, optionPos.z); } if (relation.Equals("OnRight")) { bm.goal = new Vector3Int(optionPos.x + 2, 0, optionPos.z); } } if (option.CompareTag("BALL")) { var dist = GameSystem.GetDistBetween(gameObject, option); if (dist <= 1) { bp.InsertBomb(); bm.RandomMove(); } else if (dist - 2 <= bp.BombPower) { bp.InsertBomb(); } else { bm.goal = optionPos; } return; } if (option.CompareTag("GREEN")) { var dist = GameSystem.GetDistBetween(gameObject, option); if (dist <= 1) { bp.InsertBomb(); bm.RandomMove(); } else { bm.goal = optionPos; } return; } }