Beispiel #1
0
    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);
    }
Beispiel #2
0
    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;
        }
    }