def hit(self, x, y): """ Return 1 if the target is hit by a bullet at x,y """ # target is anchord center, bottom width = self.right.width * self.scale height = self.right.height * self.scale # lower left hand coords lx = self.x - (width)/2.0 ly = self.y # upper right hand coords tx = self.x + (width)/2.0 ty = self.y + height if (x > lx and x < tx and y > ly and y < ty): Robot.total_killed += 1 Robot.in_a_row += 1 if (Robot.total_killed == 100): degrees_of_awesome.unlock(5) if (Robot.in_a_row == 5): degrees_of_awesome.unlock(9) return 1 return 0
def on_mouse_press(self,x,y,button,modifiers): if button == mouse.LEFT: GameMode.gunshot.play() if DEBUG: print "Pressed left mouse button (%s, %s)" %(x,y) # Check targets for hit check_hit=0 for t in self.target_controller.targets: if not t.is_dead and t.hit(x,y): c = random.randrange(0,3) GameMode.ninja_death[c].play() t.sepuku() check_hit=1 if DEBUG: print t.id, '(%.f, %.f, %.f)'%(t.x, t.y, t.z), 'killed' break # Score and Awesomeness degree if check_hit: self.hits +=1 self.in_a_row += 1 # z-axis is the ground plane # score based on target position rather than mouse pos hit_score = int(t.z/self.SDDOWN) # Sometimes the target is past 0 (i.e. t.z is -ve) if hit_score > 0: self.score += hit_score if(self.score >= 1000): degrees_of_awesome.unlock(6) if(self.in_a_row == 5): degrees_of_awesome.unlock(3) if(self.in_a_row == 100): degrees_of_awesome.unlock(4) else: self.in_a_row = 0 self.miss +=1
def on_draw(self): if self.handler.pause: self._blit_text(' Pause', '') return self.handler.window.clear() self.handler.background.draw(0,0,z=0.5) # Stats Calc health = (self.handler.HEALTH - self.handler.health_loss) / self.handler.HEALTH try: accuracy_value = self.handler.hits / (self.handler.hits + self.handler.miss) except ZeroDivisionError: accuracy_value = 1.0 accuracy_color = (int((1 - accuracy_value) * 255), int(accuracy_value * 255), 0, 255) if(self.handler.hits == 100 and accuracy_value > 0.85): degrees_of_awesome.unlock(8) # TODO: Put some monospace font here labels = [] label_properties = dict(font_size=20, color=accuracy_color, anchor_x='right', halign='right') y = 595 for l,v in [ ('Hits', str(self.handler.hits)), ('Miss', str(self.handler.miss)), ('Acc', '%.0f%%' %(accuracy_value*100)), ('Score', str(self.handler.score)), ('Health', '%.0f%%' %(health*100)), ('Level', '%s/%s' %( self.handler.target_controller.level, len(self.handler.LEVELS)+1))]: y -= 25 labels.append(text.Label(l, x=795, y=y, **label_properties)) labels.append(text.Label(v, x=700, y=y, **label_properties)) for l in labels: l.draw() # Show some text that stating well done if self.handler.game_complete: text.Label( 'GAME COMPLETED', font_name='Times New Roman', font_size=36, color=(64,64,64,128), x=self.handler.window.width//2, y=self.handler.window.height-50, anchor_x='center', anchor_y='center').draw() if DEBUG: debug_label.draw() self.handler.crossHair.draw() # Redraw existing targets for t in reversed(self.handler.target_controller.targets): t.draw() # Health Bar self.handler.health_bar.draw(25,10,scale=(health,1)) # The game is over, but let the poor guy play neways if self.handler.game_over: self._blit_text('who cares?', 'Game Over, but') # Show some text at the end of the level if self.handler.level_anime == 1: self._blit_text(' Complete', 'Level %s' %( self.handler.target_controller.level)) elif self.handler.level_anime == 2: self._blit_text(' Level %s' %( self.handler.target_controller.level+1), 'Proceed...') elif self.handler.level_anime == 3: self._blit_text('', ' - HAI -') # Show achievement unlocked if (self.handler.achievement_counter): self.handler.achievement_counter -= 1 self._blit_text(self.degree_text) elif (degrees_of_awesome.new_achievements): self.degree_text = degrees_of_awesome.new_achievements.pop()[0] self._blit_text(self.degree_text) self.handler.achievement_counter = 75