Пример #1
0
 public void Init(FishSpawner fishSpawner, FishSpawn fishSpawn, Transform parent, Vector2 pos)
 {
     spawner = fishSpawner;
     spawn   = fishSpawn;
     transform.SetParent(parent);
     transform.position = pos;
 }
 //Creates FishSpawners from Fish data and stores them in a list (_fishSpawners).
 private void InstanstiateFishSpawners()
 {
     for (int index = 0; index < _fishToSpawn.Length; index++)
     {
         FishSpawner fishSpawner = new FishSpawner(_fishToSpawn[index]._spawnFrequency, index, _fishToSpawn[index]._fishSpawnAmount, this);
         _fishSpawners.Add(fishSpawner);
     }
 }
Пример #3
0
 public void Initialize(FishSpawner _spawner)
 {
     spawner     = _spawner;
     velocity    = transform.forward * Random.Range(minSpeed, maxSpeed);
     cohereDir   = Vector3.zero;
     alignDir    = Vector3.zero;
     separateDir = Vector3.zero;
 }
Пример #4
0
    void Draw()
    {
        FishSpawner spawner = (FishSpawner)target;

        for (int i = 0; i < spawner.spawnPositions.Count; i++)
        {
            Handles.DrawSphere(i, spawner.spawnPositions[i].position, Quaternion.identity, 5f);
        }
    }
Пример #5
0
 void Start()
 {
     fishSpawner = GetComponent <FishSpawner> ();
     if (fishUpdater)
     {
         InvokeRepeating("GetXML", 1, 600);
     }
     else
     {
         GetXML();
     }
 }
Пример #6
0
    // Start is called before the first frame update
    void Start()
    {
        fishSpawner = GameObject.FindObjectOfType <FishSpawner>();

        for (int i = 0; i < 4; i++)
        {
            if (i > fishSpawner.fishFreqs.Count)
            {
                break;
            }
            attachPoints[i].GetComponent <FishInputAttach>().fishType = fishSpawner.fishFreqs[i].fishType;
        }
    }
Пример #7
0
    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();

        FishSpawner spawner = (FishSpawner)target;

        if (GUILayout.Button("Add fish"))
        {
            Undo.RecordObject(spawner, "Add fish");
            spawner.AddFish();
        }
        if (GUILayout.Button("Add position"))
        {
            Undo.RecordObject(spawner, "Add position");
            spawner.AddPosition();
            //EditorUtility.SetDirty(tar);
        }
    }
Пример #8
0
 void Start()
 {
     fs = GameObject.FindObjectOfType <FishSpawner>();
 }
Пример #9
0
 void Start()
 {
     fishspawner = gameObject.GetComponent <FishSpawner>();
 }
Пример #10
0
    // Update is called once per frame
    void FixedUpdate()
    {
        Vector3 separation = Vector3.zero;
        Vector3 cohesion   = Vector3.zero;
        Vector3 alignment  = Vector3.zero;
        Vector3 walls      = Vector3.zero;

        foreach (FishSchooling fish in FishSpawner.fish)
        {
            GameObject f = fish.gameObject;
            Vector3    distanceVector    = transform.position - f.transform.position;
            float      distanceMagnitude = distanceVector.sqrMagnitude;
            Vector3    betweenVector     = distanceVector.normalized;
            char       ally = FishSpawner.getFishTypeDiplomacy(gameObject, f);
            if (distanceMagnitude < separationDistance)
            {
                separation += betweenVector * distanceMagnitude / separationDistance;
            }
            if (distanceMagnitude > cohesionMinDistance && distanceMagnitude < cohesionMaxDistance &&
                (ally == 'f'))
            {
                cohesion += betweenVector * -1 * distanceMagnitude / (cohesionMaxDistance - cohesionMinDistance);
            }
            if (distanceMagnitude < alignmentDistance && (ally == 'n' || ally == 'f'))
            {
                alignment += f.transform.forward / separationDistance;
            }
        }
        if (transform.position.x > wallLocations - wallSeparationDistance)
        {
            walls += new Vector3(-1.0f / (wallLocations - transform.position.x), 0.0f, 0.0f);
        }
        else if (transform.position.x < -1.0f * wallLocations + wallSeparationDistance)
        {
            walls += new Vector3(-1.0f / (-1.0f * wallLocations + transform.position.x), 0.0f, 0.0f);
        }
        if (transform.position.y > wallLocations - wallSeparationDistance)
        {
            walls += new Vector3(0.0f, -1.0f / (wallLocations - transform.position.y), 0.0f);
        }
        else if (transform.position.y < -1.0f * wallLocations + wallSeparationDistance)
        {
            walls += new Vector3(0.0f, -1.0f / (-1.0f * wallLocations + transform.position.y), 0.0f);
        }
        if (transform.position.z > wallLocations - wallSeparationDistance)
        {
            walls += new Vector3(0.0f, 0.0f, -1.0f / (wallLocations - transform.position.z));
        }
        else if (transform.position.z < -1.0f * wallLocations + wallSeparationDistance)
        {
            walls += new Vector3(0.0f, 0.0f, -1.0f / (-1.0f * wallLocations + transform.position.z));
        }

        separation = separation.normalized * separationDensity;
        cohesion   = cohesion.normalized * cohesionDensity;
        alignment  = alignment.normalized * alignmentDensity;
        walls      = walls.normalized * wallSeparationDensity;

        Vector3 schoolingVector = (transform.forward) + (separation + cohesion + alignment + walls) *
                                  Time.fixedDeltaTime * turnSpeed;

        transform.forward = (schoolingVector).normalized;

        rigidbody.velocity = transform.forward * speed;
    }