예제 #1
0
    Vector3 BoundPosition(BoidControl boid)
    {
        Vector3 v = Vector3.zero;

        if (boid.transform.position.x < -settings.xBound)
        {
            v = new Vector3(settings.boundFactor, v.y, v.z);
        }
        else if (boid.transform.position.x > settings.xBound)
        {
            v = new Vector3(-settings.boundFactor, v.y, v.z);
        }
        if (boid.transform.position.z < -settings.zBound)
        {
            v = new Vector3(v.x, v.y, settings.boundFactor);
        }
        else if (boid.transform.position.z > settings.zBound)
        {
            v = new Vector3(v.x, v.y, -settings.boundFactor);
        }
        if (boid.transform.position.y < -settings.yBound)
        {
            v = new Vector3(v.x, settings.boundFactor, v.z);
        }
        else if (boid.transform.position.y > settings.yBound)
        {
            v = new Vector3(v.x, -settings.boundFactor, v.z);
        }

        return(v);
    }
예제 #2
0
 public BoidActionCohesion(BoidControl leader, IList<BoidControl> boidList, int cohesionRadius)
 {
     _leader = leader;
     _boidList = boidList;
     _cohesionRadius = cohesionRadius;
     _seekAction = new BoidActionSeek();
 }
 public BoidCombinedActionFCAS(BoidControl boid, IList<BoidControl> boidList, IList<BoidControl> predatorBoidsList, int cohesionRadius)
 {
     _boidList = boidList;
     _randomPredatorBoidsList = predatorBoidsList;
     _fleeAction = new BoidActionFlee();
     _cohesionAction = new BoidActionCohesion(boid, boidList, cohesionRadius);
     _aligmentAction = new BoidActionAligment(boid, boidList);
     _separateAction = new BoidActionSeparate(boid, boidList);
 }
예제 #4
0
    Vector3 FlockWithOthers(BoidControl boid, List <BoidControl> boids)
    {
        Vector3 vel = Vector3.zero;

        for (int i = 0; i < boids.Count; i++)
        {
            if (!boids[i].Equals(boid) && Vector3.Distance(boids[i].transform.position, boid.transform.position) < settings.flockRadius)
            {
                vel += boids[i].vel;
            }
        }
        return(vel / (boids.Count - 1));
    }
예제 #5
0
    Vector3 MoveAwayFromOthers(BoidControl boid, List <BoidControl> boids)
    {
        Vector3 c = Vector3.zero;

        for (int i = 0; i < boids.Count; i++)
        {
            if (!boids[i].Equals(boid) && Vector3.Distance(boids[i].transform.position, boid.transform.position) < settings.minDist)
            {
                c -= (boids[i].transform.position - boid.transform.position);
            }
        }
        return(c);
    }
예제 #6
0
    Vector3 MoveToCenter(BoidControl boid, List <BoidControl> boids)
    {
        Vector3 center = Vector3.zero;

        for (int i = 0; i < boids.Count; i++)
        {
            if (!boids[i].Equals(boid))
            {
                center += boids[i].transform.position;
            }
        }
        return(center / (boids.Count - 1));
    }
예제 #7
0
    void Start()
    {
        GameObject ground = GameObject.Find("Plane");

        settings.xBound = ground.GetComponent <MeshFilter>().mesh.bounds.size.x / 2 * ground.transform.localScale.x;
        settings.zBound = ground.GetComponent <MeshFilter>().mesh.bounds.size.z / 2 * ground.transform.localScale.z;
        settings.yBound = 10f;

        for (int i = 0; i < numBoids; i++)
        {
            BoidControl newBoid = Instantiate(boid);
            newBoid.Init(settings);
            boids.Add(newBoid);
        }
    }
예제 #8
0
 public void SetController(BoidControl givenController)
 {
     controller    = givenController;
     minVelocity   = controller.minVelocity;
     maxVelocity   = controller.maxVelocity;
     randomness    = controller.randomness;
     currentTarget = controller.testTarget;
     rule1Weight   = controller.cOfMass;
     rule2Weight   = controller.boidAvoid;
     rule3Weight   = controller.vMatch;
     rule4Weight   = controller.toGoal;
     rule5Weight   = controller.torchAvoid;
     rule6Weight   = controller.playerAvoid;
     if (controller.torch != null)
     {
         torch = controller.torch;
     }
     distFromOtherBoids = controller.distFromOtherBoids;
 }
예제 #9
0
 //private int _aligmentRadius = 10;
 public BoidActionAligment(BoidControl packLeader, IList<BoidControl> boidList)
 {
     _leader = packLeader;
     _boidList = boidList;
     //_seek = new BoidActionSeek();
 }
예제 #10
0
 public BoidActionSeparate(BoidControl boid, IList<BoidControl> boidList)
 {
     _boidList = new List<BoidControl>();
     _boid = boid;
     _boidList = boidList;
 }