Beispiel #1
0
	def ai(self, target, time):
		#Force death when health reaches 0
		if self.health <= 0:
			self.image = self.died
		
		#Do nothing when target is dead
		if (target.health <= 0 or target.on_stun == True) and self.health > 0 and self.on_damage == False and self.on_attack == False and self.on_stun == False:
			self.doing_nothing = True
			if self.look_right:
				self.breathing_right.play()
				self.image = self.breathing_right.get_current_image()
			else:
				self.breathing_left.play()
				self.image = self.breathing_left.get_current_image()
		#Move	
		elif self.health > 0 and self.on_damage == False and self.on_cover == False and self.on_attack == False and self.on_stun == False and target.on_stun == False:
			self.doing_nothing = False
			if (self.rect.centerx < target.rect.centerx and target.look_left == True) or (self.rect.centerx > target.rect.centerx and target.look_right == True):
				self.on_locked = True
			else: self.on_locked = False
			in_advantage = abs(self.rect.centerx - target.rect.centerx) > 230
			#Make decition
			if self.pose == "crafty":
				decition = Pose.crafty([self.on_locked, target.on_attack, target.on_cover, target.on_air, in_advantage])
			elif self.pose == "coward":
				decition = Pose.coward([self.on_locked, target.on_attack, target.on_cover, target.on_air, in_advantage])
			elif self.pose == "aggressive":
				decition = Pose.aggressive([self.on_locked, target.on_attack, target.on_cover, target.on_air, in_advantage])
			if decition == 1:
				#Reach target
				#Up
				if self.rect.bottom>(self.HEIGHT - 70):
					if self.rect.centery > target.rect.centery:
						if self.look_right:
							self.looking_right.play()
							self.image = self.looking_right.get_current_image()
						elif self.look_left:
							self.looking_left.play()
							self.image = self.looking_left.get_current_image()
						self.rect.centery -= self.speed_x * time
				#Down
				if self.rect.bottom<self.HEIGHT:
					if self.rect.centery < target.rect.centery:
						if self.look_right:
							self.looking_right.play()
							self.image = self.looking_right.get_current_image()
						elif self.look_left:
							self.looking_left.play()
							self.image = self.looking_left.get_current_image()
						self.rect.centery += self.speed_x * time
				#Right
				if self.rect.right<self.WIDTH:
					if target.rect.centerx>self.rect.centerx:
						self.look_left = False
						self.look_right = True
						self.looking_right.play()
						self.image = self.looking_right.get_current_image()
						self.rect.centerx += self.speed_x * time
				#Left
				if self.rect.left>0:
					if target.rect.centerx<self.rect.centerx:
						self.look_left = True
						self.look_right = False
						self.looking_left.play()
						self.image = self.looking_left.get_current_image()
						self.rect.centerx -= self.speed_x * time
				#Attack
				if target.health > 0:
					if self.ready2attack:
						#Close
						if abs(self.rect.centerx - target.rect.centerx) < 80:
							self.power = self.sword_power
							self.swoosh.get_sfx().play()
							if self.look_right:
								self.image = self.attacking_right
							else:
								self.image = self.attacking_left
							self.on_cover = False
							self.attack_duration = 10
							self.ready2attack = False
							self.reload_time = 30
							self.on_attack = True
								
						#Far
						if abs(self.rect.centerx - target.rect.centerx) < self.rifle_range:
							if abs(self.rect.centerx - target.rect.centerx) > 230:
								self.power = self.rifle_power + (-1 * (abs(int(self.rect.centerx - target.rect.centerx)/100)))
								self.shot.get_sfx().play()
								if target.rect.centerx > self.rect.centerx:
									self.look_right = True
									self.look_left = False
									self.image = self.attacking_right_far
								else:
									self.look_right = False
									self.look_left = True
									self.image = self.attacking_left_far
								self.on_cover = False
								self.attack_duration = 30
								self.ready2attack = False
								self.reload_time = 70
								self.on_attack = True
				
								
			elif decition == -1:
				#Retreat
				if target.health > 0:
					#Attack when in range
					if self.ready2attack == True and (abs(self.rect.centerx - target.rect.centerx) < self.rifle_range and abs(self.rect.centerx - target.rect.centerx) > 230):
						self.power = self.rifle_power + (-1 * (abs(int(self.rect.centerx - target.rect.centerx)/100)))
						self.shot.get_sfx().play()
						if target.rect.centerx > self.rect.centerx:
							self.look_right = True
							self.look_left = False
							self.image = self.attacking_right_far
						else:
							self.look_right = False
							self.look_left = True
							self.image = self.attacking_left_far
						self.on_cover = False
						self.attack_duration = 10
						self.ready2attack = False
						self.reload_time = 70
						self.on_attack = True
					#Close attack
					elif self.ready2attack == True and abs(self.rect.centerx - target.rect.centerx) < 30:
						self.power = self.sword_power
						self.swoosh.get_sfx().play()
						if self.look_right:
							self.image = self.attacking_right
						else:
							self.image = self.attacking_left
						self.on_cover = False
						self.attack_duration = 10
						self.ready2attack = False
						self.reload_time = 30
						self.on_attack = True
					#Go away if not
					else:
						#Up
						if self.rect.bottom>(self.HEIGHT - 70):
							if self.rect.centery < target.rect.centery:
								if self.look_right:
									self.looking_right.play()
									self.image = self.looking_right.get_current_image()
								elif self.look_left:
									self.looking_left.play()
									self.image = self.looking_left.get_current_image()
								self.rect.centery -= self.speed_x * time
						#Down
						if self.rect.bottom<self.HEIGHT:
							if self.rect.centery > target.rect.centery:
								if self.look_right:
									self.looking_right.play()
									self.image = self.looking_right.get_current_image()
								elif self.look_left:
									self.looking_left.play()
									self.image = self.looking_left.get_current_image()
								self.rect.centery += self.speed_x * time
						#Right
						if self.rect.right<self.WIDTH:
							if target.rect.centerx<self.rect.centerx:
								self.look_left = False
								self.look_right = True
								self.looking_right.play()
								self.image = self.looking_right.get_current_image()
								self.rect.centerx += self.speed_x * time
						#Left
						if self.rect.left>0:
							if target.rect.centerx>self.rect.centerx:
								self.look_left = True
								self.look_right = False
								self.looking_left.play()
								self.image = self.looking_left.get_current_image()
								self.rect.centerx -= self.speed_x * time