Implemented removal of cars if the node they're on gets removed
This commit is contained in:
@@ -76,6 +76,15 @@ delete_entity :: proc(self: ^Simulator, entity_index: u32, type: common.Entity)
|
||||
|
||||
switch type {
|
||||
case .Node:
|
||||
// get cars that are on that node
|
||||
|
||||
for i in 0..<len(self.cars) {
|
||||
pos := self.cars[i].pos
|
||||
if pos.type != .Node || pos.ref != entity_index do continue
|
||||
|
||||
delete_entity(self, u32(i), .Car)
|
||||
}
|
||||
|
||||
unordered_remove(&self.nodes, entity_index)
|
||||
if !swap_made do return {}, false
|
||||
|
||||
@@ -103,15 +112,13 @@ get_free_node :: proc(self: ^Simulator) -> Maybe(u32) {
|
||||
car_occupied_nodes: [dynamic]u32
|
||||
|
||||
for car in self.cars {
|
||||
node, ok := car.node_pos.?
|
||||
if !ok do continue
|
||||
if car.pos.type != .Node do continue
|
||||
|
||||
if common.list_contains(car_occupied_nodes[:], node) do continue
|
||||
append(&car_occupied_nodes, node)
|
||||
if common.list_contains(car_occupied_nodes[:], car.pos.ref) do continue
|
||||
append(&car_occupied_nodes, car.pos.ref)
|
||||
}
|
||||
|
||||
if len(car_occupied_nodes) == len(self.nodes) do return nil
|
||||
|
||||
for {
|
||||
node := rand.uint32_max(u32(len(self.nodes)))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user