コード例 #1
0
ファイル: pyfxr_gui.py プロジェクト: lordmauve/pyfxr
 def draw(self):
     x, y = self.pos
     checkbox = Rect(x - 8, y - 8, 16, 16)
     rounded_rect(WHITE_KEY, checkbox)
     if self.selected:
         pygame.draw.circle(screen, pygame.Color('#006600'), self.pos, 5)
     textbox = text(self.label, (checkbox.right + 8, self.rect.top + 1))
     self.rect = checkbox.union(textbox)
コード例 #2
0
ファイル: module.py プロジェクト: fhorinek/pi8bit
    def update_rect(self):
        rect = Rect(0, 0, 0, 0)
        for k in self.objects:
            o = self.objects[k]
            rect = rect.union(o.rect)
            
        self.rect.w = rect.w + self.canvas.style["d_space"] * 2
        self.rect.h = rect.h + self.canvas.style["d_space"] * 2

        self.offset_x = self.canvas.style["d_space"]
        self.offset_y = self.canvas.style["d_space"]
        
        if len(self.inputs) > 1:
            self.rect.w += self.parent.canvas.style["d_input"]
            self.offset_x += self.parent.canvas.style["d_input"]

        if len(self.outputs) > 1:
            self.rect.w += self.parent.canvas.style["d_output"]

        self.rect_rel = Rect(self.rect)
        self.rect_rel.x = 0
        self.rect_rel.y = 0
        self.update_io_xy()
コード例 #3
0
ファイル: monster.py プロジェクト: pawlos/battle-city-ai
class Monster(object):
    id = None  # type: UUID
    direction = Direction.UP
    speed = 0
    is_freeze = False
    position = None  # type: Rect
    old_position = None  # type: Rect
    parent = None  # type: Monster

    SIZE = 8

    def __init__(self, x: int, y: int, direction: Direction = None):
        self.id = uuid4()
        size = self.SIZE
        self.position = Rect(x, y, size, size)
        self.set_old_position()
        if direction:
            self.direction = direction

    def set_old_position(self):
        self.old_position = self.position.copy()

    def set_position(self, x: int, y: int):
        self.position.x = x
        self.position.y = y

    def set_speed(self, speed: int):
        self.speed = speed

    def set_freeze(self):
        self.is_freeze = True

    def unset_freeze(self):
        self.is_freeze = False

    def set_direction(self, direction: Direction):
        self.direction = direction

    def get_type(self):
        return self.__class__.__name__.lower()

    def get_grid_position(self):
        position = self.position
        return Rect(
            # (x >> 4) << 4 is faster than floor(x / 16) * 16
            (position.x >> 4) << 4,
            (position.y >> 4) << 4,
            32,
            32,
        )

    def check_collision_with_group(self, group, rect=None, callback=None):
        callback = callback or (lambda m: m.position)
        rect = rect or self.position
        if isinstance(group, SlicedArray):
            group = group.find_nearest(rect)

        rect_group = list(map(callback, group))
        indices = rect.collidelistall(rect_group)
        return [group[index] for index in indices]

    def check_collision_with_old_position(self, monster):
        return self.old_position.colliderect(monster.position)

    def union_new_position_with_old(self):
        return self.position.union(self.old_position)

    def set_parent(self, parent):
        self.parent = parent

    def get_position(self):
        return dict(
            x=self.position.x,
            y=self.position.y,
        )

    def move(self):
        if self.is_freeze:
            return
        self.move_with_speed(self.speed)

    def move_with_speed(self, speed):
        position = self.position
        direction = self.direction

        if direction is Direction.UP:
            position.y -= speed
        elif direction is Direction.DOWN:
            position.y += speed
        elif direction is Direction.LEFT:
            position.x -= speed
        elif direction is Direction.RIGHT:
            position.x += speed
コード例 #4
0
ファイル: rect_test.py プロジェクト: annie60/Xilarius
 def test_union__with_identical_Rect(self):
     r1 = Rect(1, 2, 3, 4)
     self.assertEqual(r1, r1.union(Rect(r1)))
コード例 #5
0
ファイル: rect_test.py プロジェクト: annie60/Xilarius
 def test_union(self):
     r1 = Rect(1, 1, 1, 2)
     r2 = Rect(-2, -2, 1, 2)
     self.assertEqual(Rect(-2, -2, 4, 5), r1.union(r2))
