This repository has been archived by the owner on Sep 22, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathw_rpg_field_grid.py
77 lines (66 loc) · 2.3 KB
/
w_rpg_field_grid.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
from panda3d.core import (
NodePath,
PandaNode)
class StageGrid:
START_POS = '*'
DOOR_LIST = ['N', 'E', 'W', 'S']
NPC = 'n'
ENEMY = 'e'
BOSS = 'b'
def __init__(self, map_str, stage, blockTypes):
self.stage = stage
self.door_index = 0
self.npc_index = 0
self.enemy_index = 0
self.boss_index = 0
self.rawList = map_str
self.startPosList = []
self.optimize = NodePath(PandaNode("optimization node"))
self.blockTypes = blockTypes
self.loadBlocks()
self.optimizeGeometry()
def loadBlocks(self):
index = 0
for blockKey in self.rawList:
block = self.blockTypes[blockKey]
if not block:
index += 1
continue
blockModel = base.loader.loadModel("{}".format(block))
index_str = str(index).zfill(5)
blockName = self.stage.find(
'**/block.{}'.format(index_str))
blockPos = blockName.getPos()
blockModel.setPos(blockPos)
if blockKey == self.START_POS:
self.startPosList.append(blockPos)
elif blockKey in self.DOOR_LIST:
self.addDoor(blockModel)
elif blockKey == self.NPC:
self.addNPC(blockName)
elif blockKey == self.ENEMY:
self.addEnemy(blockName)
elif blockKey == self.BOSS:
self.addBoss(blockName)
else:
blockModel.reparentTo(self.optimize)
index += 1
continue
blockModel.reparentTo(self.stage)
index += 1
def addBoss(self, blockName):
blockName.setName('boss_{}'.format(self.boss_index))
self.boss_index += 1
def addEnemy(self, blockName):
blockName.setName('enemy_{}'.format(self.enemy_index))
self.enemy_index += 1
def addNPC(self, blockName):
blockName.setName('npc_{}'.format(self.npc_index))
self.npc_index += 1
def addDoor(self, blockModel):
doorBlock = blockModel.find('**/door')
doorBlock.setName('door_{}'.format(self.door_index))
self.door_index += 1
def optimizeGeometry(self):
self.optimize.flattenMedium()
self.optimize.reparentTo(self.stage)