Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.settings/org.eclipse.core.resources.prefs2
-rw-r--r--src/api/Anim.py62
-rwxr-xr-xsrc/api/Game.py3
-rwxr-xr-xsrc/api/MultiLabel.py4
-rw-r--r--src/assets/images/hall/background_hall0101.pngbin0 -> 5329 bytes
-rw-r--r--src/assets/images/hall/boy001.pngbin0 -> 12007 bytes
-rw-r--r--src/assets/images/hall/boy002.pngbin0 -> 11288 bytes
-rw-r--r--src/assets/images/hall/boy003.pngbin0 -> 12430 bytes
-rw-r--r--src/assets/images/hall/door0101_normal.pngbin0 -> 5258 bytes
-rw-r--r--src/assets/images/hall/door0101_selected.pngbin0 -> 27511 bytes
-rw-r--r--src/assets/images/hall/girl001.pngbin0 -> 12980 bytes
-rw-r--r--src/game/BoyHall.py144
-rw-r--r--src/game/HallState.py132
-rw-r--r--src/game/SelectAreaState.py8
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
new file mode 100644
index 0000000..c2013d0
--- /dev/null
+++ b/src/assets/images/hall/background_hall0101.png
Binary files differ
diff --git a/src/assets/images/hall/boy001.png b/src/assets/images/hall/boy001.png
new file mode 100644
index 0000000..8a17009
--- /dev/null
+++ b/src/assets/images/hall/boy001.png
Binary files differ
diff --git a/src/assets/images/hall/boy002.png b/src/assets/images/hall/boy002.png
new file mode 100644
index 0000000..3ca5491
--- /dev/null
+++ b/src/assets/images/hall/boy002.png
Binary files differ
diff --git a/src/assets/images/hall/boy003.png b/src/assets/images/hall/boy003.png
new file mode 100644
index 0000000..46a26b4
--- /dev/null
+++ b/src/assets/images/hall/boy003.png
Binary files differ
diff --git a/src/assets/images/hall/door0101_normal.png b/src/assets/images/hall/door0101_normal.png
new file mode 100644
index 0000000..21fea1c
--- /dev/null
+++ b/src/assets/images/hall/door0101_normal.png
Binary files differ
diff --git a/src/assets/images/hall/door0101_selected.png b/src/assets/images/hall/door0101_selected.png
new file mode 100644
index 0000000..2933b47
--- /dev/null
+++ b/src/assets/images/hall/door0101_selected.png
Binary files differ
diff --git a/src/assets/images/hall/girl001.png b/src/assets/images/hall/girl001.png
new file mode 100644
index 0000000..e13903f
--- /dev/null
+++ b/src/assets/images/hall/girl001.png
Binary files differ
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])