public void RemoveSegment(SimSegment segment) { segment.Destroy(); segments.Remove(segment); pathListener.OnSegmentRemoved(this, segment); }
public void Init(SimSegment segment) { this.segment = segment; gameObject.name = "Segment-" + segment.id; cube = GameObject.CreatePrimitive(PrimitiveType.Cube).transform; cube.parent = transform; Modified(); }
public void OnSegmentModified(SimPath path, SimSegment segment) { for (int i = 0; i < segmentsUnity.Count; i++) { if (segmentsUnity[i].segment == segment) { segmentsUnity[i].Modified(); break; } } }
public void OnSegmentAdded(SimPath path, SimSegment segment) { GameObject goSegment = new GameObject(); goSegment.transform.parent = transform; SimSegmentUnity segmentUnity = goSegment.AddComponent <SimSegmentUnity>(); segmentUnity.Init(segment); segmentsUnity.Add(segmentUnity); }
public SimSegment AddSegment(SimSegmentType segmentType, SimPoint p1, SimPoint p2) { SimSegment segment = new SimSegment(); segment.Init(this, segmentType, nextSegmentId++, p1, p2); segments.Add(segment); pathListener.OnSegmentAdded(this, segment); return(segment); }
public void OnSegmentRemoved(SimPath path, SimSegment segment) { for (int i = 0; i < segmentsUnity.Count; i++) { if (segmentsUnity[i].segment == segment) { GameObject.Destroy(segmentsUnity[i].gameObject); segmentsUnity.RemoveAt(i); break; } } }
// Use this for initialization void Start() { Simulation sim = new Simulation(); sim.simulationDefinition = new SimulationDefinitionLoader().LoadDefinitionFromString(cityToTest.text); Init(sim); SimBox city = sim.AddBox("city", Vector3.zero, 32, 32); SimPath road = city.GetPath("Road"); SimPoint p1 = road.AddPoint(new Vector3(20, 0, 20)); SimPoint p2 = road.AddPoint(new Vector3(50, 0, 50)); SimPoint p3 = road.AddPoint(new Vector3(20, 0, 50)); SimSegment s1 = road.AddSegment(sim.simulationDefinition.GetSegmentType("Dirt"), p1, p2); SimSegment s2 = road.AddSegment(sim.simulationDefinition.GetSegmentType("Dirt"), p2, p3); SimSegment s3 = road.AddSegment(sim.simulationDefinition.GetSegmentType("Dirt"), p3, p1); SimSegmentPosition unitPos; unitPos.segment = s1; unitPos.offset = 0.66f; city.AddUnit(sim.simulationDefinition.GetUnitType("Home"), unitPos); unitPos.segment = s1; unitPos.offset = 0.5f; city.AddUnit(sim.simulationDefinition.GetUnitType("Home"), unitPos); unitPos.segment = s2; unitPos.offset = 0.5f; city.AddUnit(sim.simulationDefinition.GetUnitType("Work"), unitPos); unitPos.segment = s3; unitPos.offset = 0.5f; city.AddUnit(sim.simulationDefinition.GetUnitType("Work"), unitPos); }
public SimPoint FindNextPoint(SimPoint fromPoint, string searchTarget, SimResourceBinCollection resources) { //This implementation MUST be replaced with something that is really fast.. right now //we are not even using a priority queue!! //We should store as much information as possible in each SimPoint to make this search as //fast as possible. closedSet.Clear(); openSet.Clear(); cameFrom.Clear(); scoreFromStart.Clear(); scorePlusHeuristicFromStart.Clear(); openSet.Add(fromPoint); scoreFromStart[fromPoint] = 0; scorePlusHeuristicFromStart[fromPoint] = scoreFromStart[fromPoint] + Heuristic(fromPoint, fromPoint); while (openSet.Count > 0) { SimPoint current = GetPointWithLowestScorePlusHeuristicFromStart(); if (current.GetUnitWithTargetAndCapacity(searchTarget, resources) != null) { if (current == fromPoint) { return(current); } while (cameFrom[current] != fromPoint) { current = cameFrom[current]; } return(current); } openSet.Remove(current); closedSet.Add(current); foreach (SimSegment segment in current.segments) { SimPoint neighbor; if (segment.point1 == current) { neighbor = segment.point2; } else { neighbor = segment.point1; } float neighborScoreFromStart = scoreFromStart[current] + segment.length; if (closedSet.Contains(neighbor)) { if (neighborScoreFromStart >= scoreFromStart[neighbor]) { continue; } } if (!openSet.Contains(neighbor) || neighborScoreFromStart < scoreFromStart[neighbor]) { cameFrom[neighbor] = current; scoreFromStart[neighbor] = neighborScoreFromStart; scorePlusHeuristicFromStart[neighbor] = neighborScoreFromStart + Heuristic(neighbor, fromPoint); if (!openSet.Contains(neighbor)) { openSet.Add(neighbor); } } } } //No path found.. return random point! if (fromPoint.segments.Count > 0) { SimSegment randomSegment = fromPoint.segments[rnd.Next(0, fromPoint.segments.Count)]; if (randomSegment.point1 == fromPoint) { return(randomSegment.point2); } else if (randomSegment.point2 == fromPoint) { return(randomSegment.point1); } } return(null); }
public void OnSegmentModified(SimPath path, SimSegment segment) { }
public void OnSegmentAdded(SimPath path, SimSegment segment) { }
public void OnSegmentRemoved(SimPath path, SimSegment segment) { }