def draw_branch(self, pos, level = 0, id = 0, true_branch = True): #draw the condition blocks self.Add((CodeContainer(self.getCodeName(level, id), self.surf, pos))) spread = 75*(2**(self.levels-level-2)) truepos = Base.tuple_add(pos, (75*2, -spread)) falsepos = Base.tuple_add(pos, (75*2, spread)) if level == self.levels-1: self.Add(CodeContainer(self.getCodeName(level+1, 2*id), self.surf, truepos)) self.Add(CodeContainer(self.getCodeName(level+1, 2*id+1), self.surf, falsepos)) return id+1 else: self.draw_branch(truepos, level + 1, 2*id, True) self.draw_branch(falsepos, level + 1, 2*id+1, False)
def Retreat(self): if self.Enemies == []: return False # print self.Name, "is Retreating" vector = [0, 0] for enemy in self.Enemies: distx, disty = Base.tuple_add(enemy[1].getPos(), self.getPos(), '-') if distx == 0:forcex = random.choice([-1, 0, 1]) else:forcex = self.Sensors/distx if disty == 0:forcey = random.choice([-1, 0, 1]) else:forcey = self.Sensors/disty vector = Base.tuple_add(vector, (-forcex,-forcey)) x, y = vector if self.move(x,y): return True else: return False
def setGunPos(self): C = self.Sprite.rect.center try: xadd = int(math.ceil(20*math.cos(math.radians(self.Angle)))) except: xadd = 0 try: yadd = int(math.ceil(20*math.sin(math.radians(self.Angle)))) except: yadd = 10 if not self.Facing: xadd*=-1 GunPos = Base.tuple_add(C, (xadd, -yadd)) return GunPos
def makeUI(self): last = Base.tuple_add(self.surf.get_rect().center, (-(111+self.levels*75), -75/2)) Start = GameObject("Start", self.surf, "code-start.png", last) self.Add(Start) start_code = Base.tuple_add(last, (75*2, 0)) self.draw_branch(start_code) Code1 = CodeElement("Code1", "def cond1(self):\n\ if len(self.Enemies) > len(self.Allies):\n\ return True\n\ else:\n\ return False#dividercond1", self.surf, "code-start.png", (10,10)) Code2 = CodeElement("Code2", "Retreat", self.surf, "code-start.png", (100,10)) Code3 = CodeElement("Code3", "Attack", self.surf, "code-start.png", (190,10)) Code1.SetSnapTo(self.get_container_sprites(),True) Code2.SetSnapTo(self.get_container_sprites(),True) Code3.SetSnapTo(self.get_container_sprites(),True) self.Add(Code1, Code2, Code3) Compile = UIitem("Compile", self.surf, "code-start.png", Base.tuple_add(self.surf.get_size(), (-100,-100))) Compile.SetOnClick({"Action": "Compile"}) self.Add(Compile)
def GetTileCenter(self, *argsv): position = [0, 0] if len(argsv) == 1: arg = argsv[0] col = arg[0] row = arg[1] else: col = argsv[0] row = argsv[1] offset = self.Sprite.rect.topleft position[0] = int((col+0.5)*self.tile_width) position[1] = int((row+0.5)*self.tile_height) position = Base.tuple_add(position, offset) return position
def Attack(self, enemy = None): if self.Enemies == []: return False if enemy == None: enemy = self.Enemies[0] if enemy[0] > self.atrange: # print self.Name, "is Attacking: Moving into range" x, y= Base.tuple_add(enemy[1].getPos(), self.getPos(), '-') self.move(x, y) else: if self.cur_atcd == 0: # print self.Name, "attacked for", self.atdmg, "damage;", \ # enemy[1].Name, "has", enemy[1].hitpoints, "hp left" enemy[1].takeDamage(self.atdmg) self.cur_atcd = 10 else: self.cur_atcd -=1 return True
def Launch(self, angle, power, position): self.Sprite.image = self.orig_im self.Sprite.rect = self.orig_rect if self.Launched: return True self.Angle = angle self.RotateTo(self.Angle) vx = int(math.ceil(power*math.cos(math.radians(angle)))) vy = int(-math.ceil(power*math.sin(math.radians(angle)))) if not self.Facing: vx*=-1 self.Velocity = (vx, vy) self.Recenter(Base.tuple_add(position,self.Velocity)) self.Launched = True self.LaunchCount = 0 return True
def update(self): percent = int(math.ceil(190*(float(self.Value)/50))) TopLeft = Base.tuple_add(self.rect[0], self.rect[1]) TopLeft = Base.tuple_add(TopLeft,(-45,-percent-5)) self.FillRect = (TopLeft, (40, percent)) return True