SHARE
TWEET

Configuration file

LiuYang Nov 12th, 2019 73 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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()
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top