/
game.py
122 lines (96 loc) · 3.31 KB
/
game.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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#!/usr/bin/python
# coding=UTF-8
from fwk.ui.screen import Screen
from fwk.ui.console import GAME_CONSOLE
from fwk.ui.layers.staticBg import StaticBackgroundLauer
from fwk.ui.layers.guiItem import GUIItemLayer
from fwk.ui.layers.guitextitem import GUITextItem
from fwk.ui.layers.gameLayer import GameLayer as GameLayer_
from fwk.ui.layers.texture9TileItem import *
from fwk.game.game import Game
from fwk.game.entity import GameEntity
from fwk.game.camera import Camera
import fwk.sound.static as ssound
import fwk.sound.music as music
from fwk.util.all import *
@GameEntity.defineClass('test-entity')
class TestEntity(GameEntity,GameEntity.mixin.Animation,GameEntity.mixin.Movement):
def spawn(self):
self.angularVelocity = 100
self.i = 0
self.think()
def think(self):
if self.i > 10:
return self.destroy()
self.game.scheduleAfter(1.0,self.think)
self.position = (self.i*10 % 40,-self.i*20 % 50)
self.velocity = (self.i*2353 % 100 - 50,-self.i*5423 % 110 - 55)
self.i += 1
@GameEntity.defineClass('test-player')
class TestPlayer(GameEntity,GameEntity.mixin.Sprite,GameEntity.mixin.CameraTarget,GameEntity.mixin.Movement):
pass
@GameEntity.defineClass('static-entity')
class StaticEntity(GameEntity,GameEntity.mixin.Sprite):
'''
Просто статическая спрайтовая сущность с нестандартным z-индексом.
'''
z_index = -1
class GameLayer(GameLayer_):
'''
Наследник игрового слоя.
'''
def init(self,*args,**kwargs):
self._player = self._game.getEntityById('player')
self._camera.setController(self._player)
def on_key_press(self,key,mod):
'''
Здесь происходит управление с клавиатуры.
'''
if key == KEY.UP:
self._player.rotation += 20
if key == KEY.DOWN:
self._player.rotation -= 20
def on_mouse_press(self,x,y,b,mod):
'''
Управление с мыши.
'''
self._player.position = self._camera.unproject((x,y))
def draw(self):
GameLayer_.draw(self)
tep = self._camera.project(self._game.getEntityById('test0').position)
DrawWireframeRect(Rect(left=tep[0],bottom=tep[1],width=100,height=100))
@Screen.ScreenClass('STARTUP')
class StartupScreen(Screen):
def init(self,*args,**kwargs):
# self.pushLayerFront(StaticBackgroundLauer('rc/img/256x256bg.png','fill'))
game = Game()
game.loadFromJSON('rc/lvl/level0.json')
self.pushLayerFront(GameLayer(game=game,camera=Camera()))
ssound.Preload('rc/snd/1.wav',['alias0'])
musmap = {0:'rc/snd/music/Welcome.mp3',1:'rc/snd/music/Time.mp3',2:'rc/snd/music/0x4.mp3'}
for x in xrange(0,3):
layer = GUITextItem(
layout={
'width':100,
'height':20,
'left':50,
'right':50,
'offset_y':70*x,
'padding':[20,10],
'force-size':False
},
text=musmap[x]);
layer.on('ui:click',(lambda x: lambda *a: music.Play(musmap[x],loop=True))(x))
self.pushLayerFront(layer)
tile = _9Tiles(LoadTexture('rc/img/ui-frames.png'),Rect(left=0,bottom=0,width=12,height=12))
self.pushLayerFront(GUI9TileItem(
tiles=tile,
layout = {
'left': 100,
'right': 100,
'top': 200,
'bottom': 200
}))
GAME_CONSOLE.write('Startup screen created.')
def on_key_press(self,key,mod):
pass#GAME_CONSOLE.write('SSC:Key down:',KEY.symbol_string(key),'(',key,') [+',KEY.modifiers_string(mod),']')