コード例 #6
0
ファイル: rect_test.py プロジェクト: CTPUG/pygame_cffi
 def test_union__with_identical_Rect( self ):
     r1 = Rect( 1, 2, 3, 4 )
     self.assertEqual( r1, r1.union( Rect(r1) ) )
コード例 #7
0
ファイル: rect_test.py プロジェクト: CTPUG/pygame_cffi
 def test_union( self ):
     r1 = Rect( 1, 1, 1, 2 )
     r2 = Rect( -2, -2, 1, 2 )
     self.assertEqual( Rect( -2, -2, 4, 5 ), r1.union(r2) )
コード例 #8
0
 def testUnionWithIdenticalRect( self ):
     r1 = Rect( 1, 2, 3, 4 )
     self.assertEqual( r1, r1.union( Rect(r1) ) )
コード例 #9
0
ファイル: animationstate.py プロジェクト: ionaic/the-only-one
class AnimationState():
    def __init__(self, obj, pos=(0,0)):
        self.object = obj
        self.dir = 0
        self.startTime = 0
        self.animName = 'stopped'
        self.x = pos[0]
        self.y = pos[1]
        self.newX = pos[0]
        self.newY = pos[1]
        # dirty dirty dirty
        self.stashPos=pos

        self.deleted = False
        # functions for play once animations
        # dirty animation
        self.stash = Rect(0,0,0,0)
        self.stashFrame = None
        self.dirty = False
        self.dirtyRegions = list()
        self.old = None
        self.oldOffset = None
        # event
        self.eventStash = None

        self.invalidated = False
    def invalidate(self):
        self.invalidated = True
    def setAnimation(self,animName):
        # if you're busy, set what happens next after
        #if self.busy:
        #    self.playOnceBackToAnim = animName
        #else:
        if self.animName!=animName:
            #if self.animName == 'shoot':
            #    print "######## Cancel Shooting"
            #    print animName
            self.animName = animName
            self.startTime = 0
        #self.startTime = startTime
    def setAnimationOnce(self, animName):
        # if you're not already busy
        if self.old==None:
            self.old = self.animName
            self.setAnimation(animName)
            nframe = self.getFrameByNumber(0)
            if self.stashFrame!=None:
                if nframe.surface.get_rect().height!=self.stashFrame.surface.get_rect().height:
                    self.oldOffset = nframe.surface.get_rect().height-self.stashFrame.surface.get_rect().height
                    self.y = self.y - self.oldOffset
            
    def setDirection(self,dir):
        self.dir = dir
    def setPosVec(self, vect):
        self.x = vect[0]
        self.y = vect[1]
    def setPos(self,x,y):
        self.x = x
        self.y = y
    #def setNewPos(self,(x,y)):
    #    self.newX = x
    #    self.newY = y
    def getDirection(self):
        return self.dir
    def getX(self):
        return self.x
    def setX(self,x):
        self.x = x
    def getY(self):
        return self.y
    def setY(self,y):
        self.y = y
    def getPos(self):
        return (self.x,self.y)
    #def movePos(self):
    #    self.x = self.newX
    #    self.y = self.newY
    def getFrameByNumber(self,frameNum):
        anim = self.object.animations[self.animName].directions[self.dir]
        frame = anim.frames[frameNum]
        return frame
    def getFrameNumber(self,gameTime):
        if self.startTime == 0:
            self.startTime = gameTime
        timediff = gameTime - self.startTime
        fps = self.object.animations[self.animName].fps
        frames = self.object.animations[self.animName].frames
        msf = 1000 / fps
        frame = int((timediff / msf))
        if self.old!=None and frame>frames:
            self.setAnimation(self.old)
            self.old = None
            if self.oldOffset!=None:
                self.y = self.y + self.oldOffset
                self.stashPos = (self.stashPos[0],self.stashPos[1]+ self.oldOffset)
                self.oldOffset = None
                
            return self.getFrameNumber(gameTime)
        return frame%frames
    def getFrame(self,gameTime):
        anim = self.object.animations[self.animName].directions[self.dir]
        frame = anim.frames[self.getFrameNumber(gameTime)]
        return frame
    def getFrameEvent(self,gameTime):
        frame = self.getFrame(gameTime)
        if self.eventStash != frame:
            self.eventStash = frame
            return frame.event
        return ''
        
    def getColAABB(self,time):
        framenum = self.getFrameNumber(time)
        anim = self.object.animations[self.animName].directions[self.dir]
        return anim.frames[framenum].collisionArea
    def requiresDraw(self):
        frame = self.getFrame(game.Game.universal.time.time())
        major = frame==self.stashFrame and self.stashPos==(self.x,self.y) and self.invalidated==False
        return not (major and self.dirty==False)
    def draw(self,target,time):
        if self.deleted == True: return
        frame = self.getFrame(time.time())
        major = frame==self.stashFrame and self.stashPos==(self.x,self.y) and self.invalidated==False
        if major and self.dirty==False:
            return
        self.stash = frame.drawArea.move(self.x,self.y)
        self.stashFrame = frame
        self.stashPos = (self.x,self.y)
        if major:
            for region in self.dirtyRegions:
                target.blit(frame.surface,region[0],region[0].move(-region[1][0],-region[1][1]))
        else:
            target.blit(frame.surface,self.stash,frame.drawArea)
        self.dirty = False
        self.dirtyRegions = list()
        self.invalidated = False
    def undraw(self,source,target,time):
        if self.deleted == True: return
        frame = self.getFrame(time.time())
        if frame==self.stashFrame and self.stashPos==(self.x,self.y) and self.invalidated==False:
            if self.dirty==False:
                return
            else:
                for region in self.dirtyRegions:
                    target.blit(source,region[0],region[0])
                return
        target.blit(source,self.stash.topleft,self.stash)
        if self.dirty:
            for region in self.dirtyRegions:
                for yolo in region[2].dirtyRegions:
                    if yolo[2]==self:
                        yolo[0] = self.stash.union(yolo[0])
        #if frame!=self.stashFrame or self.stashPos!=(self.x,self.y) or self.dirty!=False:
        #    target.blit(source,self.stash.topleft,self.stash)
    def visualDelete(self,source,target):
        self.deleted = True
        target.blit(source,self.stash.topleft,self.stash)
        for region in self.dirtyRegions:
            region[2].invalidate()
