public Vector3 GetNewPos(PolyAgent me) { Vector3 v1 = Cohesion(me); Vector3 v2 = Separation(me); return(v1 + v2); }
public KeyValuePair <PolyAgent, Vector3> NextAgentAndCustomer(List <PolyAgent> agents) { if (customers.Count == 0) { throw new UnassignedReferenceException("customers list is empty"); } Vector3 ret = Vector3.zero; float minCost = -1; int j = -1; PolyAgent closestAgent = null; foreach (PolyAgent agent in agents) { for (int i = 0; i < customers.Count; i++) { float cost = Dist(customers[i], agent); if (minCost == -1 || cost < minCost) { minCost = cost; j = i; ret = customers[i]; closestAgent = agent; } } } customers.RemoveAt(j); return(new KeyValuePair <PolyAgent, Vector3> (closestAgent, ret)); }
public void SetPath(List <Vector3> path, PolyAgent agent, List <Line> lines) { this.path = path; this.agent = agent; collision = new PolyCollision(lines); }
public LeaderFollower(string agentId, Vector3 agentPos, LeaderFollower parent, List <Vector3> wp = null) { agent = new PolyAgent(agentId, agentPos, Vector3.zero, 5, modelType); agent.agent.renderer.material.color = Color.black; leaderWP = wp; children = new List <LeaderFollower>(); children.Add(new LeaderFollower()); children.Add(new LeaderFollower()); this.parent = parent; }
private float Dist(Vector3 customer, PolyAgent agent) { float first = Mathf.Abs(customer.x - agent.agent.transform.position.x) + Mathf.Abs(customer.z - agent.agent.transform.position.z); float second = Mathf.Abs(agent.end.x - customer.x) + Mathf.Abs(agent.end.z - customer.z); if (customers.Count / size > 0.5) { return(first); } return(first + second); }
Vector3 Cohesion(PolyAgent me) { Vector3 avg = me.agent.transform.position; foreach (PolyAgent agent in agents) { if (agent != me) { avg = avg + agent.agent.transform.position; } } avg = avg / (agents.Count - 2); return(avg - me.agent.transform.position); }
Vector3 Separation(PolyAgent me) { Vector3 c = Vector3.zero; foreach (PolyAgent agent in agents) { if (agent != me) { if (Vector3.Distance(agent.agent.transform.position, me.agent.transform.position) < sepDist) { c = c - (agent.agent.transform.position - me.agent.transform.position); } } } return(c * 5); }
Vector3 Tendency(PolyAgent me, Vector3 to) { return((to - me.agent.transform.position) / 1); }