コード例 #1
0
ファイル: world.py プロジェクト: sparshgarg23/CARLO
class World:
    def __init__(self, dt: float, width: float, height: float, ppm: float = 8):
        self.dynamic_agents = []
        self.static_agents = []
        self.t = 0  # simulation time
        self.dt = dt  # simulation time step
        self.visualizer = Visualizer(width, height, ppm=ppm)

    def add(self, entity: Entity):
        if entity.movable:
            self.dynamic_agents.append(entity)
        else:
            self.static_agents.append(entity)

    def tick(self):
        for agent in self.dynamic_agents:
            agent.tick(self.dt)
        self.t += self.dt

    def render(self):
        self.visualizer.create_window(bg_color='gray')
        self.visualizer.update_agents(self.agents)

    @property
    def agents(self):
        return self.static_agents + self.dynamic_agents

    def collision_exists(self, agent=None):
        if agent is None:
            for i in range(len(self.dynamic_agents)):
                for j in range(i + 1, len(self.dynamic_agents)):
                    if self.dynamic_agents[
                            i].collidable and self.dynamic_agents[j].collidable:
                        if self.dynamic_agents[i].collidesWith(
                                self.dynamic_agents[j]):
                            return True
                for j in range(len(self.static_agents)):
                    if self.dynamic_agents[
                            i].collidable and self.static_agents[j].collidable:
                        if self.dynamic_agents[i].collidesWith(
                                self.static_agents[j]):
                            return True
            return False

        if not agent.collidable: return False

        for i in range(len(self.agents)):
            if self.agents[i] is not agent and self.agents[
                    i].collidable and agent.collidesWith(self.agents[i]):
                return True
        return False

    def close(self):
        self.reset()
        self.static_agents = []
        if self.visualizer.window_created:
            self.visualizer.close()

    def reset(self):
        self.dynamic_agents = []
        self.t = 0