Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/MAFH2/fortuneengine
diff options
context:
space:
mode:
Diffstat (limited to 'MAFH2/fortuneengine')
-rw-r--r--MAFH2/fortuneengine/DrawableFontObject.py19
-rw-r--r--MAFH2/fortuneengine/DrawableObject.py157
-rw-r--r--MAFH2/fortuneengine/DynamicDrawableObject.py75
-rw-r--r--MAFH2/fortuneengine/GameEngine.py31
-rw-r--r--MAFH2/fortuneengine/Scene.py186
5 files changed, 458 insertions, 10 deletions
diff --git a/MAFH2/fortuneengine/DrawableFontObject.py b/MAFH2/fortuneengine/DrawableFontObject.py
new file mode 100644
index 0000000..92f641f
--- /dev/null
+++ b/MAFH2/fortuneengine/DrawableFontObject.py
@@ -0,0 +1,19 @@
+import pygame
+from DrawableObject import DrawableObject
+
+class DrawableFontObject(DrawableObject, pygame.sprite.Sprite):
+
+ def __init__(self,text,font, x = 0, y = 0):
+
+ self.font = font
+ self.textImage = font.render(text, 1, (255,255,255))
+ self.text = text
+ DrawableObject.__init__(self, [self.textImage], '')
+
+ def changeText(self, newText, color=(0,0,0)):
+ self.text = newText
+ self._images[0] = self.font.render(str(newText), True, color)
+ self.image = self._images[0]
+
+ def getText(self):
+ return str(self.text)
diff --git a/MAFH2/fortuneengine/DrawableObject.py b/MAFH2/fortuneengine/DrawableObject.py
new file mode 100644
index 0000000..96bb8ef
--- /dev/null
+++ b/MAFH2/fortuneengine/DrawableObject.py
@@ -0,0 +1,157 @@
+import pygame
+
+class DrawableObject(pygame.sprite.Sprite):
+
+ def __init__(self, images, textfileName, transparent = False, x = 0, y = 0):
+ pygame.sprite.Sprite.__init__(self)
+
+ self._images = []
+ self._origImages = []
+ for i in range(len(images)):
+ self._images.append(images[i].convert_alpha())
+ self._origImages.append(images[i].convert_alpha())
+
+ blank = pygame.Surface((0,0))
+
+ if(transparent):
+ for i in range(len(images)):
+ self._images[i] = blank
+
+ self._start = pygame.time.get_ticks()
+ self.image = self._images[0]
+ self._last_update = 0
+ self._frame = 0
+ self.animations = {}
+ self._current_anim = ""
+ self.rect = self.image.get_rect()
+ self.xPos = x
+ self.yPos = y
+ self.myAngle = 0
+ self.xSize = self.image.get_width()
+ self.ySize = self.image.get_height()
+ self.rect.topleft = (x,y)
+
+ if textfileName != '':
+
+ f = open(textfileName, 'r')
+ currentLine = f.readline()
+ while currentLine != '':
+
+ animValues = currentLine.split(",")
+ self.animations[animValues[0]] = [int(animValues[1]), int(animValues[2])]
+ currentLine = f.readline()
+
+ else:
+
+ self.animations["anim1"] = [0, len(self._images)]
+ self.goToAnim("anim1")
+
+ self.makeTransparent(transparent)
+
+ def repopulateImages(self, newImages):
+
+ self._images = []
+ self._origImages = []
+ for i in range(len(newImages)):
+ self._images.append(newImages[i].convert_alpha())
+ self._origImages.append(newImages[i].convert_alpha())
+
+ self.image = self._images[0]
+ self._frame = 0
+ self.xSize = self.image.get_width()
+ self.ySize = self.image.get_height()
+
+ def addImages(self, images):
+ self._images.extend(images)
+ self._origImages.extend(images)
+
+ def goToAnim(self, animName):
+ if self.animations.get(animName, 0) != 0:
+ self._current_anim = animName
+ self._frame = self.animations[animName][0]
+ self.image = self._images[self._frame]
+
+ def goToFrame(self, frame):
+
+ if frame <= len(self._images):
+ self._frame = frame
+ self.image = self._images[self._frame]
+
+ def nudge(self, x, y):
+ self.xPos += x
+ self.yPos += y
+ self.rect.right += x
+ self.rect.top += y
+
+ def scale(self, x=None, y=None):
+ if type(x).__name__=='int': self.xSize = x
+ if type(y).__name__=='int': self.ySize = y
+
+ for i in range(len(self._images)):
+ self._origImages[i] = pygame.transform.scale(self._origImages[i], (self.xSize, self.ySize))
+ self._images[i] = self._origImages[i]
+
+ def fill(self, color):
+ for i in range(len(self._images)):
+ #print "filling with ", color
+ self._origImages[i].fill(color)
+ self._images[i].fill(color)
+
+ def getXSize(self):
+ return self.xSize
+
+ def getYSize(self):
+ return self.ySize
+
+ def rotate(self,angle):
+ self.myAngle += angle
+ for i in range(len(self._images)):
+ self._images[i] = pygame.transform.rotate(self._origImages[i], self.myAngle)
+
+ def getRotation(self):
+ return self.myAngle
+
+ def setPosition(self, x = None, y = None):
+ if type(x).__name__=='int': self.xPos = x
+ if type(y).__name__=='int': self.yPos = y
+ self.rect.topleft = (self.xPos, self.yPos)
+
+ def getXPos(self):
+ return self.xPos
+
+ def getYPos(self):
+ return self.yPos
+
+ def calcColorKey(self, x=0, y=0):
+ myColorKey = images[0].get_at((x,y))
+ setColorKey(myColorKey)
+
+ def makeTransparent(self, bool = True):
+ if bool == True:
+ surf = pygame.Surface((0,0))
+ for i in range(len(self._images)):
+ self._images[i] = surf
+ else:
+ for i in range(len(self._images)):
+ self._images[i] = self._origImages[i]
+ self.image = self._images[self._frame]
+
+ def setColorKey(self, aColor):
+ for i in range(len(self._images)):
+ self._images[i].set_colorkey(aColor)
+
+ def update(self, t=None):
+ timePassed = t + self._last_update
+
+ if (timePassed) > 200:
+
+ self.image = self._images[self._frame]
+ self._last_update = timePassed%1000
+ else:
+ self._last_update = timePassed
+
+ def nextFrame(self):
+ pass
+
+ def nextCurrentAnimFrame(self):
+ pass
diff --git a/MAFH2/fortuneengine/DynamicDrawableObject.py b/MAFH2/fortuneengine/DynamicDrawableObject.py
new file mode 100644
index 0000000..0d8136d
--- /dev/null
+++ b/MAFH2/fortuneengine/DynamicDrawableObject.py
@@ -0,0 +1,75 @@
+import pygame
+from DrawableObject import DrawableObject
+
+class DynamicDrawableObject(DrawableObject, pygame.sprite.Sprite):
+
+ def __init__(self,images,textfileName,fps = 10, x = 0, y = 0, xVelocity = 0, yVelocity = 0):
+
+ self._delay = 1000/fps
+ DrawableObject.__init__(self, images, textfileName, x, y)
+
+ def addImages(self, images):
+
+ self._images.extend(images)
+
+ def setSpeed(self, xVelocity = None, yVelocity = None):
+
+ if xVelocity != None: self.xSpeed = xVelocity
+ if yVelocity != None: self.ySpeed = yVelocity
+
+ def getXSpeed(self):
+
+ return self.xSpeed
+
+ def getYSpeed(self):
+
+ return self.ySpeed
+
+ def move(self):
+ self.xPos += self.xSpeed
+ self.yPos += self.ySpeed
+ self.rect.right += self.xSpeed
+ self.rect.top += self.ySpeed
+
+ def update(self, t):
+
+ timePassed = t + self._last_update
+
+ if (timePassed) > self._delay:
+ if self._frame < self.animations.get(self._current_anim)[0] or self._frame > self.animations.get(self._current_anim)[1]:
+ self._frame = self.animations.get(self._current_anim)[0] - 1
+
+ self._frame += timePassed/self._delay
+
+ while self._frame >= self.animations.get(self._current_anim)[1]:
+ framesPast = self._frame - self.animations.get(self._current_anim)[1]
+ self._frame = framesPast - 1 + self.animations.get(self._current_anim)[0]
+
+ self.image = self._images[self._frame]
+ self._last_update = timePassed%self._delay
+ else:
+ self._last_update = timePassed
+
+ def nextFrame(self):
+ self._frame += 1
+ if self._frame >= len(self._images):
+ framesPast = self._frame - len(self._images)
+ self._frame = framesPast
+
+ self.image = self._images[self._frame]
+
+ def nextCurrentAnimFrame(self):
+
+ for cnt in range(len(animations)):
+
+ if animations[cnt] == self._current_anim:
+ if self._frame < self.animations[self._current_anim][0] or self._frame > self.animations[self._current_anim][1]:
+ self._frame = self.animations[self._current_anim][0]
+
+ else: self._frame += 1
+
+ if self._frame > self.animations[self._current_anim][1]:
+ framesPast = self._frame - self.animations[self._current_anim][1]
+ self._frame = framesPast - 1 + self.animations[self._current_anim][0]
+
+ self.image = self._images[self._frame]
diff --git a/MAFH2/fortuneengine/GameEngine.py b/MAFH2/fortuneengine/GameEngine.py
index a4f9e42..1832089 100644
--- a/MAFH2/fortuneengine/GameEngine.py
+++ b/MAFH2/fortuneengine/GameEngine.py
@@ -17,6 +17,10 @@ import pygame
from time import time
from GameEngineConsole import GameEngineConsole
from GameInspect import GameInspect
+from DrawableObject import DrawableObject
+from DynamicDrawableObject import DynamicDrawableObject
+from DrawableFontObject import DrawableFontObject
+from Scene import Scene
class GameEngine(object):
@@ -49,6 +53,8 @@ class GameEngine(object):
self.height = height
size = width, height
self.screen = pygame.display.set_mode(size)
+ self.__fps = DrawableFontObject("", pygame.font.Font(None, 17))
+ self.__scene = Scene(self.__fps)
# Engine Internal Variables
self.__fps_cap = fps_cap
@@ -62,6 +68,7 @@ class GameEngine(object):
self.__event_cb = []
self.__draw_lst = []
self.__object_hold = {}
+ self.__dirtyList=[]
# Game Timers
self.__active_event_timers = []
@@ -95,6 +102,10 @@ class GameEngine(object):
it enters the draw flag.
"""
self.__dirty = True
+
+ def get_scene(self):
+
+ return self.__scene
def start_event_timer(self, function_cb, time):
"""
@@ -201,18 +212,18 @@ class GameEngine(object):
else:
for fnc in self.__draw_lst:
- start = time()
- fnc(screen, tick_time)
- self.__draw_time[str(fnc)] += time() - start
- self.__draw_calls[str(fnc)] += 1
-
+ start = time()
+ fnc(screen, tick_time)
+ self.__draw_time[str(fnc)] += time() - start
+ self.__draw_calls[str(fnc)] += 1
# Print Frame Rate
if self.__showfps:
- text = self.__font.render('FPS: %d' % self.clock.get_fps(),
- False, (255, 255, 255), (159, 182, 205))
- screen.blit(text, (0, 0))
-
- pygame.display.flip()
+ self.__fps.changeText('FPS: %d' % self.clock.get_fps(), (255,255,255))
+ self.__fps.setPosition(0,0)
+ else:
+ self.__fps.changeText('')
+ self.__scene.update(tick_time)
+ pygame.display.update(self.__scene.draw(screen))
def _event_loop(self):
"""
diff --git a/MAFH2/fortuneengine/Scene.py b/MAFH2/fortuneengine/Scene.py
new file mode 100644
index 0000000..d2e50a9
--- /dev/null
+++ b/MAFH2/fortuneengine/Scene.py
@@ -0,0 +1,186 @@
+import pygame
+from pygame.sprite import RenderUpdates
+
+class Scene(pygame.sprite.RenderUpdates):
+
+ def __init__(self, sprites):
+
+ self._spritelist = [[sprites, sprites.getXPos(), sprites.getYPos()]]
+ #self._spritelist.append([sprites, sprites.getXPos(), sprites.getYPos()])
+ RenderUpdates.__init__(self, sprites)
+
+ self.xPos = 0
+ self.yPos = 0
+ self.xSize = 0
+ self.ySize = 0
+
+ self.calcPosition()
+ self.calcSize()
+ self.setRelativePositions()
+
+ def calcPosition(self):
+
+ lowestX = 9000
+ lowestY = 9000
+
+ for i in range(len(self._spritelist)):
+ if self._spritelist[i][0].getXPos() < lowestX: lowestX = self._spritelist[i][0].getXPos()
+ if self._spritelist[i][0].getYPos() < lowestY: lowestY = self._spritelist[i][0].getYPos()
+
+ self.xPos = lowestX
+ self.yPos = lowestY
+
+ def calcSize(self):
+
+ highestX = 0
+ highestY = 0
+
+ for i in range(len(self._spritelist)):
+ if (self._spritelist[i][0].getXPos() + self._spritelist[i][0].getXSize()) > highestX: highestX = self._spritelist[i][0].getXPos() + self._spritelist[i][0].getXSize()
+ if (self._spritelist[i][0].getYPos() + self._spritelist[i][0].getYSize()) > highestY: highestY = self._spritelist[i][0].getYPos() + self._spritelist[i][0].getYSize()
+
+ self.xSize = highestX - self.xPos
+ self.ySize = highestY - self.yPos
+
+ def addObject(self, newDrawableObject):
+ RenderUpdates.add_internal(self, newDrawableObject)
+ self._spritelist.insert(len(self._spritelist) - 1, [newDrawableObject, newDrawableObject.getXPos(), newDrawableObject.getYPos()])
+
+ def addObjects(self, newDrawableObjects):
+ for sprite in newDrawableObjects:
+ RenderUpdates.add_internal(self, sprite)
+ self._spritelist.insert(len(self._spritelist) - 1, [sprite, sprite.getXPos(), sprite.getYPos()])
+
+ def setRelativePositions(self):
+
+ for i in range(len(self._spritelist)):
+ self._spritelist[i][1] = self._spritelist[i][0].getXPos() - self.xPos
+ self._spritelist[i][2] = self._spritelist[i][0].getYPos() - self.yPos
+
+ def removeObject(self, sprite):
+
+ for i in self._spritelist:
+ if i[0] == sprite:
+ self._spritelist.remove(i)
+ break
+ RenderUpdates.remove_internal(self, sprite)
+
+ def getObject(self, index):
+
+ if index < len(self._spritelist):
+ return self._spritelist[index][0]
+
+ def getListSize(self):
+
+ return len(self._spritelist)
+
+ def getList(self):
+
+ return list(self._spritelist)
+
+ def moveObjects(self):
+
+ for i in range(len(self._spritelist)):
+ self._spritelist[i][0].move()
+
+ self.calcPosition()
+ self.calcSize()
+ self.setRelativePositions()
+
+ def moveScene(self, xNudge = 0, yNudge = 0):
+
+
+ for i in range(len(self._spritelist)):
+
+ self._spritelist[i][0].nudge(xNudge, yNudge)
+
+
+ self.calcPosition()
+
+ def setPosition(self, newXPos = None, newYPos = None):
+
+ if newXPos != None: self.xPos = newXPos
+ if newYPos != None: self.yPos = newYPos
+
+ for i in range(len(self._spritelist)):
+
+ self._spritelist[i][0].setPosition(self.xPos + self._spritelist[i][1], self.yPos + self._spritelist[i][2])
+
+ def getXPos(self):
+ return self.xPos
+
+ def getYPos(self):
+ return self.yPos
+
+ def getXSize(self):
+ return self.xSize
+
+ def getYSize(self):
+ return self.ySize
+
+ def scaleObjects(self, newXSize = None, newYSize = None):
+
+
+ for i in range(len(self._spritelist)):
+ self._spritelist[i][0].scale(newXSize, newYSize)
+
+ def scaleScene(self, newXSize = None, newYSize = None):
+
+ self.calcPosition()
+ self.calcSize()
+
+ xScale = 1
+ yScale = 1
+
+ if newXSize != None: xScale = (newXSize * 1.0)/self.xSize
+ if newYSize != None: yScale = (newYSize * 1.0)/self.ySize
+
+ for i in range(len(self._spritelist)):
+ self._spritelist[i][0].scale(xScale * self._spritelist[iaw][0].getXSize(), yScale * self._spritelist[i][0].getYSize())
+ self._spritelist[i][1] = xScale * self._spritelist[i][1]
+ self._spritelist[i][2] = yScale * self._spritelist[i][2]
+
+ self.calcPosition()
+ self.calcSize()
+ self.setPosition()
+
+ def update(self, t):
+
+ for s in self._spritelist: s[0].update(t);
+
+ def draw(self, surface):
+ spritedict = self.spritedict
+ surface_blit = surface.blit
+ dirty = self.lostsprites
+ self.lostsprites = []
+ dirty_append = dirty.append
+ for s in self._spritelist:
+ r = spritedict[s[0]]
+ newrect = surface_blit(s[0].image, s[0].rect)
+ if r is 0:
+ dirty_append(newrect)
+ else:
+ if newrect.colliderect(r):
+ dirty_append(newrect.union(r))
+ else:
+ dirty_append(newrect)
+ dirty_append(r)
+ spritedict[s[0]] = newrect
+ return dirty
+
+ def drawEntireScene(self, surface):
+ spritedict = self.spritedict
+ surface_blit = surface.blit
+ dirty = self.lostsprites
+ self.lostsprites = []
+ dirty_append = dirty.append
+ for s in self._spritelist:
+ dirty_append(spritedict[s[0]])
+ dirty_append(surface_blit(s[0].image, s[0].rect))
+ return dirty
+
+ def nextFrame(self):
+
+ for i in range(len(self._spritelist)):
+
+ self._spritelist[i][0].nextFrame()