예제 #1
0
    //IEnumerator FishRoutine()
    //{
    //    while (true)
    //    {
    //        Vector3 center = fishManager.transform.position;

    //        if (Vector3.Distance(transform.position, center) > fishManager.spawnRange)
    //        {
    //            turning = true;
    //        }
    //        else
    //        {
    //            if (turning)
    //            {
    //                speed = Random.Range(avgSpeed * 0.75f, avgSpeed * 1.25f);
    //            }
    //            turning = false;
    //        }

    //        if (turning)
    //        {
    //            Vector3 direction = center - transform.position;
    //            transform.rotation = Quaternion.Slerp(
    //                transform.rotation,
    //                Quaternion.LookRotation(direction),
    //                rotationSpeed * Time.deltaTime);

    //            speed = Random.Range(catchUpSpeed * 0.75f, catchUpSpeed * 1.25f);
    //        }
    //        else
    //        {
    //            ApplyRules();
    //        }

    //        yield return new WaitForSeconds(Random.Range(0.05f, 0.2f));
    //    }
    //}

    void ApplyRules()
    {
        // Rule 1: Go towards group center
        // Rule 2: Move towards goal of the group
        // Rule 3: Avoid other group members

        Vector3 vectorCenter = Vector3.zero;
        Vector3 vectorAvoid  = Vector3.zero;
        float   groupSpeed   = 0;

        Vector3 goalPos = fishManager.GetGoalPosition();

        float dist;

        int groupSize = 0;

        foreach (GameObject obj in fishManager.allFish)
        {
            if (obj != this.gameObject)
            {
                dist = Vector3.Distance(obj.transform.position, this.transform.position);

                if (dist <= neighbourDistance)
                {
                    vectorCenter += obj.transform.position;
                    groupSize++;

                    if (dist < avoidanceDistance)
                    {
                        vectorAvoid += (this.transform.position - obj.transform.position);
                    }

                    FishLogic otherFish = obj.GetComponent <FishLogic>();
                    groupSpeed += otherFish.speed;
                }
            }
        }

        if (groupSize > 0)
        {
            vectorCenter /= groupSize;
            vectorCenter += goalPos - this.transform.position;

            speed = groupSpeed / groupSize;

            Vector3 direction = (vectorCenter + vectorAvoid) - transform.position;
            if (direction != Vector3.zero)
            {
                transform.rotation = Quaternion.Slerp(
                    transform.rotation,
                    Quaternion.LookRotation(direction),
                    rotationSpeed * Time.deltaTime);
            }
        }
    }
    void CreateGrid()
    {
        for (int i = 0; i < levelRawData.Length; i++)
        {
            int x = i / 5;
            int y = i % 5;

            if (levelRawData[i] != 0)
            {
                GameObject ballPrefabClone = (GameObject)Instantiate(ballPrefab, new Vector3(x - 2.5f, y - 3, 0), transform.rotation);
                fishCounter.Add(ballPrefabClone);
                FishLogic rememberLevel = ballPrefabClone.GetComponent <FishLogic>();
                rememberLevel.level = levelRawData[i];
                ballPrefabClone.gameObject.transform.localScale = new Vector3(1, ballPrefabClone.gameObject.transform.localScale.y - ((rememberLevel.level - 1) * 0.1f), 1);
                ballPrefabClone.gameObject.GetComponent <Renderer>().material = fishMaterials[rememberLevel.level - 1];
            }
        }

        GameObject   test = (GameObject)Instantiate(buttons[3], new Vector3(0, -5.36f, 0), Quaternion.identity);
        LvlIndicator setLevelIndicator = test.transform.Find("LevelIndicator 1").GetComponent <LvlIndicator>();

        setLevelIndicator.lvl = LoadXMLData.idNumbers.IndexOf(ReloadLvl.levelIdCopy);
    }