-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathobjects.py
88 lines (79 loc) · 2.23 KB
/
objects.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# coding: utf-8
import pygame
import xml.etree.ElementTree as ET
import random
class RoomObject(pygame.sprite.Sprite):
def __init__(self):
"""
Código que se carga nada más iniciar el mapa e instanciar el objeto. ¡SI DA PROBLEMAS: ELIMINAR!
"""
pygame.sprite.Sprite.__init__(self)
def update(self, gc):
"""
Código que se ejecuta a cada momento del juego mientras el objeto esté instanciado y en el mapa actual.
"""
pass
def onTalk(self, gc):
"""
Código que se ejecuta cuando el héroe habla con este objeto.
"""
pass
def onWalk(self, gc):
"""
Código que se ejecuta cuando el héroe llega al tile donde está este objeto.
"""
pass
def onTouch(self, gc):
"""
Código que se ejecuta cuando el héroe intenta avanzar al tile donde está este objeto.
"""
pass
class Animated(RoomObject):
def __init__(self, spritesheet="005"):
pygame.sprite.Sprite.__init__(self)
self.spritesheet = pygame.image.load("sprites/"+spritesheet+".png")
self.images = ripSpriteSheet(self.spritesheet)
self.facing = 1
self.image = self.images[self.facing][0]
# Posición del rectángulo 16x16 en cada cuadrícula de sprites de 32x32
self.spritesheetPos = [7,15]
self.onGrass = False
def update(self, gc):
rand = random.randint(0,59)
if rand == 0:
self.facing = random.randint(0,3)
self.image = self.images[self.facing][0]
class Warp(RoomObject):
def onContact(self):
gc.currentMap = True
class Text(RoomObject):
pass
typeToClass = {"Text": Text}
# Ejemplo de RoomObject, un árbol que cada 10 segundos (600f) pierde las hojas.
class Arbol(RoomObject):
def __init__(self):
self.hojas = True
self.timer = 600
def update(self):
if self.timer == 0:
self.hojas = False
self.timer = 600
else:
self.timer -= 1
self.hojas = True
def onTalk(self):
gc.showMessage("Perderé las hojas en " + self.timer/60.0 + " segundos.")
def ripSpriteSheet(s):
"""
Dado un Surface que representa un spritesheet, lo ripea y devuelve una matriz 4x4 de Surfaces.
"""
images = []
for i in range(4):
images.append([])
for j in range(4):
tempS = pygame.Surface((32,32),pygame.SRCALPHA)
tempS.blit(s,(0,0),(32*j,32*i,32,32))
images[i].append(tempS)
images.insert(0,images[3])
del images[4]
return images