Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from panda3d.core import *
- from panda3d.core import TextNode
- from direct.gui.DirectGui import *
- from direct.actor.Actor import Actor
- import random
- class myConfigure():
- def __init__(self, Width, Height, Model):
- self.width = Width
- self.height = Height
- self.model = Model
- def Window(self):
- self.window = WindowProperties()
- self.window.setSize(self.width, self.height)
- base.win.requestProperties(self.window)
- def Map(self):
- self.map = loader.loadModel(self.model)
- self.map.reparentTo(render)
- return self.map
- 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,):
- self.text = OnscreenText(text=text_text,
- pos=pos_pos,
- bg=bg_bg,
- scale=scale_scale,
- wordwrap=25)
- return self.text
- def Dialog(self, frameSize_frameSize, fadeScreen_fadeScreen, pos_pos, color_color):
- self.dialog = DirectDialog(frameSize=frameSize_frameSize,
- fadeScreen=fadeScreen_fadeScreen,
- relief=DGG.FLAT)
- self.dialog.setPos(pos_pos)
- self.dialog.setColor(color_color)
- return self.dialog
- def Button(self, text_text, parent_parent, command_command, scale_scale, pos_pos):
- self.button = DirectButton(text=text_text,
- parent=parent_parent,
- command=command_command,
- scale=scale_scale,
- pos=pos_pos)
- return self.button
- def Fence(self, size, pos_pos):
- fenceSolid = CollisionTube(size[0], size[1], size[2], size[3], size[4], size[5], size[6])
- fenceNode = CollisionNode("fence")
- fenceNode.addSolid(fenceSolid)
- fence = render.attachNewNode(fenceNode)
- fence.setPos(pos_pos)
- FRICTION = 550.0
- class ActorObject():
- def __init__(self, pos, modelName, modelAnims, maxHealth, maxSpeed, modelScale, colliderName):
- self.actor = Actor(modelName, modelAnims)
- self.actor.reparentTo(render)
- self.actor.setPos(pos)
- self.actor.setScale(modelScale)
- self.maxHealth = maxHealth
- self.health = maxHealth
- self.maxspeed = maxSpeed
- self.walking = False
- capsule = CollisionSphere(0, 0, 0, 10)
- colliderNode = CollisionNode(colliderName)
- colliderNode.addSolid(capsule)
- self.collider = self.actor.attachNewNode(colliderNode)
- self.PoAcc = 0
- self.NeAcc = 550.0
- self.velocity = Vec3(0, 7, 0)
- def move(self,dt):
- speed = self.velocity.length()
- if speed > self.maxspeed:
- self.velocity.normalize()
- self.velocity *= self.maxspeed
- speed = self.maxspeed
- if not self.walking:
- respeed = self.NeAcc * dt
- if respeed > speed:
- self.velocity = Vec3(0, 0, 0)
- else:
- respeeda = -self.velocity
- respeeda.normalize()
- respeeda *= respeed
- self.velocity += respeeda
- self.actor.setPos(self.actor.getPos() + self.velocity * dt)
- class Player(ActorObject):
- def __init__(self):
- ActorObject.__init__(self,
- (-50, 0, 0),
- "codemao",
- {
- "walk": "codemao_walk",
- "stand":"codemao_stand"
- },
- 5,
- 80,
- 0.4,
- 'player'
- )
- base.pusher.addCollider(self.collider, self.actor)
- base.cTrav.addCollider(self.collider, base.pusher)
- self.ray = CollisionRay(0, 0, 0, 0, -1, 0)
- rayNode = CollisionNode("playerRay")
- rayNode.addSolid(self.ray)
- self.rayNodePath = self.actor.attachNewNode(rayNode)
- self.rayQueue = CollisionHandlerQueue()
- base.cTrav.addCollider(self.rayNodePath, self.rayQueue)
- mask = BitMask32()
- mask.setBit(1)
- self.collider.node().setIntoCollideMask(mask)
- mask = BitMask32()
- mask.setBit(1)
- self.collider.node().setFromCollideMask(mask)
- mask = BitMask32()
- mask.setBit(2)
- rayNode.setFromCollideMask(mask)
- mask = BitMask32()
- rayNode.setIntoCollideMask(mask)
- self.laser_weapon = loader.loadModel("laser")
- self.laser_weapon.reparentTo(self.actor)
- #self.laser_weapon.setScale(40)
- self.laser_weapon.setPos(-30,0,40)
- self.laser_weapon.setLightOff()
- self.laser_weapon.getChild(0).setH(180)
- self.laser_weapon.hide()
- def update(self, keys,dt):
- ActorObject.move(self,dt)
- self.acceleration = 600
- self.walking = False
- if keys["up"]:
- self.walking = True
- self.velocity.addY(self.acceleration*dt)
- base.cam.setPos(self.actor.getPos() + (0, -220, 80))
- self.actor.setH(180)
- base.cam.setH(self.actor.getH()+180)
- if keys["down"]:
- self.walking = True
- self.velocity.addY(-self.acceleration*dt)
- base.cam.setPos(self.actor.getPos() + (0, 220, 80))
- self.actor.setH(0)
- base.cam.setH(self.actor.getH() + 180)
- if keys["left"]:
- self.walking = True
- self.velocity.addX(-self.acceleration*dt)
- base.cam.setPos(self.actor.getPos() + (220, 0, 80))
- self.actor.setH(270)
- base.cam.setH(self.actor.getH()+180)
- if keys["right"]:
- self.walking = True
- self.velocity.addX(self.acceleration*dt)
- base.cam.setPos(self.actor.getPos() + (-220, 0, 80))
- self.actor.setH(90)
- base.cam.setH(self.actor.getH() + 180)
- if self.walking:
- walkControl = self.actor.getAnimControl("walk")
- if not walkControl.isPlaying():
- self.actor.loop("walk")
- else:
- self.actor.stop("walk")
- self.actor.loop("stand")
- if keys["shoot"]:
- if self.rayQueue.getNumEntries() > 0:
- self.rayQueue.sortEntries()
- rayHit = self.rayQueue.getEntry(0)
- hitPos = rayHit.getSurfacePoint(render)
- beamLength = (hitPos -self.actor.getPos() ).length()
- print(beamLength)
- self.laser_weapon.setSy(beamLength)
- self.laser_weapon.show()
- else:
- self.laser_weapon.hide()
- class Enemy_woodmen(ActorObject):
- def __init__(self):
- ActorObject.__init__(self,
- (150, 0, 0),
- "woodmen",
- {
- "walk": "woodmen_walk",
- "stand": "woodmen_stand",
- "die":"woodmen_die",
- "attack":"woodmen_shoot"
- },
- 5,
- 10,
- 0.8,
- 'wood'
- )
- mask = BitMask32()
- mask.setBit(2)
- self.collider.node().setIntoCollideMask(mask)
- base.pusher.addCollider(self.collider, self.actor)
- base.cTrav.addCollider(self.collider, base.pusher)
- self.detectiondistance = 100
- self.acceleration = 200
- self.standard = Vec2(0, 1)
- self.attackDelay = 0.3
- self.attackWaitTimer = 0.2
- self.a = 100
- def update(self,player,search_speed,varyangle,dt):
- ActorObject.move(self, dt)
- position_vevtor = player.actor.getPos() - self.actor.getPos()
- position_vevtor2D = position_vevtor.getXy()
- distanceToplayer = position_vevtor2D.length()
- position_vevtor2D.normalize()
- if distanceToplayer > self.detectiondistance:
- self.walking = True
- self.heading = self.standard.signedAngleDeg(varyangle)
- self.velocity = search_speed
- self.actor.setPlayRate(0.3, "attack")
- elif distanceToplayer < self.detectiondistance and distanceToplayer > 25:
- self.heading = self.standard.signedAngleDeg(position_vevtor2D)
- self.walking = True
- self.actor.setPlayRate(1.1, "attack")
- self.velocity += position_vevtor * self.acceleration * dt
- print(self.attackWaitTimer,distanceToplayer)
- else:
- self.walfing = False
- self.velocity = Vec3(0,0,0)
- if self.attackWaitTimer > 0 and distanceToplayer <= 25:
- self.attackWaitTimer -= dt
- self.walking = False
- self.velocity.set(0, 0, 0)
- if self.attackWaitTimer <= 0:
- self.attackWaitTimer = random.uniform(0.5, 0.7)
- self.actor.play("attack")
- self.a -= 1
- #print(self.a,self.attackWaitTimer,distanceToplayer)
- if self.walking:
- walkingControl = self.actor.getAnimControl("walk")
- if not walkingControl.isPlaying():
- attackControl = self.actor.getAnimControl("attack")
- if not attackControl.isPlaying():
- self.actor.loop("walk")
- self.actor.loop("attack")
- else:
- self.actor.stop("walk")
- self.actor.stop("attack")
- self.actor.loop("stand")
- self.actor.setH(self.heading + 180)
- class Enemy_needle(ActorObject):
- def __init__(self):
- ActorObject.__init__(self,
- (270, 0, -2),
- "GroundNeedle",
- {
- "motion": "GroundNeedle_motion",
- "stop": "GroundNeedle_stop",
- },
- 5,
- 0,
- 0.5,
- 'needle'
- )
- needlenode = NodePath('needlelist')
- for i in range(-220,-50,20):
- needle = needlenode.attachNewNode('needle')
- needle.setPos(40,i,0)
- self.actor.instanceTo(needle)
- for i in range(50,220,20):
- needle = needlenode.attachNewNode('needle')
- needle.setPos(80,i,0)
- self.actor.instanceTo(needle)
- needlenode.reparentTo((render))
- self.actor.setPlayRate(0.2,"motion")
- self.actor.loop("motion")
- =====================================================================================The following is the execution file
- from Game_Configure6 import *
- from direct.showbase.ShowBase import ShowBase
- from direct.task import Task
- story = '''Story
- When codemao went out to find a gift
- for a small partner who liked it, a group
- of exotic animals would be able to take it
- away. Codemao finds where they hide, but
- it's hard to save a little, and use your
- ingenuity to help codemao!
- '''
- control = ''' Control
- w ---- up
- s ---- down
- a ---- left
- d ---- right
- mouse_left ---- shoot
- '''
- class Game_Run(ShowBase):
- def __init__(self):
- ShowBase.__init__(self)
- #self.disableMouse()
- self.configure = myConfigure(1400, 1000, 'map')
- self.configure.Window()
- self.text_1 = self.configure.Screen_Text(text_text=story,
- pos_pos=(0, 0.75),
- bg_bg=(0.7, 0.4, 0.8, 1),
- scale_scale=0.1,)
- self.text_2 = self.configure.Screen_Text(text_text=control,
- pos_pos=(0, 0),
- bg_bg=(0.3, 0.6, 0.9, 1),
- scale_scale=0.1)
- self.dialog_1 = self.configure.Dialog(frameSize_frameSize=(-0.5, 0.5, 0.1, -0.1),
- fadeScreen_fadeScreen=1,
- pos_pos=(0, 0, -0.8),
- color_color=(0.1, 0.9, 0.9, 1))
- self.button_1 = self.configure.Button(text_text='Start Game',
- parent_parent=self.dialog_1,
- command_command=self.Start,
- scale_scale=0.15,
- pos_pos=(0, 0, -0.05))
- self.dialog_1['frameTexture'] = 'brass.png'
- self.text_1['frame'] = (0.8, 0.6, 0.7, 1)
- self.text_2['frame'] = (0.8, 0.9, 0.7, 1)
- self.configure.Fence((-580, 0, 0, 580, 0, 0, 5), (0, 350, 0))
- self.configure.Fence((-580, 0, 0, 580, 0, 0, 5), (0, -350, 0))
- self.configure.Fence((0, -350, 0, 0, 350, 0, 5), (580, 0, 0))
- self.configure.Fence((0, -40, 0, 0, 350, 0, 5), (-580, 0, 0))
- self.configure.Fence((0, -150, 0, 0, -350, 0, 5), (-580, 0, 0))
- self.configure.Fence((-8, 0, 0, 8, 0, 0, 5), (33, 270, 0))
- self.configure.Fence((0, -8, 0, 0, 8, 0, 5), (20, 260, 0))
- self.configure.Fence((-8, 0, 0, 8, 0, 0, 5), (33, 250, 0))
- self.configure.Fence((0, -8, 0, 0, 8, 0, 5), (45, 260, 0))
- self.configure.Fence((-8, 0, 0, 8, 0, 0, 5), (-45, 310, 0))
- self.configure.Fence((0, -8, 0, 0, 8, 0, 5), (-58, 300, 0))
- self.configure.Fence((-8, 0, 0, 8, 0, 0, 5), (-45, 290, 0))
- self.configure.Fence((0, -8, 0, 0, 8, 0, 5), (-33, 300, 0))
- self.pusher = CollisionHandlerPusher()
- self.cTrav = CollisionTraverser()
- self.pusher.setHorizontal(True)
- self.state = {
- "up": False,
- "down": False,
- "left": False,
- "right": False,
- "shoot": False
- }
- self.accept('w', self.UpdateState, ['up', True])
- self.accept('w-up', self.UpdateState, ['up', False])
- self.accept('s', self.UpdateState, ['down', True])
- self.accept('s-up', self.UpdateState, ['down', False])
- self.accept('a',self.UpdateState, ['left', True])
- self.accept('a-up', self.UpdateState, ['left', False])
- self.accept('d', self.UpdateState, ['right', True])
- self.accept('d-up', self.UpdateState, ['right', False])
- self.accept('mouse1', self.UpdateState, ['shoot', True])
- self.accept('mouse1-up', self.UpdateState, ['shoot', False])
- hLight = AmbientLight("ambient light")
- hLight.setColor((0.1, 0.1, 0.1, 1))
- self.hlnp = render.attachNewNode(hLight)
- render.setLight(self.hlnp)
- self.search_speed = Vec3(0, 50, 0)
- self.varyangle = Vec2(0, 1)
- self.pusher.add_in_pattern("%fn-into-%in")
- self.accept('wood-into-fence', self.Change)
- self.accept('player-into-needle', self.Attach)
- def Attach(self,entry):
- print('haowan')
- def Change(self,entry):
- self.search_speed = -self.search_speed
- self.varyangle = -self.varyangle
- def Start(self):
- self.text_1.destroy()
- self.text_2.destroy()
- self.dialog_1.hide()
- self.map_1 = self.configure.Map()
- self.player = Player()
- taskMgr.add(self.update, "update")
- playerLight = PointLight("move light")
- playerLight.setColor((1, 1, 1, 1))
- playerLight.setAttenuation((0.6, 0.01, 0))
- self.playerlnp = self.player.actor.attachNewNode(playerLight)
- self.playerlnp.setPos(0,0,100)
- render.setLight(self.playerlnp)
- base.camLens.setFov(60)
- self.woodmen = Enemy_woodmen()
- self.needle = Enemy_needle()
- def UpdateState(self, controlName, controlState):
- self.state[controlName] = controlState
- def update(self, task):
- dt = globalClock.getDt()
- self.player.update(self.state,dt)
- self.woodmen.update(self.player,self.search_speed,self.varyangle,dt)
- return Task.cont
- game = Game_Run()
- game.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement