diff options
-rw-r--r-- | .settings/org.eclipse.core.resources.prefs | 2 | ||||
-rw-r--r-- | src/api/Anim.py | 62 | ||||
-rwxr-xr-x | src/api/Game.py | 3 | ||||
-rwxr-xr-x | src/api/MultiLabel.py | 4 | ||||
-rw-r--r-- | src/assets/images/hall/background_hall0101.png | bin | 0 -> 5329 bytes | |||
-rw-r--r-- | src/assets/images/hall/boy001.png | bin | 0 -> 12007 bytes | |||
-rw-r--r-- | src/assets/images/hall/boy002.png | bin | 0 -> 11288 bytes | |||
-rw-r--r-- | src/assets/images/hall/boy003.png | bin | 0 -> 12430 bytes | |||
-rw-r--r-- | src/assets/images/hall/door0101_normal.png | bin | 0 -> 5258 bytes | |||
-rw-r--r-- | src/assets/images/hall/door0101_selected.png | bin | 0 -> 27511 bytes | |||
-rw-r--r-- | src/assets/images/hall/girl001.png | bin | 0 -> 12980 bytes | |||
-rw-r--r-- | src/game/BoyHall.py | 144 | ||||
-rw-r--r-- | src/game/HallState.py | 132 | ||||
-rw-r--r-- | src/game/SelectAreaState.py | 8 |
14 files changed, 351 insertions, 4 deletions
diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs index a969971..a964922 100644 --- a/.settings/org.eclipse.core.resources.prefs +++ b/.settings/org.eclipse.core.resources.prefs @@ -4,6 +4,7 @@ encoding//src/api/Game.py=utf-8 encoding//src/api/GameState.py=utf-8 encoding//src/api/Math.py=utf-8 encoding//src/api/Mouse.py=utf-8 +encoding//src/api/MultiLabel.py=utf-8 encoding//src/api/Sprite.py=utf-8 encoding//src/api/Vector.py=utf-8 encoding//src/assets/data/area1game3_data.py=utf-8 @@ -12,5 +13,6 @@ encoding//src/game/Area1Game3.py=utf-8 encoding//src/game/Area1Game7.py=utf-8 encoding//src/game/Area2Game2.py=utf-8 encoding//src/game/CreditsState.py=utf-8 +encoding//src/game/HallState.py=utf-8 encoding//src/game/MenuState.py=utf-8 encoding//src/game/SelectAreaState.py=utf-8 diff --git a/src/api/Anim.py b/src/api/Anim.py new file mode 100644 index 0000000..db3bea8 --- /dev/null +++ b/src/api/Anim.py @@ -0,0 +1,62 @@ +class CAnim(object): + + mNumFrames = 0 + mDelay = 0 + mCurrentFrame = 0 + mTimeFrame = 0 + mIsLoop = False + + # Flag to indicate it the animation has ended. + mEnded = False + + # Indicates if frame has changed since the previous update(). + mFrameHasChanged = False + + # Used to calculate if the previous frame is the same as the current frame. + mPreviousFrame = 0 + + def __init__(self, aNumFrames, aDelay, aIsLoop = False): + self.init(aNumFrames, aDelay, aIsLoop); + + def init(self, aNumFrames, aDelay, aIsLoop = False): + self.mNumFrames = aNumFrames + self.mDelay = aDelay + self.mCurrentFrame = 0 + self.mTimeFrame = 0 + self.mIsLoop = aIsLoop + self.mEnded = False + self.mFrameHasChanged = False + self.mPreviousFrame = 0 + + def reset(self): + self.mCurrentFrame = 0 + self.mTimeFrame = 0 + self.mFrameHasChanged = False + self.mPreviousFrame = 0 + + def update(self): + self.mTimeFrame += 1 + if (self.mTimeFrame >= self.mDelay): + self.mTimeFrame = 0 + self.mCurrentFrame += 1 + if (self.mCurrentFrame >= self.mNumFrames): + if (self.mIsLoop): + self.mCurrentFrame = 0 + else: + self.mCurrentFrame = self.mNumFrames - 1 + self.mEnded = True + + if (self.mPreviousFrame <> self.mCurrentFrame): + self.mFrameHasChanged = True + else: + self.mFrameHasChanged = False + self.mPreviousFrame = self.mCurrentFrame + + def getCurrentFrame(self): + return self.mCurrentFrame + + def isEnded(self): + return self.mEnded + + def frameHasChanged(self): + return self.mFrameHasChanged
\ No newline at end of file diff --git a/src/api/Game.py b/src/api/Game.py index b49b3ff..c215166 100755 --- a/src/api/Game.py +++ b/src/api/Game.py @@ -11,8 +11,7 @@ import api.SuperSprite from SuperSprite import CSuperSprite
import api.Sprite
from api.Sprite import CSprite
-import api.MultiLabel
-from api.MultiLabel import CMultiLabel
+
import gc
from api.Mouse import CMouse
diff --git a/src/api/MultiLabel.py b/src/api/MultiLabel.py index be11511..2a013b8 100755 --- a/src/api/MultiLabel.py +++ b/src/api/MultiLabel.py @@ -20,12 +20,14 @@ class CMultiLabel(pygame.sprite.Sprite): #pygame.font.init()
#print "CMultilabel"
#print pygame.font.get_init()
- self.font = pygame.font.Font('assets/fonts/goodfoot.ttf', 30)
+ self.font = pygame.font.Font('assets/fonts/DejaVuSans.ttf', 30)
self.fgColor = ((0x00, 0x00, 0x00))
self.bgColor = ((0xFF, 0xFF, 0xFF))
self.center = (100, 100)
self.size = (150, 100)
+ self.createImage()
+ def createImage(self):
self.image = pygame.Surface(self.size)
self.image.fill(self.bgColor)
numLines = len(self.textLines)
diff --git a/src/assets/images/hall/background_hall0101.png b/src/assets/images/hall/background_hall0101.png Binary files differnew file mode 100644 index 0000000..c2013d0 --- /dev/null +++ b/src/assets/images/hall/background_hall0101.png diff --git a/src/assets/images/hall/boy001.png b/src/assets/images/hall/boy001.png Binary files differnew file mode 100644 index 0000000..8a17009 --- /dev/null +++ b/src/assets/images/hall/boy001.png diff --git a/src/assets/images/hall/boy002.png b/src/assets/images/hall/boy002.png Binary files differnew file mode 100644 index 0000000..3ca5491 --- /dev/null +++ b/src/assets/images/hall/boy002.png diff --git a/src/assets/images/hall/boy003.png b/src/assets/images/hall/boy003.png Binary files differnew file mode 100644 index 0000000..46a26b4 --- /dev/null +++ b/src/assets/images/hall/boy003.png diff --git a/src/assets/images/hall/door0101_normal.png b/src/assets/images/hall/door0101_normal.png Binary files differnew file mode 100644 index 0000000..21fea1c --- /dev/null +++ b/src/assets/images/hall/door0101_normal.png diff --git a/src/assets/images/hall/door0101_selected.png b/src/assets/images/hall/door0101_selected.png Binary files differnew file mode 100644 index 0000000..2933b47 --- /dev/null +++ b/src/assets/images/hall/door0101_selected.png diff --git a/src/assets/images/hall/girl001.png b/src/assets/images/hall/girl001.png Binary files differnew file mode 100644 index 0000000..e13903f --- /dev/null +++ b/src/assets/images/hall/girl001.png diff --git a/src/game/BoyHall.py b/src/game/BoyHall.py new file mode 100644 index 0000000..d5382a0 --- /dev/null +++ b/src/game/BoyHall.py @@ -0,0 +1,144 @@ +import api.Sprite +from api.Sprite import CSprite + +import api.Image as Image + +import api.Anim +from api.Anim import CAnim + +from api.Mouse import * + +from api.Vector import * + +import api.Math as Math + +class CBoyHall(CSprite): + + mState = None + mParent = None + MIN_DISTANCE = 40 + + TIME_RETURN = 15 + TIME_ADJUST = 8 + + RADIUS_COLLISION = 40 + + NUM_FRAMES_WALKING = 3 + DELAY_FRAMES_WALKING = 3 + + mAnim = None + + STATE_STALE = 0 + STATE_WALKING = 1 + STATE_TALKING = 2 + + mFrameImage = [] + + # Canvas size: 140x240. + + # Define registration point. + OFFSET_X = 70 + OFFSET_Y = 120 + + # Destination point of walking. + mDestX = 0 + mDestY = 0 + + def __init__(self): + CSprite.__init__(self) + + self.mFrameImage.append(Image.loadImage('assets/images/hall/boy001.png', True)) + self.mFrameImage.append(Image.loadImage('assets/images/hall/boy002.png', True)) + self.mFrameImage.append(Image.loadImage('assets/images/hall/boy003.png', True)) + + self.setImage(self.mFrameImage[1]) + + self.mAnim = CAnim(self.NUM_FRAMES_WALKING, self.DELAY_FRAMES_WALKING, True) + + self.setRegistrationPointOffset(self.OFFSET_X, self.OFFSET_Y) + self.setXY(200, 750) + #self.setMaxVel(100, 100) + + self.mDestX = 0 + self.mDestY = 0 + + self.setState(self.STATE_STALE) + + + def set_parent(self, aParent): + self.mParent = aParent + #image = .... + def set_origin(self, aOrigin): + self.mOrigin = aOrigin + #self.mPos = + self.setXY(aOrigin.getX(), aOrigin.getY()) + + def set_destine(self, aDestine): + self.mDest = aDestine + + def update(self): + + CSprite.update(self) + + self.mAnim.update() + + if (self.mState == self.STATE_WALKING): + # Check if arrives to destination point. + if (Math.dist(self.getX(), self.getY(), self.mDestX, self.mDestY) < 5): + self.setXY(self.mDestX, self.mDestY) + self.setState(self.STATE_STALE) + return + + # If a click is made, change the destination point. + if CMouse().firstPress(): + self.setState(self.STATE_WALKING) + return + + if (self.mAnim.frameHasChanged()): + self.setImage(self.mFrameImage[self.mAnim.getCurrentFrame()]) + + elif (self.mState == self.STATE_STALE): + if CMouse().firstPress(): + self.setState(self.STATE_WALKING) + return + + def render(self): + print("render") + pass + + + def destroy(self): + pass + #TODO: Eliminar la imagen creada. + + def setState(self, aState): + + self.setTimeState(0) + + if (aState == self.STATE_STALE): + + self.setVelXY(0, 0) + self.setImage(self.mFrameImage[1]) + self.mAnim.init(1, 0, False) + + elif (aState == self.STATE_WALKING): + + x = int(CMouse().getX()) + y = int(CMouse().getY()) + + self.mDestX = x + self.mDestY = y + x = self.mDestX - self.getX() + y = self.mDestY - self.getY() + vec = CVector(x, y) + vec.normalize() + vec.mul(5) + self.setVelVec(vec) + + self.setImage(self.mFrameImage[0]) + self.mAnim.init(self.NUM_FRAMES_WALKING, self.DELAY_FRAMES_WALKING, True) + + self.mState = aState + + def getState(self): + return self.mState
\ No newline at end of file diff --git a/src/game/HallState.py b/src/game/HallState.py new file mode 100644 index 0000000..6da7340 --- /dev/null +++ b/src/game/HallState.py @@ -0,0 +1,132 @@ +# -*- coding: utf-8 -*- + +import MenuState +from MenuState import * +import api.GameState +from api.GameState import CGameState +import api.MultiLabel +from api.MultiLabel import CMultiLabel +import api.Game +from api.Game import CGame +import api.Button +from api.Button import CButton +import api.Image as CImage + +import api.Sprite +from api.Sprite import CSprite + +import api.Image as Image + +from api.Mouse import * + +import api.Math as CMath + +import Area1Game1 +from Area1Game1 import * + +import BoyHall +from BoyHall import * + +import pygame + +class CHallState(CGameState): + + mBackground = None + mInstructions = None + #mX = 10 + mButtonBack = None + + mCurrentSelectedArea = 0 + + mArea1 = None + + mFrameDoor0101 = [] + + AREA1_POLYGON = [(402,94), (961,94), (961,631), (402,631)] + + mPlayer = None + + mtext = None + + def init(self): + CGameState.init(self) + #self.mInstructions = CMultiLabel() + #CGame().addChild(self.mInstructions) + #print self.mX + + self.mCurrentSelectedArea = 0 + + self.mButtonBack = CButton() + self.mButtonBack.set_bgColor((0x99, 0x99, 0x66)) + self.mButtonBack.font = pygame.font.Font('assets/fonts/DejaVuSans.ttf', 20) + self.mButtonBack.set_center((100, 100)) + self.mButtonBack.set_size((200, 40)) + self.mButtonBack.set_text("Volver") #_('BACK Credits') + CGame().addChild(self.mButtonBack) + + self.mBackground = CImage.loadImage('assets/images/hall/background_hall0101.png', False) + CGame().setBackground(self.mBackground) + + self.mArea1 = CSprite() + self.mArea1.setXY(402,96) + self.mFrameDoor0101.append(Image.loadImage('assets/images/hall/door0101_normal.png', True)) + self.mFrameDoor0101.append(Image.loadImage('assets/images/hall/door0101_selected.png', True)) + self.mArea1.setImage(self.mFrameDoor0101[0]) + CGame().addChild(self.mArea1) + + self.mPlayer = CBoyHall() + CGame().addChild(self.mPlayer) + + self.mText = CMultiLabel() + self.mText.textLines = [ + "dlkjfkljflk dslkdsj dsl", + "lkjdkldjdslk dslkdjd ", + "sadsakjd salkdjsa.", + "", + "dsalkjd ksajdlksjd lsk" + "dskldsjfkjd f d."] + + self.mText.size = (400, 300) + self.mText.fgColor = (0xFF, 0xFF, 0xFF) + self.mText.bgColor = (0, 0, 0) + self.mText.center = (320, 200) + self.mText.createImage() + CGame().addChild(self.mText) + + def update(self): + #print "menu update" + CGameState.update(self) + + if self.mButtonBack.clicked(): + print "clicked back......" + ms = MenuState.CMenuState() + CGame().setState(ms) + return + + #if (self.mArea1 <> None): + if (CMath.pointInsidePolygon(CMouse().getX(), CMouse().getY(), self.AREA1_POLYGON)): + self.mArea1.setImage(self.mFrameDoor0101[1]) + if (CMouse().firstPress()): + a1g1 = CArea1Game1() + CGame().setState(a1g1) + else: + self.mArea1.setImage(self.mFrameDoor0101[0]) + + #def render(self): + # CGameState.render(self) + # print "CMenuState render" + + def destroy(self): + CGameState.destroy(self) + CGame().removeChild(self.mButtonBack) + self.mButtonBack = None + CGame().removeChild(self.mArea1) + self.mArea1.destroy() + self.mArea1 = None + CGame().removeChild(self.mPlayer) + self.mPlayer.destroy() + self.mPlayer = None + self.mBackground = None + + def doEvents(self, aEvent): + print aEvent.type
\ No newline at end of file diff --git a/src/game/SelectAreaState.py b/src/game/SelectAreaState.py index bfa9ba6..8435244 100644 --- a/src/game/SelectAreaState.py +++ b/src/game/SelectAreaState.py @@ -21,6 +21,9 @@ from api.Mouse import * import api.Math as CMath +import HallState +from HallState import * + import pygame class CSelectAreaState(CGameState): @@ -70,13 +73,16 @@ class CSelectAreaState(CGameState): if self.mButtonBack.clicked(): print "clicked back......" - ms = MenuState.CMenuState() + ms = CMenuState() CGame().setState(ms) return #if (self.mArea1 <> None): if (CMath.pointInsidePolygon(CMouse().getX(), CMouse().getY(), self.AREA1_POLYGON)): self.mArea1.setImage(self.mFrameImageArea1[1]) + if (CMouse().release()): + hs = CHallState() + CGame().setState(hs) else: self.mArea1.setImage(self.mFrameImageArea1[0]) |