def update(self): self.vel = v2.addVects(self.vel, self.accel) self.pos = [ self.pos[0] + self.vel.components[0], self.pos[1] + self.vel.components[1] ] self.angle = self.vel.getAngle() self.image = pygame.transform.rotate(self.original, self.angle) self.rect = self.image.get_rect(center=self.pos) DispSurface.blit(self.image, self.rect) #This code is for screen wrapping of boids when we are not destroying them for going out of the screen # if self.pos[0] > width: # self.pos[0] = self.pos[0] - width # if self.pos[0] < 0: # self.pos[0] = width - self.pos[0] # if self.pos[1] > height: # self.pos[1] = self.pos[1] - height # if self.pos[1] < 0: # self.pos[1] = height - self.pos[1] if self.vel.getMag() > maxSpeed: self.vel.setMag(maxSpeed) if self.accel.getMag() > maxAccel: self.accel.setMag(maxAccel)
for others in tempBoids: x1, y1 = me.pos x2, y2 = others.pos if (x1 - x2)**2 + (y1 - y2)**2 < radius**2: proximity.append(others) me.proximity = proximity #if there is anything in the boid's proximity, it Tries to align, avoid bumping, and generally move towards mean position if me.proximity: #alignment with direction of other boids sum_an1 = 0 sum_an2 = 0 for x in me.proximity: remVel = v2.Vector() remVel.setVectorC(0, 0) remVel = v2.addVects(remVel, x.vel) if remVel.getMag(): remVel.setMag(1 / remVel.getMag()) sum_an1 += remVel.components[0] sum_an2 += remVel.components[1] sum_an1 /= len(me.proximity) sum_an2 /= len(me.proximity) angVector = v2.Vector() angVector.setVectorC(sum_an1, sum_an2) me.avgAngle = angVector.getAngle() #Average angle for neighbors me.accel.setVectorA(me.avgAngle, 1) #seperation me_post = (me.pos[0], me.pos[1]) pos_VectMe = v2.Vector() pos_VectMe.setVectorC(me_post[0], me_post[1])