コード例 #10
0
ファイル: rect_test.py プロジェクト: thor509/personal_code
 def testUnionWithIdenticalRect(self):
     r1 = Rect(1, 2, 3, 4)
     self.assertEqual(r1, r1.union(Rect(r1)))
コード例 #11
0
ファイル: animationstate.py プロジェクト: ionaic/the-only-one
class AnimationState():
    def __init__(self, obj, pos=(0, 0)):
        self.object = obj
        self.dir = 0
        self.startTime = 0
        self.animName = 'stopped'
        self.x = pos[0]
        self.y = pos[1]
        self.newX = pos[0]
        self.newY = pos[1]
        # dirty dirty dirty
        self.stashPos = pos

        self.deleted = False
        # functions for play once animations
        # dirty animation
        self.stash = Rect(0, 0, 0, 0)
        self.stashFrame = None
        self.dirty = False
        self.dirtyRegions = list()
        self.old = None
        self.oldOffset = None
        # event
        self.eventStash = None

        self.invalidated = False

    def invalidate(self):
        self.invalidated = True

    def setAnimation(self, animName):
        # if you're busy, set what happens next after
        #if self.busy:
        #    self.playOnceBackToAnim = animName
        #else:
        if self.animName != animName:
            #if self.animName == 'shoot':
            #    print "######## Cancel Shooting"
            #    print animName
            self.animName = animName
            self.startTime = 0
        #self.startTime = startTime
    def setAnimationOnce(self, animName):
        # if you're not already busy
        if self.old == None:
            self.old = self.animName
            self.setAnimation(animName)
            nframe = self.getFrameByNumber(0)
            if self.stashFrame != None:
                if nframe.surface.get_rect(
                ).height != self.stashFrame.surface.get_rect().height:
                    self.oldOffset = nframe.surface.get_rect(
                    ).height - self.stashFrame.surface.get_rect().height
                    self.y = self.y - self.oldOffset

    def setDirection(self, dir):
        self.dir = dir

    def setPosVec(self, vect):
        self.x = vect[0]
        self.y = vect[1]

    def setPos(self, x, y):
        self.x = x
        self.y = y

    #def setNewPos(self,(x,y)):
    #    self.newX = x
    #    self.newY = y
    def getDirection(self):
        return self.dir

    def getX(self):
        return self.x

    def setX(self, x):
        self.x = x

    def getY(self):
        return self.y

    def setY(self, y):
        self.y = y

    def getPos(self):
        return (self.x, self.y)

    #def movePos(self):
    #    self.x = self.newX
    #    self.y = self.newY
    def getFrameByNumber(self, frameNum):
        anim = self.object.animations[self.animName].directions[self.dir]
        frame = anim.frames[frameNum]
        return frame

    def getFrameNumber(self, gameTime):
        if self.startTime == 0:
            self.startTime = gameTime
        timediff = gameTime - self.startTime
        fps = self.object.animations[self.animName].fps
        frames = self.object.animations[self.animName].frames
        msf = 1000 / fps
        frame = int((timediff / msf))
        if self.old != None and frame > frames:
            self.setAnimation(self.old)
            self.old = None
            if self.oldOffset != None:
                self.y = self.y + self.oldOffset
                self.stashPos = (self.stashPos[0],
                                 self.stashPos[1] + self.oldOffset)
                self.oldOffset = None

            return self.getFrameNumber(gameTime)
        return frame % frames

    def getFrame(self, gameTime):
        anim = self.object.animations[self.animName].directions[self.dir]
        frame = anim.frames[self.getFrameNumber(gameTime)]
        return frame

    def getFrameEvent(self, gameTime):
        frame = self.getFrame(gameTime)
        if self.eventStash != frame:
            self.eventStash = frame
            return frame.event
        return ''

    def getColAABB(self, time):
        framenum = self.getFrameNumber(time)
        anim = self.object.animations[self.animName].directions[self.dir]
        return anim.frames[framenum].collisionArea

    def requiresDraw(self):
        frame = self.getFrame(game.Game.universal.time.time())
        major = frame == self.stashFrame and self.stashPos == (
            self.x, self.y) and self.invalidated == False
        return not (major and self.dirty == False)

    def draw(self, target, time):
        if self.deleted == True: return
        frame = self.getFrame(time.time())
        major = frame == self.stashFrame and self.stashPos == (
            self.x, self.y) and self.invalidated == False
        if major and self.dirty == False:
            return
        self.stash = frame.drawArea.move(self.x, self.y)
        self.stashFrame = frame
        self.stashPos = (self.x, self.y)
        if major:
            for region in self.dirtyRegions:
                target.blit(frame.surface, region[0],
                            region[0].move(-region[1][0], -region[1][1]))
        else:
            target.blit(frame.surface, self.stash, frame.drawArea)
        self.dirty = False
        self.dirtyRegions = list()
        self.invalidated = False

    def undraw(self, source, target, time):
        if self.deleted == True: return
        frame = self.getFrame(time.time())
        if frame == self.stashFrame and self.stashPos == (
                self.x, self.y) and self.invalidated == False:
            if self.dirty == False:
                return
            else:
                for region in self.dirtyRegions:
                    target.blit(source, region[0], region[0])
                return
        target.blit(source, self.stash.topleft, self.stash)
        if self.dirty:
            for region in self.dirtyRegions:
                for yolo in region[2].dirtyRegions:
                    if yolo[2] == self:
                        yolo[0] = self.stash.union(yolo[0])
        #if frame!=self.stashFrame or self.stashPos!=(self.x,self.y) or self.dirty!=False:
        #    target.blit(source,self.stash.topleft,self.stash)
    def visualDelete(self, source, target):
        self.deleted = True
        target.blit(source, self.stash.topleft, self.stash)
        for region in self.dirtyRegions:
            region[2].invalidate()
コード例 #12
0
 def _clearPath(first, second, color, offset=0):
     start = Rect(coordinateOffset(first[0]) + offset, coordinateOffset(first[1]) + offset, side - 2 * offset, side - 2 * offset)
     end = Rect(coordinateOffset(second[0]) + offset, coordinateOffset(second[1]) + offset, side - 2 * offset, side - 2 * offset)
     pygame.draw.rect(console, color, start.union(end))