def countDown(self, number, task): if number == 5: print 5 self.count_down = loadObject('5.png') self.count_down.setPos(0,0.1,0) self.count_down.setScale(configs.SCALE*0.1) self.count_down.setAlphaScale(1) taskMgr.doMethodLater(1, countDown, 'draw lines', extraArgs=[self, 4], appendTask=True) if number == 4: self.count_down.removeNode() print 4 self.count_down = loadObject('4.png') self.count_down.setPos(0,0.1,0) self.count_down.setScale(configs.SCALE*0.1) self.count_down.setAlphaScale(1) taskMgr.doMethodLater(1, countDown, 'draw lines', extraArgs=[self, 3], appendTask=True) if number == 3: self.count_down.removeNode() self.count_down = loadObject('3.png') self.count_down.setPos(0,0.1,0) self.count_down.setScale(configs.SCALE*0.1) self.count_down.setAlphaScale(1) print 3 taskMgr.doMethodLater(1, countDown, 'draw lines', extraArgs=[self, 2], appendTask=True) if number == 2: self.count_down.removeNode() self.count_down = loadObject('2.png') self.count_down.setPos(0,0.1,0) self.count_down.setScale(configs.SCALE*0.1) self.count_down.setAlphaScale(1) print 2 taskMgr.doMethodLater(1, countDown, 'draw lines', extraArgs=[self, 1], appendTask=True) if number == 1: self.count_down.removeNode() self.count_down = loadObject('1.png') self.count_down.setPos(0,0.1,0) self.count_down.setScale(configs.SCALE*0.1) self.count_down.setAlphaScale(1) print 1 for entity_id, entity in configs.ENTITIES.items(): if entity['CATEGORY'] == 'player': entity['PLAYER_ID'].detachNode() entity['CIRCLE_NODE'].detachNode() taskMgr.doMethodLater(1, countDown, 'draw lines', extraArgs=[self, 0], appendTask=True) if number == 0: print 0 self.count_down.removeNode() for entity_id, entity in configs.ENTITIES.items(): if entity['CATEGORY'] == 'player': configs.GAME_ONGOING = 1 new_line, line_vertex, line_node = start_new_line(self, entity['NODE'].getX(), entity['NODE'].getZ(), entity['COLOR']) line_id = configs.ENTITY_ID configs.ENTITIES[configs.ENTITY_ID] = {'CATEGORY':'line', 'GEOM':new_line, 'VERTEX':line_vertex, 'NODE': line_node} configs.ENTITY_ID += 1 entity["CURRENT_LINE"] = line_id draw_line(entity_id, start=True) configs.NEXT_BONUS_TIME = globalClock.getFrameTime() + random.randint(3, 10) self.spawn_bonus = taskMgr.add(spawn_bonus, 'bonusSpawner', extraArgs=[self], appendTask=True) return task.done
def init_player(self, left_btn, right_btn, player_number ,pos=(0,0,0), heading=0): color = (configs.COLORS_MAP[player_number][0]) nodePath = loadObject() nodePath.setPos(pos) nodePath.setScale(configs.SCALE*0.004) nodePath.setColor(color) p = ParticleEffect() p.loadConfig('textures/flare.ptf') p.start(parent = nodePath, renderParent = render) p0 = p.getParticlesList()[0] p0.emitter.setRadiateOrigin(Point3(0.05*cos(heading* pi/180), 0.0, 0.05*sin(heading* pi/180))) p.setPos(0,-1,0) # p.setBin("unsorted", 0) # p.setDepthTest(False) p.setTwoSided(True) text= TextNode('text') text.setText(str("%s" % player_number)) text.setTextColor(color) text.setAlign(TextNode.ACenter) # text.font = self.font text3d = NodePath(text) text3d.setTwoSided(True) text3d.setPos(nodePath, -1,-3,-4) text3d.reparentTo(render) circle = loadObject(tex='circle.png') circle.reparentTo(render) circle.setPos(nodePath, 0,-2,0) text3d.setScale(0.13) circle.setScale(0.09) text3d.setColorScale(color) circle.setColorScale(color) new_line, line_vertex, line_node = start_new_line(self, pos[0], pos[2], color) line_id = configs.ENTITY_ID configs.ENTITIES[configs.ENTITY_ID] = {'CATEGORY':'line', 'GEOM':new_line, 'VERTEX':line_vertex, "NODE": line_node} configs.ENTITY_ID += 1 speed = configs.FORWARD_SPEED right_angle = configs.FORCE_RIGHT_ANGLE_TURN # print left_btn # print right_btn self.accept(("%s" % left_btn), player_controls, [configs.ENTITY_ID, 'TURN_LEFT', 1]) self.accept(("%s-up" % left_btn), player_controls, [configs.ENTITY_ID, 'TURN_LEFT', 0]) self.accept(("%s" % right_btn), player_controls, [configs.ENTITY_ID, 'TURN_RIGHT', 1]) self.accept(("%s-up" % right_btn), player_controls, [configs.ENTITY_ID, 'TURN_RIGHT', 0]) configs.ENTITIES[configs.ENTITY_ID] = {'CATEGORY':'player','ALIVE':True, 'NODE':nodePath,'PARTICLE_PARENT':p, 'PARTICLE':p0, 'HEADING':heading, 'CURRENT_LINE':line_id, 'TICKNESS':configs.SCALE, 'TURN_LEFT':0, 'TURN_RIGHT':0, 'COLOR':color, 'PLAYER_ID':text3d, 'CIRCLE_NODE':circle, 'LEFT_ARMED':True, 'RIGHT_ARMED':True, 'PLAYER_NUMBER': player_number, 'SPEED':speed, 'RIGHT_ANGLE_TURN':right_angle } configs.ENTITY_ID += 1
def init_ship(self, ship_model_path, player2=False): if player2 == True: pos = LPoint2(12, -8) category_bits = 0x0003 mask_bits = (0x0001 | 0x0002) else: pos = LPoint2(-12, 8) category_bits = 0x0002 mask_bits = (0x0001 | 0x0003) new_ship = loadObject(ship_model_path, scale=0.5) physic_debug, physic_body = new_physic_object(shape='box', scale=0.5, angular_dampning=5, linear_dampning=0.1, pos=pos, category_bits=category_bits, mask_bits=mask_bits) new_ship.reparentTo(render) new_ship.setTexRotate(TextureStage.getDefault(), 90) new_weapon = weapon() if player2 == True: shipname = "ship2" self.life_bar2 = loadObject(scale=0.5) self.life_bar2.setPos(-0.1, 0, 0.12) self.life_bar2.reparentTo(base.a2dBottomRight) self.life_bar2.setSz(0.005) self.energy_bar2 = loadObject(scale=0.5) self.energy_bar2.setPos(-0.1, 0, 0.215) self.energy_bar2.reparentTo(base.a2dBottomRight) self.energy_bar2.setSz(0.005) else: shipname = "ship" self.life_bar = loadObject(scale=0.5) self.life_bar.setPos(-0.1, 0, 0.12) self.life_bar.reparentTo(base.a2dBottomLeft) self.life_bar.setSz(0.005) self.energy_bar = loadObject(scale=0.5) self.energy_bar.setPos(-1, 0, 0.215) self.energy_bar.reparentTo(base.a2dBottomLeft) self.energy_bar.setSz(0.005) defines.ENTITIES[defines.ENTITY_ID] = { 'CATEGORY': shipname, 'E_FIELD_ENABLED': False, 'NODE': new_ship, 'PHYSIC_NODE': physic_debug, 'BODY': physic_body, 'SHIELD': 100.0, 'ENERGY': 100.0, 'WEAPON': new_weapon } defines.ENTITY_ID += 1
def add_shield(self, entity_id): pos = defines.ENTITIES[entity_id]['BODY'].position if defines.ENTITIES[entity_id]['CATEGORY'] == 'ship': category_bits = 0x0002 mask_bits = (0x0001 | 0x0003) else: category_bits = 0x0003 mask_bits = (0x0001 | 0x0002) physic_debug, physic_body = new_physic_object(shape='circle', scale=1, angular_dampning=0, linear_dampning=0, pos=pos, category_bits=category_bits, mask_bits=mask_bits, den=0.0) # help(defines.world) defines.world.CreateRevoluteJoint( bodyA=defines.ENTITIES[entity_id]['BODY'], bodyB=physic_body) new_shield = loadObject('shield.png', scale=1) new_shield.setPos(physic_body.position.x, 55, physic_body.position.y) physic_body.linearVelocity.Set( defines.ENTITIES[entity_id]['BODY'].linearVelocity.x, defines.ENTITIES[entity_id]['BODY'].linearVelocity.y) physic_body.angularVelocity = defines.ENTITIES[entity_id][ 'BODY'].angularVelocity defines.ENTITIES[entity_id]['E_FIELD_BODY'] = physic_body defines.ENTITIES[entity_id]['E_FIELD_DEBUG_NODE'] = physic_debug defines.ENTITIES[entity_id]['E_FIELD_NODE'] = new_shield
def break_asteroid(self, entity_id): number = randint(2, 3) i = 0 while i < number: asteroid = loadObject("asteroid%d.png" % (randint(1, 3)), scale=defines.AST_INIT_SCALE / number, pos=LPoint3(23, 23)) physic_debug, physic_body = new_physic_object( shape='circle', scale=defines.AST_INIT_SCALE / number, pos=defines.ENTITIES[entity_id]['BODY'].position) physic_body.linearVelocity.Set( defines.ENTITIES[entity_id]['BODY'].linearVelocity.x, defines.ENTITIES[entity_id]['BODY'].linearVelocity.y) physic_body.angularVelocity = defines.ENTITIES[entity_id][ 'BODY'].angularVelocity f = physic_body.GetWorldVector(localVector=(randint(-5, 5), randint(-5, 5))) p = physic_body.GetWorldPoint(localPoint=(0.0, 0)) physic_body.ApplyLinearImpulse(f, p, True) defines.ENTITIES[defines.ENTITY_ID] = { 'CATEGORY': "asteroid", 'NODE': asteroid, 'PHYSIC_NODE': physic_debug, 'BODY': physic_body, 'SHIELD': 20, 'ENERGY': 0 } defines.ENTITY_ID += 1 i += 1
def spawn_bonus(self, task): time = globalClock.getFrameTime() if configs.NEXT_BONUS_TIME <= time: if configs.GAME_WON == True: return task.done if configs.FORCE_RIGHT_ANGLE_TURN == True: which_bonus = random.randint(1, 7) else: which_bonus = random.randint(0, 7) position = Vec3(random.uniform(-1.8, 1.8), random.uniform(-1, 1), 0) bonus = loadObject("bonus_%s.png" % which_bonus, scale=0.05, pos=position) bonus.setY(-0.01) me = random.randint(0,1) if me == 1: bonus.setColor(0,0,1,1) else: bonus.setColor(1,0,0,1) if which_bonus == 1 or which_bonus == 2 or which_bonus == 5: bonus.setColor(0,1,0,1) configs.ENTITIES[configs.ENTITY_ID] = {'CATEGORY':'bonus', 'NODE':bonus, "BONUS_ID":which_bonus, 'ME':me} configs.ENTITY_ID += 1 delay = random.randint(3, 10) configs.NEXT_BONUS_TIME = time + delay return task.cont
def spawn_bonus(self, task): time = globalClock.getFrameTime() if configs.NEXT_BONUS_TIME <= time: if configs.GAME_WON == True: return task.done if configs.FORCE_RIGHT_ANGLE_TURN == True: which_bonus = random.randint(1, 7) else: which_bonus = random.randint(0, 7) position = Vec3(random.uniform(-1.8, 1.8), random.uniform(-1, 1), 0) bonus = loadObject("bonus_%s.png" % which_bonus, scale=0.05, pos=position) bonus.setY(-0.01) me = random.randint(0, 1) if me == 1: bonus.setColor(0, 0, 1, 1) else: bonus.setColor(1, 0, 0, 1) if which_bonus == 1 or which_bonus == 2 or which_bonus == 5: bonus.setColor(0, 1, 0, 1) configs.ENTITIES[configs.ENTITY_ID] = { 'CATEGORY': 'bonus', 'NODE': bonus, "BONUS_ID": which_bonus, 'ME': me } configs.ENTITY_ID += 1 delay = random.randint(3, 10) configs.NEXT_BONUS_TIME = time + delay return task.cont
def init_planet_logo(self, pos=LPoint3(0, 0)): planet = loadObject("planet0.png", scale=2, pos=LPoint3(0, 0)) task = taskMgr.doMethodLater(0.5, animate_planet, 'animate planet', extraArgs=[planet, 0, defines.ENTITY_ID], appendTask=True) planet.reparentTo(render) planet.setPos(pos[0], 55, pos[1]) defines.ENTITIES[defines.ENTITY_ID] = {'CATEGORY':'menu_planet','NODE':planet,'BUTTON': None, 'TASK': task} defines.ENTITY_ID += 1
def init_planet(self, pos=(0,0)): planet = loadObject("planet0.png", scale=2, pos=LPoint3(0, 0)) physic_debug, physic_body = new_physic_object( shape='circle', scale=2, pos=pos, den=400.0) task = taskMgr.doMethodLater(0.5, animate_planet, 'animate planet', extraArgs=[planet, 0, defines.ENTITY_ID], appendTask=True) defines.ENTITIES[defines.ENTITY_ID] = {'CATEGORY':"planet", 'NODE':planet, 'PHYSIC_NODE':physic_debug,'BODY':physic_body, 'SHIELD':999999, 'ENERGY':0, 'TASK': task} defines.ENTITY_ID += 1
def init_ship(self, ship_model_path, player2=False): if player2 == True: pos = LPoint2(12,-8) category_bits = 0x0003 mask_bits = (0x0001 | 0x0002) else: pos = LPoint2(-12,8) category_bits = 0x0002 mask_bits = (0x0001 | 0x0003) new_ship = loadObject(ship_model_path, scale=0.5) physic_debug, physic_body = new_physic_object(shape='box', scale=0.5, angular_dampning=5, linear_dampning=0.1, pos=pos, category_bits=category_bits, mask_bits=mask_bits) new_ship.reparentTo(render) new_ship.setTexRotate(TextureStage.getDefault(), 90) new_weapon = weapon(); if player2 == True: shipname = "ship2" self.life_bar2 = loadObject(scale=0.5) self.life_bar2.setPos(-0.1,0, 0.12) self.life_bar2.reparentTo(base.a2dBottomRight) self.life_bar2.setSz(0.005) self.energy_bar2 = loadObject(scale=0.5) self.energy_bar2.setPos(-0.1,0, 0.215) self.energy_bar2.reparentTo(base.a2dBottomRight) self.energy_bar2.setSz(0.005) else: shipname = "ship" self.life_bar = loadObject(scale=0.5) self.life_bar.setPos(-0.1,0,0.12) self.life_bar.reparentTo(base.a2dBottomLeft) self.life_bar.setSz(0.005) self.energy_bar = loadObject(scale=0.5) self.energy_bar.setPos(-1,0,0.215) self.energy_bar.reparentTo(base.a2dBottomLeft) self.energy_bar.setSz(0.005) defines.ENTITIES[defines.ENTITY_ID] = {'CATEGORY':shipname,'E_FIELD_ENABLED': False, 'NODE':new_ship, 'PHYSIC_NODE':physic_debug, 'BODY':physic_body, 'SHIELD':100.0, 'ENERGY':100.0, 'WEAPON':new_weapon} defines.ENTITY_ID += 1
def spawnAsteroids(self, quantity): for i in range(quantity): asteroid = loadObject("asteroid%d.png" % (randint(1, 3)), scale=defines.AST_INIT_SCALE, pos=LPoint3(23, 23)) physic_debug, physic_body = new_physic_object( shape='circle', scale=defines.AST_INIT_SCALE, pos=(randint(-20, 20), randint(-15, 15))) f = physic_body.GetWorldVector(localVector=( randint(-40,40), randint(-40,40) )) p = physic_body.GetWorldPoint(localPoint=(0.0, 0)) physic_body.ApplyLinearImpulse(f, p, True) defines.ENTITIES[defines.ENTITY_ID] = {'CATEGORY':"asteroid", 'NODE':asteroid, 'PHYSIC_NODE':physic_debug,'BODY':physic_body, 'SHIELD':100, 'ENERGY':0} defines.ENTITY_ID += 1
def init_planet_logo(self, pos=LPoint3(0, 0)): planet = loadObject("planet0.png", scale=2, pos=LPoint3(0, 0)) task = taskMgr.doMethodLater(0.5, animate_planet, 'animate planet', extraArgs=[planet, 0, defines.ENTITY_ID], appendTask=True) planet.reparentTo(render) planet.setPos(pos[0], 55, pos[1]) defines.ENTITIES[defines.ENTITY_ID] = { 'CATEGORY': 'menu_planet', 'NODE': planet, 'BUTTON': None, 'TASK': task } defines.ENTITY_ID += 1
def fire(self, panda3dworld, entity_id): now = globalClock.getRealTime() if now - self.last_time_fired < self.reload_time: if defines.ENTITIES[entity_id]['CATEGORY'] == 'ship': panda3dworld.keys["fire"] = 0 elif defines.ENTITIES[entity_id]['CATEGORY'] == 'ship2': panda3dworld.keys["p2fire"] = 0 else: self.last_time_fired = now new_bullet = loadObject("bullet.png", scale=0.2) pos = defines.ENTITIES[entity_id]["BODY"].position angle = 360 - defines.ENTITIES[entity_id]["NODE"].getR() pos_x = pos.x + 0.5 * cos(angle* pi/180) pos_y = pos.y + 0.5 * sin(angle* pi/180) if defines.ENTITIES[entity_id]['CATEGORY'] == 'ship': category_bits = 0x0002 mask_bits = (0x0001 | 0x0003) elif defines.ENTITIES[entity_id]['CATEGORY'] == 'ship2': category_bits = 0x0003 mask_bits = (0x0001 | 0x0002) physic_debug, physic_body = new_physic_object(shape='box', scale=0.2, is_a_bullet=True, pos=(pos_x,pos_y), category_bits=category_bits, mask_bits=mask_bits, den=self.bullet_density) # physic_debug.reparentTo(new_bullet) new_bullet.setPos(physic_body.position.x, 55, physic_body.position.y) physic_body.linearVelocity.Set(defines.ENTITIES[entity_id]['BODY'].linearVelocity.x, defines.ENTITIES[entity_id]['BODY'].linearVelocity.y) physic_body.angularVelocity = defines.ENTITIES[entity_id]['BODY'].angularVelocity f = physic_body.GetWorldVector(localVector=( self.bullet_speed * cos(angle* pi/180), self.bullet_speed * sin(angle* pi/180))) p = physic_body.GetWorldPoint(localPoint=(0.0, 0)) physic_body.ApplyLinearImpulse(f, p, True) sound = base.loader.loadSfx("sounds/fire.ogg") sound.setVolume(0.5) sound.play() defines.ENTITIES[defines.ENTITY_ID] = {'CATEGORY':"bullet", 'EXPIRE': now + 3, 'NODE':new_bullet, 'PHYSIC_NODE':physic_debug ,'BODY':physic_body, 'SHIELD':0, 'ENERGY':0} defines.ENTITY_ID += 1 defines.ENTITIES[entity_id]['ENERGY'] -= 20 if defines.ENTITIES[entity_id]['CATEGORY'] == 'ship': panda3dworld.keys["fire"] = 0 elif defines.ENTITIES[entity_id]['CATEGORY'] == 'ship2': panda3dworld.keys["p2fire"] = 0
def init_planet(self, pos=(0, 0)): planet = loadObject("planet0.png", scale=2, pos=LPoint3(0, 0)) physic_debug, physic_body = new_physic_object(shape='circle', scale=2, pos=pos, den=400.0) task = taskMgr.doMethodLater(0.5, animate_planet, 'animate planet', extraArgs=[planet, 0, defines.ENTITY_ID], appendTask=True) defines.ENTITIES[defines.ENTITY_ID] = { 'CATEGORY': "planet", 'NODE': planet, 'PHYSIC_NODE': physic_debug, 'BODY': physic_body, 'SHIELD': 999999, 'ENERGY': 0, 'TASK': task } defines.ENTITY_ID += 1
def break_asteroid(self, entity_id): number = randint(2, 3) i = 0 while i < number: asteroid = loadObject("asteroid%d.png" % (randint(1, 3)), scale=defines.AST_INIT_SCALE/number, pos=LPoint3(23, 23)) physic_debug, physic_body = new_physic_object( shape='circle', scale=defines.AST_INIT_SCALE/number, pos=defines.ENTITIES[entity_id]['BODY'].position) physic_body.linearVelocity.Set(defines.ENTITIES[entity_id]['BODY'].linearVelocity.x, defines.ENTITIES[entity_id]['BODY'].linearVelocity.y) physic_body.angularVelocity = defines.ENTITIES[entity_id]['BODY'].angularVelocity f = physic_body.GetWorldVector(localVector=( randint(-5,5), randint(-5,5) )) p = physic_body.GetWorldPoint(localPoint=(0.0, 0)) physic_body.ApplyLinearImpulse(f, p, True) defines.ENTITIES[defines.ENTITY_ID] = {'CATEGORY':"asteroid", 'NODE':asteroid, 'PHYSIC_NODE':physic_debug,'BODY':physic_body, 'SHIELD':20, 'ENERGY':0} defines.ENTITY_ID += 1 i += 1
def add_shield(self, entity_id): pos = defines.ENTITIES[entity_id]['BODY'].position if defines.ENTITIES[entity_id]['CATEGORY'] == 'ship': category_bits = 0x0002 mask_bits = (0x0001 | 0x0003) else: category_bits = 0x0003 mask_bits = (0x0001 | 0x0002) physic_debug, physic_body = new_physic_object(shape='circle', scale=1, angular_dampning=0, linear_dampning=0, pos=pos, category_bits=category_bits, mask_bits=mask_bits, den=0.0) # help(defines.world) defines.world.CreateRevoluteJoint( bodyA=defines.ENTITIES[entity_id]['BODY'], bodyB=physic_body ) new_shield = loadObject('shield.png', scale=1) new_shield.setPos(physic_body.position.x, 55, physic_body.position.y) physic_body.linearVelocity.Set(defines.ENTITIES[entity_id]['BODY'].linearVelocity.x, defines.ENTITIES[entity_id]['BODY'].linearVelocity.y) physic_body.angularVelocity = defines.ENTITIES[entity_id]['BODY'].angularVelocity defines.ENTITIES[entity_id]['E_FIELD_BODY'] = physic_body defines.ENTITIES[entity_id]['E_FIELD_DEBUG_NODE'] = physic_debug defines.ENTITIES[entity_id]['E_FIELD_NODE'] = new_shield
def spawnAsteroids(self, quantity): for i in range(quantity): asteroid = loadObject("asteroid%d.png" % (randint(1, 3)), scale=defines.AST_INIT_SCALE, pos=LPoint3(23, 23)) physic_debug, physic_body = new_physic_object( shape='circle', scale=defines.AST_INIT_SCALE, pos=(randint(-20, 20), randint(-15, 15))) f = physic_body.GetWorldVector(localVector=(randint(-40, 40), randint(-40, 40))) p = physic_body.GetWorldPoint(localPoint=(0.0, 0)) physic_body.ApplyLinearImpulse(f, p, True) defines.ENTITIES[defines.ENTITY_ID] = { 'CATEGORY': "asteroid", 'NODE': asteroid, 'PHYSIC_NODE': physic_debug, 'BODY': physic_body, 'SHIELD': 100, 'ENERGY': 0 } defines.ENTITY_ID += 1
def __init__(self): ShowBase.__init__(self) self.enableParticles() # self.setFrameRateMeter(True) wp = WindowProperties() wp.setSize(1280, 720) wp.setFullscreen(False) self.win.requestProperties(wp) self.disableMouse() self.camLens.setNear(0.01) # Load the background starfield. # self.font = loader.loadFont('textures/inconsolata.egg') self.setBackgroundColor((0, 0, 0, 1)) self.cameraPivot = render.attachNewNode("CameraPivot") self.cameraArm = self.cameraPivot.attachNewNode("CameraArm") self.cameraArm.setPos(self.cameraArm, 0,-4.1,0) self.camera.reparentTo(self.cameraArm) # self.camera.lookAt(self.cameraPivot) # self.keys = { "turnLeft": 0, # "turnRight": 0, # } # PStatClient.connect() # Other keys events set the appropriate value in our key dictionary base.buttonThrowers[0].node().setKeystrokeEvent('keystroke') render.setAntialias(AntialiasAttrib.MAuto) configs.PANDA3D = self self.accept('f6', self.changeCamera) self.accept('keystroke', self.getKeys) self.accept('escape', self.set_esc, [1]) self.accept('escape-up', self.set_esc, [0]) configs.COLLISION_MAP = [[[0,0,0] for x in range(825)] for x in range(1385)] # init_menu(self) # self.gameTask = taskMgr.add(self.menuLoop, "gameLoop") self.gameBoard = loadObject() self.gameBoard.setColor(0.3,0.3,0.3,0.5) self.gameBoard.setScale(1) self.gameBoard.setSx(1.8) self.gameBoard.setPos(0,0.02,0) self.border = loader.loadModel("models/border") self.border.reparentTo(render) self.border.setPos(0,0,0) self.border.setPos(0,0,0) self.border.setP(90) self.border.setScale(0.0028) self.border.setSz(0.001) self.border.setSx(0.00282) self.border.setSy(0.00279) self.border.setTransparency(TransparencyAttrib.MAlpha) self.border.setColorScale(0, 1, 0, 1.0) self.hover_circle = loadObject(tex='circle.png') self.hover_circle.hide() init_bonus_tasks(self) # display_shader = Shader.load(Shader.SL_GLSL, vertex="shaders/display_shader.vert", fragment="shaders/display_shader.frag") # self.render.set_shader(display_shader) self.init_menu()
def init_player(self, left_btn, right_btn, player_number, pos=(0, 0, 0), heading=0): color = (configs.COLORS_MAP[player_number][0]) nodePath = loadObject() nodePath.setPos(pos) nodePath.setScale(configs.SCALE * 0.004) nodePath.setColor(color) p = ParticleEffect() p.loadConfig('textures/flare.ptf') p.start(parent=nodePath, renderParent=render) p0 = p.getParticlesList()[0] p0.emitter.setRadiateOrigin( Point3(0.05 * cos(heading * pi / 180), 0.0, 0.05 * sin(heading * pi / 180))) p.setPos(0, -1, 0) # p.setBin("unsorted", 0) # p.setDepthTest(False) p.setTwoSided(True) text = TextNode('text') text.setText(str("%s" % player_number)) text.setTextColor(color) text.setAlign(TextNode.ACenter) # text.font = self.font text3d = NodePath(text) text3d.setTwoSided(True) text3d.setPos(nodePath, -1, -3, -4) text3d.reparentTo(render) circle = loadObject(tex='circle.png') circle.reparentTo(render) circle.setPos(nodePath, 0, -2, 0) text3d.setScale(0.13) circle.setScale(0.09) text3d.setColorScale(color) circle.setColorScale(color) new_line, line_vertex, line_node = start_new_line(self, pos[0], pos[2], color) line_id = configs.ENTITY_ID configs.ENTITIES[configs.ENTITY_ID] = { 'CATEGORY': 'line', 'GEOM': new_line, 'VERTEX': line_vertex, "NODE": line_node } configs.ENTITY_ID += 1 speed = configs.FORWARD_SPEED right_angle = configs.FORCE_RIGHT_ANGLE_TURN # print left_btn # print right_btn self.accept(("%s" % left_btn), player_controls, [configs.ENTITY_ID, 'TURN_LEFT', 1]) self.accept(("%s-up" % left_btn), player_controls, [configs.ENTITY_ID, 'TURN_LEFT', 0]) self.accept(("%s" % right_btn), player_controls, [configs.ENTITY_ID, 'TURN_RIGHT', 1]) self.accept(("%s-up" % right_btn), player_controls, [configs.ENTITY_ID, 'TURN_RIGHT', 0]) configs.ENTITIES[configs.ENTITY_ID] = { 'CATEGORY': 'player', 'ALIVE': True, 'NODE': nodePath, 'PARTICLE_PARENT': p, 'PARTICLE': p0, 'HEADING': heading, 'CURRENT_LINE': line_id, 'TICKNESS': configs.SCALE, 'TURN_LEFT': 0, 'TURN_RIGHT': 0, 'COLOR': color, 'PLAYER_ID': text3d, 'CIRCLE_NODE': circle, 'LEFT_ARMED': True, 'RIGHT_ARMED': True, 'PLAYER_NUMBER': player_number, 'SPEED': speed, 'RIGHT_ANGLE_TURN': right_angle } configs.ENTITY_ID += 1
def __init__(self): ShowBase.__init__(self) # self.setFrameRateMeter(True) wp = WindowProperties() wp.setSize(1280, 720) wp.setFullscreen(False) self.win.requestProperties(wp) self.disableMouse() # Load the background starfield. self.setBackgroundColor((0, 0, 0, 1)) self.font = loader.loadFont('textures/inconsolata.egg') self.bg = loadObject("star_field.png", scale=73, depth=200, transparency=False) self.bg.setTag('back_ground', '1') self.bg.setSx(73*16/9) # Load the ship and set its initial velocity. Create a ship entity self.keys = { "turnLeft": 0, "turnRight": 0, "accel": 0, "fire": 0, "laser": 0, "e_to_s": 0, "s_to_e": 0, "cloak": 0, "p2turnLeft": 0, "p2turnRight": 0, "p2accel": 0, "p2fire": 0, "p2laser": 0, "e_to_s2": 0, "s_to_e2": 0, "cloak2": 0, "toggle_debug": 0, "e_field": 0, "e_field2": 0, "mouse_l": 0, } self.accept("escape", sys.exit) # Escape quits # Other keys events set the appropriate value in our key dictionary self.accept("a", self.setKey, ["turnLeft", 1]) self.accept("a-up", self.setKey, ["turnLeft", 0]) self.accept("d", self.setKey, ["turnRight", 1]) self.accept("d-up", self.setKey, ["turnRight", 0]) self.accept("w", self.setKey, ["accel", 1]) self.accept("w-up", self.setKey, ["accel", 0]) self.accept("f", self.setKey, ["fire", 1]) self.accept("f-up", self.setKey, ["fire", 0]) self.accept("h", self.setKey, ["laser", 1]) self.accept("h-up", self.setKey, ["laser", 0]) self.accept("r", self.setKey, ["e_to_s", 1]) self.accept("r-up", self.setKey, ["e_to_s", 0]) self.accept("t", self.setKey, ["s_to_e", 1]) self.accept("t-up", self.setKey, ["s_to_e", 0]) self.accept("s", self.setKey, ["cloak", 1]) self.accept("s-up", self.setKey, ["cloak", 0]) self.accept("g", self.setKey, ["e_field", 1]) self.accept("g-up", self.setKey, ["e_field", 0]) self.accept("arrow_left", self.setKey, ["p2turnLeft", 1]) self.accept("arrow_left-up", self.setKey, ["p2turnLeft", 0]) self.accept("arrow_right", self.setKey, ["p2turnRight", 1]) self.accept("arrow_right-up", self.setKey, ["p2turnRight", 0]) self.accept("arrow_up", self.setKey, ["p2accel", 1]) self.accept("arrow_up-up", self.setKey, ["p2accel", 0]) # NUMPAD for p2 self.accept("1", self.setKey, ["p2fire", 1]) self.accept("1-up", self.setKey, ["p2fire", 0]) self.accept("3", self.setKey, ["p2laser", 1]) self.accept("3-up", self.setKey, ["p2laser", 0]) self.accept("4", self.setKey, ["e_to_s2", 1]) self.accept("4-up", self.setKey, ["e_to_s2", 0]) self.accept("5", self.setKey, ["s_to_e2", 1]) self.accept("5-up", self.setKey, ["s_to_e2", 0]) self.accept("2", self.setKey, ["e_field2", 1]) self.accept("2-up", self.setKey, ["e_field2", 0]) # NO NUMPAD for p2 self.accept("l", self.setKey, ["p2fire", 1]) self.accept("l-up", self.setKey, ["p2fire", 0]) self.accept("'", self.setKey, ["p2laser", 1]) self.accept("'-up", self.setKey, ["p2laser", 0]) self.accept("o", self.setKey, ["e_to_s2", 1]) self.accept("o-up", self.setKey, ["e_to_s2", 0]) self.accept("p", self.setKey, ["s_to_e2", 1]) self.accept("p-up", self.setKey, ["s_to_e2", 0]) self.accept(";", self.setKey, ["e_field2", 1]) self.accept(";-up", self.setKey, ["e_field2", 0]) self.accept("arrow_down", self.setKey, ["cloak2", 1]) self.accept("arrow_down-up", self.setKey, ["cloak2", 0]) self.accept("f1", self.setKey, ["toggle_debug", 1]) self.accept("mouse1", self.setKey, ["mouse_l", 1]) self.accept("mouse1-up", self.setKey, ["mouse_l", 0]) init_menu(self) self.gameTask = taskMgr.add(self.menuLoop, "gameLoop")
def fire(self, panda3dworld, entity_id): now = globalClock.getRealTime() if now - self.last_time_fired < self.reload_time: if defines.ENTITIES[entity_id]["CATEGORY"] == "ship": panda3dworld.keys["fire"] = 0 elif defines.ENTITIES[entity_id]["CATEGORY"] == "ship2": panda3dworld.keys["p2fire"] = 0 else: self.last_time_fired = now new_bullet = loadObject("bullet.png", scale=0.2) pos = defines.ENTITIES[entity_id]["BODY"].position angle = 360 - defines.ENTITIES[entity_id]["NODE"].getR() pos_x = pos.x + 0.5 * cos(angle * pi / 180) pos_y = pos.y + 0.5 * sin(angle * pi / 180) if defines.ENTITIES[entity_id]["CATEGORY"] == "ship": category_bits = 0x0002 mask_bits = 0x0001 | 0x0003 elif defines.ENTITIES[entity_id]["CATEGORY"] == "ship2": category_bits = 0x0003 mask_bits = 0x0001 | 0x0002 physic_debug, physic_body = new_physic_object( shape="box", scale=0.2, is_a_bullet=True, pos=(pos_x, pos_y), category_bits=category_bits, mask_bits=mask_bits, den=self.bullet_density, ) # physic_debug.reparentTo(new_bullet) new_bullet.setPos(physic_body.position.x, 55, physic_body.position.y) physic_body.linearVelocity.Set( defines.ENTITIES[entity_id]["BODY"].linearVelocity.x, defines.ENTITIES[entity_id]["BODY"].linearVelocity.y, ) physic_body.angularVelocity = defines.ENTITIES[entity_id]["BODY"].angularVelocity f = physic_body.GetWorldVector( localVector=(self.bullet_speed * cos(angle * pi / 180), self.bullet_speed * sin(angle * pi / 180)) ) p = physic_body.GetWorldPoint(localPoint=(0.0, 0)) physic_body.ApplyLinearImpulse(f, p, True) sound = base.loader.loadSfx("sounds/fire.ogg") sound.setVolume(0.5) sound.play() defines.ENTITIES[defines.ENTITY_ID] = { "CATEGORY": "bullet", "EXPIRE": now + 3, "NODE": new_bullet, "PHYSIC_NODE": physic_debug, "BODY": physic_body, "SHIELD": 0, "ENERGY": 0, } defines.ENTITY_ID += 1 defines.ENTITIES[entity_id]["ENERGY"] -= 20 if defines.ENTITIES[entity_id]["CATEGORY"] == "ship": panda3dworld.keys["fire"] = 0 elif defines.ENTITIES[entity_id]["CATEGORY"] == "ship2": panda3dworld.keys["p2fire"] = 0