Advertisement
LiuYang

Configuration file

Nov 12th, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.38 KB | None | 0 0
  1. from panda3d.core import *
  2. from panda3d.core import TextNode
  3. from direct.gui.DirectGui import *
  4. from direct.actor.Actor import Actor
  5. import random
  6.  
  7. class myConfigure():
  8. def __init__(self, Width, Height, Model):
  9. self.width = Width
  10. self.height = Height
  11. self.model = Model
  12. def Window(self):
  13. self.window = WindowProperties()
  14. self.window.setSize(self.width, self.height)
  15. base.win.requestProperties(self.window)
  16. def Map(self):
  17. self.map = loader.loadModel(self.model)
  18. self.map.reparentTo(render)
  19. return self.map
  20. def Screen_Text(self, text_text='Welcome', pos_pos=(-0.8, 0.3), bg_bg=(0.6, 0.4, 0.3, 1), scale_scale=0.1,):
  21. self.text = OnscreenText(text=text_text,
  22. pos=pos_pos,
  23. bg=bg_bg,
  24. scale=scale_scale,
  25. wordwrap=25)
  26. return self.text
  27. def Dialog(self, frameSize_frameSize, fadeScreen_fadeScreen, pos_pos, color_color):
  28. self.dialog = DirectDialog(frameSize=frameSize_frameSize,
  29. fadeScreen=fadeScreen_fadeScreen,
  30. relief=DGG.FLAT)
  31. self.dialog.setPos(pos_pos)
  32. self.dialog.setColor(color_color)
  33. return self.dialog
  34. def Button(self, text_text, parent_parent, command_command, scale_scale, pos_pos):
  35. self.button = DirectButton(text=text_text,
  36. parent=parent_parent,
  37. command=command_command,
  38. scale=scale_scale,
  39. pos=pos_pos)
  40. return self.button
  41. def Fence(self, size, pos_pos):
  42. fenceSolid = CollisionTube(size[0], size[1], size[2], size[3], size[4], size[5], size[6])
  43. fenceNode = CollisionNode("fence")
  44. fenceNode.addSolid(fenceSolid)
  45. fence = render.attachNewNode(fenceNode)
  46. fence.setPos(pos_pos)
  47. FRICTION = 550.0
  48. class ActorObject():
  49. def __init__(self, pos, modelName, modelAnims, maxHealth, maxSpeed, modelScale, colliderName):
  50. self.actor = Actor(modelName, modelAnims)
  51. self.actor.reparentTo(render)
  52. self.actor.setPos(pos)
  53. self.actor.setScale(modelScale)
  54. self.maxHealth = maxHealth
  55. self.health = maxHealth
  56. self.maxspeed = maxSpeed
  57. self.walking = False
  58. capsule = CollisionSphere(0, 0, 0, 10)
  59. colliderNode = CollisionNode(colliderName)
  60. colliderNode.addSolid(capsule)
  61. self.collider = self.actor.attachNewNode(colliderNode)
  62. self.PoAcc = 0
  63. self.NeAcc = 550.0
  64. self.velocity = Vec3(0, 7, 0)
  65. def move(self,dt):
  66. speed = self.velocity.length()
  67. if speed > self.maxspeed:
  68. self.velocity.normalize()
  69. self.velocity *= self.maxspeed
  70. speed = self.maxspeed
  71. if not self.walking:
  72. respeed = self.NeAcc * dt
  73. if respeed > speed:
  74. self.velocity = Vec3(0, 0, 0)
  75. else:
  76. respeeda = -self.velocity
  77. respeeda.normalize()
  78. respeeda *= respeed
  79. self.velocity += respeeda
  80. self.actor.setPos(self.actor.getPos() + self.velocity * dt)
  81. class Player(ActorObject):
  82. def __init__(self):
  83. ActorObject.__init__(self,
  84. (-50, 0, 0),
  85. "codemao",
  86. {
  87. "walk": "codemao_walk",
  88. "stand":"codemao_stand"
  89. },
  90. 5,
  91. 80,
  92. 0.4,
  93. 'player'
  94. )
  95.  
  96. base.pusher.addCollider(self.collider, self.actor)
  97. base.cTrav.addCollider(self.collider, base.pusher)
  98.  
  99. self.ray = CollisionRay(0, 0, 0, 0, -1, 0)
  100. rayNode = CollisionNode("playerRay")
  101. rayNode.addSolid(self.ray)
  102. self.rayNodePath = self.actor.attachNewNode(rayNode)
  103. self.rayQueue = CollisionHandlerQueue()
  104. base.cTrav.addCollider(self.rayNodePath, self.rayQueue)
  105.  
  106.  
  107. mask = BitMask32()
  108. mask.setBit(1)
  109. self.collider.node().setIntoCollideMask(mask)
  110. mask = BitMask32()
  111. mask.setBit(1)
  112. self.collider.node().setFromCollideMask(mask)
  113.  
  114. mask = BitMask32()
  115. mask.setBit(2)
  116. rayNode.setFromCollideMask(mask)
  117. mask = BitMask32()
  118. rayNode.setIntoCollideMask(mask)
  119.  
  120.  
  121. self.laser_weapon = loader.loadModel("laser")
  122. self.laser_weapon.reparentTo(self.actor)
  123. #self.laser_weapon.setScale(40)
  124. self.laser_weapon.setPos(-30,0,40)
  125. self.laser_weapon.setLightOff()
  126. self.laser_weapon.getChild(0).setH(180)
  127. self.laser_weapon.hide()
  128.  
  129. def update(self, keys,dt):
  130. ActorObject.move(self,dt)
  131. self.acceleration = 600
  132. self.walking = False
  133. if keys["up"]:
  134. self.walking = True
  135. self.velocity.addY(self.acceleration*dt)
  136. base.cam.setPos(self.actor.getPos() + (0, -220, 80))
  137. self.actor.setH(180)
  138. base.cam.setH(self.actor.getH()+180)
  139. if keys["down"]:
  140. self.walking = True
  141. self.velocity.addY(-self.acceleration*dt)
  142. base.cam.setPos(self.actor.getPos() + (0, 220, 80))
  143. self.actor.setH(0)
  144. base.cam.setH(self.actor.getH() + 180)
  145. if keys["left"]:
  146. self.walking = True
  147. self.velocity.addX(-self.acceleration*dt)
  148. base.cam.setPos(self.actor.getPos() + (220, 0, 80))
  149. self.actor.setH(270)
  150. base.cam.setH(self.actor.getH()+180)
  151. if keys["right"]:
  152. self.walking = True
  153. self.velocity.addX(self.acceleration*dt)
  154. base.cam.setPos(self.actor.getPos() + (-220, 0, 80))
  155. self.actor.setH(90)
  156. base.cam.setH(self.actor.getH() + 180)
  157. if self.walking:
  158. walkControl = self.actor.getAnimControl("walk")
  159. if not walkControl.isPlaying():
  160. self.actor.loop("walk")
  161. else:
  162. self.actor.stop("walk")
  163. self.actor.loop("stand")
  164. if keys["shoot"]:
  165. if self.rayQueue.getNumEntries() > 0:
  166. self.rayQueue.sortEntries()
  167. rayHit = self.rayQueue.getEntry(0)
  168. hitPos = rayHit.getSurfacePoint(render)
  169. beamLength = (hitPos -self.actor.getPos() ).length()
  170. print(beamLength)
  171. self.laser_weapon.setSy(beamLength)
  172. self.laser_weapon.show()
  173. else:
  174. self.laser_weapon.hide()
  175. class Enemy_woodmen(ActorObject):
  176. def __init__(self):
  177. ActorObject.__init__(self,
  178. (150, 0, 0),
  179. "woodmen",
  180. {
  181. "walk": "woodmen_walk",
  182. "stand": "woodmen_stand",
  183. "die":"woodmen_die",
  184. "attack":"woodmen_shoot"
  185. },
  186. 5,
  187. 10,
  188. 0.8,
  189. 'wood'
  190. )
  191.  
  192. mask = BitMask32()
  193. mask.setBit(2)
  194.  
  195. self.collider.node().setIntoCollideMask(mask)
  196. base.pusher.addCollider(self.collider, self.actor)
  197. base.cTrav.addCollider(self.collider, base.pusher)
  198. self.detectiondistance = 100
  199. self.acceleration = 200
  200. self.standard = Vec2(0, 1)
  201.  
  202. self.attackDelay = 0.3
  203. self.attackWaitTimer = 0.2
  204. self.a = 100
  205.  
  206. def update(self,player,search_speed,varyangle,dt):
  207.  
  208. ActorObject.move(self, dt)
  209. position_vevtor = player.actor.getPos() - self.actor.getPos()
  210. position_vevtor2D = position_vevtor.getXy()
  211. distanceToplayer = position_vevtor2D.length()
  212. position_vevtor2D.normalize()
  213. if distanceToplayer > self.detectiondistance:
  214. self.walking = True
  215. self.heading = self.standard.signedAngleDeg(varyangle)
  216. self.velocity = search_speed
  217. self.actor.setPlayRate(0.3, "attack")
  218. elif distanceToplayer < self.detectiondistance and distanceToplayer > 25:
  219. self.heading = self.standard.signedAngleDeg(position_vevtor2D)
  220. self.walking = True
  221. self.actor.setPlayRate(1.1, "attack")
  222. self.velocity += position_vevtor * self.acceleration * dt
  223. print(self.attackWaitTimer,distanceToplayer)
  224. else:
  225. self.walfing = False
  226. self.velocity = Vec3(0,0,0)
  227. if self.attackWaitTimer > 0 and distanceToplayer <= 25:
  228. self.attackWaitTimer -= dt
  229. self.walking = False
  230. self.velocity.set(0, 0, 0)
  231. if self.attackWaitTimer <= 0:
  232. self.attackWaitTimer = random.uniform(0.5, 0.7)
  233. self.actor.play("attack")
  234. self.a -= 1
  235. #print(self.a,self.attackWaitTimer,distanceToplayer)
  236. if self.walking:
  237. walkingControl = self.actor.getAnimControl("walk")
  238. if not walkingControl.isPlaying():
  239. attackControl = self.actor.getAnimControl("attack")
  240. if not attackControl.isPlaying():
  241. self.actor.loop("walk")
  242. self.actor.loop("attack")
  243. else:
  244. self.actor.stop("walk")
  245. self.actor.stop("attack")
  246. self.actor.loop("stand")
  247. self.actor.setH(self.heading + 180)
  248. class Enemy_needle(ActorObject):
  249. def __init__(self):
  250. ActorObject.__init__(self,
  251. (270, 0, -2),
  252. "GroundNeedle",
  253. {
  254. "motion": "GroundNeedle_motion",
  255. "stop": "GroundNeedle_stop",
  256. },
  257. 5,
  258. 0,
  259. 0.5,
  260. 'needle'
  261. )
  262. needlenode = NodePath('needlelist')
  263. for i in range(-220,-50,20):
  264. needle = needlenode.attachNewNode('needle')
  265. needle.setPos(40,i,0)
  266. self.actor.instanceTo(needle)
  267.  
  268. for i in range(50,220,20):
  269. needle = needlenode.attachNewNode('needle')
  270. needle.setPos(80,i,0)
  271. self.actor.instanceTo(needle)
  272. needlenode.reparentTo((render))
  273. self.actor.setPlayRate(0.2,"motion")
  274. self.actor.loop("motion")
  275.  
  276.  
  277. =====================================================================================The following is the execution file
  278. from Game_Configure6 import *
  279. from direct.showbase.ShowBase import ShowBase
  280. from direct.task import Task
  281.  
  282. story = '''Story
  283. When codemao went out to find a gift
  284. for a small partner who liked it, a group
  285. of exotic animals would be able to take it
  286. away. Codemao finds where they hide, but
  287. it's hard to save a little, and use your
  288. ingenuity to help codemao!
  289. '''
  290. control = ''' Control
  291. w ---- up
  292. s ---- down
  293. a ---- left
  294. d ---- right
  295. mouse_left ---- shoot
  296.  
  297. '''
  298.  
  299.  
  300. class Game_Run(ShowBase):
  301. def __init__(self):
  302. ShowBase.__init__(self)
  303. #self.disableMouse()
  304. self.configure = myConfigure(1400, 1000, 'map')
  305. self.configure.Window()
  306. self.text_1 = self.configure.Screen_Text(text_text=story,
  307. pos_pos=(0, 0.75),
  308. bg_bg=(0.7, 0.4, 0.8, 1),
  309. scale_scale=0.1,)
  310. self.text_2 = self.configure.Screen_Text(text_text=control,
  311. pos_pos=(0, 0),
  312. bg_bg=(0.3, 0.6, 0.9, 1),
  313. scale_scale=0.1)
  314. self.dialog_1 = self.configure.Dialog(frameSize_frameSize=(-0.5, 0.5, 0.1, -0.1),
  315. fadeScreen_fadeScreen=1,
  316. pos_pos=(0, 0, -0.8),
  317. color_color=(0.1, 0.9, 0.9, 1))
  318. self.button_1 = self.configure.Button(text_text='Start Game',
  319. parent_parent=self.dialog_1,
  320. command_command=self.Start,
  321. scale_scale=0.15,
  322. pos_pos=(0, 0, -0.05))
  323. self.dialog_1['frameTexture'] = 'brass.png'
  324. self.text_1['frame'] = (0.8, 0.6, 0.7, 1)
  325. self.text_2['frame'] = (0.8, 0.9, 0.7, 1)
  326. self.configure.Fence((-580, 0, 0, 580, 0, 0, 5), (0, 350, 0))
  327. self.configure.Fence((-580, 0, 0, 580, 0, 0, 5), (0, -350, 0))
  328. self.configure.Fence((0, -350, 0, 0, 350, 0, 5), (580, 0, 0))
  329. self.configure.Fence((0, -40, 0, 0, 350, 0, 5), (-580, 0, 0))
  330. self.configure.Fence((0, -150, 0, 0, -350, 0, 5), (-580, 0, 0))
  331. self.configure.Fence((-8, 0, 0, 8, 0, 0, 5), (33, 270, 0))
  332. self.configure.Fence((0, -8, 0, 0, 8, 0, 5), (20, 260, 0))
  333. self.configure.Fence((-8, 0, 0, 8, 0, 0, 5), (33, 250, 0))
  334. self.configure.Fence((0, -8, 0, 0, 8, 0, 5), (45, 260, 0))
  335.  
  336. self.configure.Fence((-8, 0, 0, 8, 0, 0, 5), (-45, 310, 0))
  337. self.configure.Fence((0, -8, 0, 0, 8, 0, 5), (-58, 300, 0))
  338. self.configure.Fence((-8, 0, 0, 8, 0, 0, 5), (-45, 290, 0))
  339. self.configure.Fence((0, -8, 0, 0, 8, 0, 5), (-33, 300, 0))
  340. self.pusher = CollisionHandlerPusher()
  341. self.cTrav = CollisionTraverser()
  342. self.pusher.setHorizontal(True)
  343. self.state = {
  344. "up": False,
  345. "down": False,
  346. "left": False,
  347. "right": False,
  348. "shoot": False
  349. }
  350. self.accept('w', self.UpdateState, ['up', True])
  351. self.accept('w-up', self.UpdateState, ['up', False])
  352. self.accept('s', self.UpdateState, ['down', True])
  353. self.accept('s-up', self.UpdateState, ['down', False])
  354. self.accept('a',self.UpdateState, ['left', True])
  355. self.accept('a-up', self.UpdateState, ['left', False])
  356. self.accept('d', self.UpdateState, ['right', True])
  357. self.accept('d-up', self.UpdateState, ['right', False])
  358. self.accept('mouse1', self.UpdateState, ['shoot', True])
  359. self.accept('mouse1-up', self.UpdateState, ['shoot', False])
  360.  
  361. hLight = AmbientLight("ambient light")
  362. hLight.setColor((0.1, 0.1, 0.1, 1))
  363. self.hlnp = render.attachNewNode(hLight)
  364. render.setLight(self.hlnp)
  365. self.search_speed = Vec3(0, 50, 0)
  366. self.varyangle = Vec2(0, 1)
  367. self.pusher.add_in_pattern("%fn-into-%in")
  368. self.accept('wood-into-fence', self.Change)
  369. self.accept('player-into-needle', self.Attach)
  370.  
  371. def Attach(self,entry):
  372. print('haowan')
  373.  
  374. def Change(self,entry):
  375. self.search_speed = -self.search_speed
  376. self.varyangle = -self.varyangle
  377.  
  378. def Start(self):
  379. self.text_1.destroy()
  380. self.text_2.destroy()
  381. self.dialog_1.hide()
  382. self.map_1 = self.configure.Map()
  383. self.player = Player()
  384. taskMgr.add(self.update, "update")
  385. playerLight = PointLight("move light")
  386. playerLight.setColor((1, 1, 1, 1))
  387. playerLight.setAttenuation((0.6, 0.01, 0))
  388. self.playerlnp = self.player.actor.attachNewNode(playerLight)
  389. self.playerlnp.setPos(0,0,100)
  390. render.setLight(self.playerlnp)
  391. base.camLens.setFov(60)
  392. self.woodmen = Enemy_woodmen()
  393. self.needle = Enemy_needle()
  394.  
  395. def UpdateState(self, controlName, controlState):
  396. self.state[controlName] = controlState
  397. def update(self, task):
  398. dt = globalClock.getDt()
  399. self.player.update(self.state,dt)
  400. self.woodmen.update(self.player,self.search_speed,self.varyangle,dt)
  401. return Task.cont
  402.  
  403.  
  404. game = Game_Run()
  405. game.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement