=======game======
from Game_Configure7 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('Hello!')
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()
========Game_Configure7===========
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)
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.rayCollision = self.actor.attachNewNode(rayNode)
#self.rayCollision .show()
self.rayQueue = CollisionHandlerQueue()
base.cTrav.addCollider(self.rayCollision , 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.setPos(-30,0,40)
self.laser_weapon.setLightOff()
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()
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.attackWaitTimer = 0.3
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
elif distanceToplayer < self.detectiondistance and distanceToplayer > 30:
self.heading = self.standard.signedAngleDeg(position_vevtor2D)
self.walking = True
self.velocity += position_vevtor * self.acceleration * dt
elif self.attackWaitTimer > 0 and distanceToplayer <= 30:
self.heading = self.standard.signedAngleDeg(position_vevtor2D)
self.walking = False
self.velocity = Vec3(0, 0, 0)
self.attackWaitTimer -= dt
self.actor.setControlEffect('walk', 0)
self.actor.setControlEffect('attack', 1)
attackControl = self.actor.getAnimControl("attack")
if self.attackWaitTimer <= 0 :
self.attackWaitTimer = random.uniform(0.5, 0.7)
self.actor.play("attack")
self.a -= 1
print(self.a)
if self.walking:
self.actor.enableBlend()
self.actor.setControlEffect('walk', 0.7)
self.actor.setControlEffect('attack', 0.3)
walkingControl = self.actor.getAnimControl("walk")
if not walkingControl.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.loop("motion")[quote="1111, post:1, topic:25333, full:true"]
=======game======
from Game_Configure7 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('Hello!')
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()
========Game_Configure7===========
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)
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.rayCollision = self.actor.attachNewNode(rayNode)
#self.rayCollision .show()
self.rayQueue = CollisionHandlerQueue()
base.cTrav.addCollider(self.rayCollision , 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.setPos(-30,0,40)**
** self.laser_weapon.setLightOff()**
** 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()
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.attackWaitTimer = 0.3
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
elif distanceToplayer < self.detectiondistance and distanceToplayer > 30:
self.heading = self.standard.signedAngleDeg(position_vevtor2D)
self.walking = True
self.velocity += position_vevtor * self.acceleration * dt
elif self.attackWaitTimer > 0 and distanceToplayer <= 30:
self.heading = self.standard.signedAngleDeg(position_vevtor2D)
self.walking = False
self.velocity = Vec3(0, 0, 0)
self.attackWaitTimer -= dt
self.actor.setControlEffect('walk', 0)
self.actor.setControlEffect('attack', 1)
attackControl = self.actor.getAnimControl("attack")
if self.attackWaitTimer <= 0 :
self.attackWaitTimer = random.uniform(0.5, 0.7)
self.actor.play("attack")
self.a -= 1
print(self.a)
if self.walking:
self.actor.enableBlend()
self.actor.setControlEffect('walk', 0.7)
self.actor.setControlEffect('attack', 0.3)
walkingControl = self.actor.getAnimControl("walk")
if not walkingControl.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.loop("motion")