def __init__(self, width, height, caption): pygame.init() # Размеры окна и заголовок self.width = width self.height = height self.size = (self.width, self.height) self.caption = caption pygame.display.set_caption(self.caption) # Экран с заданным размеров self.screen = pygame.display.set_mode(self.size) # Полноэкранный режим # self.screen = pygame.display.set_mode(self.size, pygame.FULLSCREEN) # Инициализация настроек self.config = Config() # Инициализация набора цветов self.colors = Colors() # Инициализация счетчика шагов self.step = 0 # Инициализация списков объектов (Точки и трав) self.dotsList = [] # Инициализация первой точки и добавление в список Точек self.firstDot = Dot() self.dotsList.append(self.firstDot) # Список координат трав self.grass = Grass() self.grassesCoords = self.grass.addGrass(self.width, self.height, self.grass.startQuantity) self.font = pygame.font.SysFont(None, 16) self.screen_rect = self.screen.get_rect() pygame.mouse.set_visible(False)
def __init__(self, width, height, caption): pygame.init() # Размеры окна и заголовок self.width = width self.height = height self.size = (self.width, self.height) self.caption = caption pygame.display.set_caption(self.caption) # Экран с заданным размеров self.screen = pygame.display.set_mode(self.size) # Полноэкранный режим # self.screen = pygame.display.set_mode(self.size, pygame.FULLSCREEN) # Инициализация настроек self.config = Config() # Инициализация набора цветов self.colors = Colors() # Инициализация счетчика шагов self.step = 0 # Инициализация списков объектов (Точки и трав) self.dotsList = [] # Инициализация первой точки и добавление в список Точек self.firstDot = Dot() self.dotsList.append(self.firstDot) # Список координат трав self.grass = Grass() self.grassesCoords = self.grass.addGrass(self.width, self.height, self.grass.startQuantity) # Поверхность для создания графика статистики self.statsurf = pygame.Surface((240, 240)) self.font_legend = pygame.font.SysFont("Roboto", 24) self.screen_rect = self.statsurf.get_rect() # Поверхность для создания симуляции self.simsurf = pygame.Surface((1040, 720)) self.font_tooltip = pygame.font.SysFont("Roboto", 12) pygame.mouse.set_visible(False) self.filename = "stat.csv" self.frame = 0 self.data = [["Time", "Population", "Resources", "Slows", "Middles", "Fasts"]] # Группы по скорости self.slowDots = [] self.middleDots = [] self.fastDots = [] self.time = [] self.population = [] self.resources = [] self.slows = [] self.middles = [] self.fasts = []
def show_score(self): self.screen.blit(self.score_grass, self.grass_score_rect) self.screen.blit(self.score_heart, self.heart_score_rect) # 绘制右上角的草的图案 grass = Grass(self.screen, 1100, 10) grass.draw_grass() # 绘制右上角的心的图案 heart = Heart(self.screen, 1000, 10) heart.draw_heart()
def create_world(): global boy, grass, balls, crowns, eventback boy = Boy() balls = [Ball() for i in range(10)] crowns = Crown() grass = Grass() eventback = EventBackground()
def enter(): global back_music image = load_image('ui\\title.png') back_music = load_music('Music\\ingame_Bgm.mp3') back_music.set_volume(64) back_music.repeat_play() get_time() global boy, boy1, grass, Inventory, bullet, score bullet = Bullet() boy = Boy() boy1 = Boy() score = game_Score() Inventory = inventory() grass = Grass() boy.Get_maptile(grass.line) boy1.Get_maptile(grass.line) boy.Get_inven(Inventory) boy1.Get_inven(Inventory) game_world.add_object(grass, 0) game_world.add_object(score, 0) game_world.add_object(Inventory, 0) game_world.add_object(boy, 1) game_world.add_object(boy1, 1) global Monster
def enter(): global slime slime = Slime() game_world.add_object(slime, 1) global grass grass = Grass() game_world.add_object(grass, 0) global blocks blocks = [BLOCK() for i in range(100)] for i in range(8): blocks[i].pos(check[i]) game_world.add_objects(blocks, 1) global g_blocks g_blocks = [G_BLOCK() for i in range(100)] for i in range(5): g_blocks[i].pos(check2[i]) game_world.add_objects(g_blocks, 1) global b_blocks b_blocks = [B_BLOCK() for i in range(100)] for i in range(5): b_blocks[i].pos(check3[i]) game_world.add_objects(b_blocks, 1) global background background = Background() game_world.add_object(background, 0)
def enter(): global boy, ghost boy = Boy() ghost = Boy() grass = Grass() game_world.add_object(grass, 0) game_world.add_object(boy, 1)
def enter(): global boy global Die boy = Boy() grass = Grass() game_world.add_object(grass, 0) game_world.add_object(boy, 1)
def __init__(self, caption): """Инициализация основных параметров.""" self.caption = caption self.config = Config() self.color = Colors() # Заголовок экрана pygame.display.set_caption(self.caption) # Экран с заданным размером self.screen = pygame.display.set_mode(self.config.screen_size) # Создается группа Точек/список спрайтов self.dot_list = pygame.sprite.Group() # Создается группа Травинок/список спрайтов self.grass_list = pygame.sprite.Group() # Создается группа всех спрайтов self.all_sprites_list = pygame.sprite.Group() for i in range(10): # Создание Точки self.dot = Dot() # Выбор случайных координат размещения Точки self.dot.rect.x = random.randrange(self.config.screen_width) self.dot.rect.y = random.randrange(self.config.screen_height) # Добавить точки в список точек self.dot_list.add(self.dot) self.all_sprites_list.add(self.dot) for i in range(100): # Создание травинки self.grass = Grass() # Выбор случайных координат размещения травинки self.grass.rect.x = random.randrange(self.config.screen_width) self.grass.rect.y = random.randrange(self.config.screen_height) # Добавить травинку в список травинок self.grass_list.add(self.grass) self.all_sprites_list.add(self.grass)
def enter(): global boy grass = Grass() bird = Bird() game_world.add_object(grass, 0) game_world.add_object(bird, 1)
def create_world(): global boy, grass, balls, big_balls boy = Boy() big_balls = [BigBall() for i in range(10)] balls = [Ball() for i in range(10)] balls = big_balls + balls grass = Grass()
def enter(): global boy, grass, fire boy = Boy() grass = Grass() fire = Ball() game_world.add_object(grass, 0) game_world.add_object(boy, 1) game_world.add_object(fire, 1)
def enter(): global boy boy = Boy() game_world.add_object(boy, 1) global grass grass = Grass() game_world.add_object(grass, 0)
def getZeroField(self): field = np.zeros([self.face, self.face], dtype=object) for row in range(self.face): for col in range(self.face): field[row][col] = Grass(0, 0) return field
def enter(): server.boy = Boy() game_world.add_object(server.boy, 1) server.grass = Grass() game_world.add_object(server.grass, 0) server.balls = [Ball() for i in range(10)] game_world.add_objects(server.balls, 1)
def enter(): #global boy global bird #boy = Boy() bird = Bird() grass = Grass() game_world.add_object(grass, 0) #game_world.add_object(boy, 1) game_world.add_object(bird, 1)
def generate_grass(amount): dx = size[0] / amount grass = [] for x in range(amount): g = Grass(x * dx, 600, 300 + randint(-100, 100), 6) grass.append(g) return grass
def enter(): global boy boy = Boy() game_world.add_object(boy, 1) global grass grass = Grass() game_world.add_object(grass, 0) global bricks bricks = [Brick(300 + 300 * i, 100 + 50 * i) for i in range(5)] game_world.add_objects(bricks, 1)
def executeRule(self, const_grass: Grass, countNeighbours: int): grass = const_grass.copy() if grass.isLife(): if countNeighbours in self.surv: grass.toAlive() else: grass.toDie() else: if countNeighbours in self.appear: grass.toAlive() return grass
def enter(): global boy boy = Boy() game_world.add_object(boy, 1) global grass grass = Grass() game_world.add_object(grass, 0) global balls balls = [Ball() for i in range(10)] + [BigBall() for i in range(10)] # 리스트 컴프리헨션 game_world.add_objects(balls, 1) # 게임월드에 집어넣음 add_objects() 함수가 추가됨 리스트에 있는 객체를 모두 게임월드에 집어넣음
def enter(): global boy boy = Boy() game_world.add_object(boy, 1) global grass grass = Grass() game_world.add_object(grass, 0) global balls balls = [Ball() for i in range(10)] game_world.add_objects(balls, 1)
def create_world(): global player, grass, stage, mobs, mobs2, mobs4, big_mobs, big_mobs2, big_mobs4, background, background2, bullet, bullets, bullet2, bullets2, grass2, score player = Player() grass = Grass() bullet = Bullet() bullets = [Bullet() for i in range(10)] bullet2 = Bullet2() bullets2 = [Bullet2() for i in range(10)] grass = Grass() grass2 = Grass2() background = Background() if (stage == 1): grass2 = Grass2() grass = Grass() background = Background() background2 = False big_mobs = [BigMob() for i in range(410)] big_mobs2 = [BigMob2() for i in range(0)] big_mobs4 = [BigMob4() for i in range(1)] if (stage == 2): grass2 = Grass2() grass = Grass() background = False background2 = Background2() big_mobs = [BigMob() for i in range(0)] big_mobs2 = [BigMob2() for i in range(800)] big_mobs4 = [BigMob4() for i in range(1)] mobs = [Mob() for i in range(0)] mobs = big_mobs + mobs mobs2 = [Mob2() for i in range(0)] mobs2 = big_mobs2 + mobs2 mobs4 = [Mob4() for i in range(0)] mobs4 = big_mobs4 + mobs4
def enter(): global boy boy = Boy() game_world.add_object(boy, 1) global grass grass = Grass() game_world.add_object(grass, 0) global balls balls = [Ball() for i in range(10)] + [BigBall() for i in range(20)] game_world.add_objects(balls, 1) brick.image = load_image('brick180x40.png')
def enter(): global boy boy = Boy() game_world.add_object(boy, 1) global grass grass = Grass() game_world.add_object(grass, 0) # fill here for balls global balls #balls = [Ball() for i in range(10)] balls = [Ball() for i in range(10)] + [BigBall() for i in range(10)] game_world.add_objects(balls, 1)
def enter(): global boy boy = Boy() game_world.add_object(boy, 1) global grass grass = Grass() game_world.add_object(grass, 0) global balls balls = [Ball() for i in range(10)] + [BigBall() for i in range(10)] global brick brick = Brick() game_world.add_object(brick, 1) for i in range(20): game_world.add_object(balls[i], 1)
def init_game(): for y, row in enumerate(settings.field): for x, column in enumerate(row): if column == 1: settings.grass.append( Grass(settings.main_surf, settings.field_size, settings.cells_size, (x, y))) elif column == 2: settings.armor.append( Armor(settings.main_surf, settings.field_size, settings.cells_size, (x, y))) elif type(column) is list: for add_nums in column: if add_nums[0] == 0: if add_nums[1] % 2 == 0: ind = 0 else: ind = 3 else: if add_nums[1] % 2 == 0: ind = 2 else: ind = 1 settings.bricks.append( Brick(settings.main_surf, settings.field_size, settings.cells_size, (50 + settings.cells_size * x + add_nums[0] * settings.cells_size // 2, 50 + settings.cells_size * y + add_nums[1] * settings.cells_size // 4), ind)) elif column == 4: settings.fin.append( Fin(settings.main_surf, settings.field_size, settings.cells_size, (x, y))) settings.fin_pos.append([x, y]) elif column == 5: settings.spawns.append([x, y]) elif column == 6: settings.bots_spawn.append([x, y]) elif column == 7: settings.water.append( Water(settings.main_surf, settings.field_size, settings.cells_size, (x, y)))
def enter(): global boy boy = Boy() game_world.add_object(boy, 1) global grass grass = Grass() game_world.add_object(grass, 0) #global bird #Birds = [Bird() for i in range(5)] #for bird in Birds: # bird = Bird() # game_world.add_object(bird,2) global balls balls=[Ball() for i in range(10)]+[BigBall() for i in range(10)] game_world.add_objects(balls,1)
def enter(): global by, BGM, metronom, EnterTime, gameOverImage grass = Grass() metronom = Metro() game_world.add_object(grass, 0) game_world.add_object(metronom, 4) mapper() bulletRegister() if BGM is None: BGM = Stage1_Bgm() else: BGM.bgm.repeat_play() EnterTime = get_time() by = boy.Boy() game_world.add_object(by, 2) gameOverImage = GameOverImage() game_world.add_object(gameOverImage, 4)
def enter(): global boy boy = Boy() game_world.add_object(boy, 1) global grass grass = Grass() game_world.add_object(grass, 0) global balls balls = [Ball() for i in range(10)] game_world.add_objects(balls, 1) global background background = Background() game_world.add_object(background, 0) background.set_center_object(boy)
def __init__(self, width=800, height=600, food_size=5, n_agents=1, caption='Mundo das ovelhas', food_energy=10, time_to_growth=400, flat=False, mutation=1, speed=4, energy=20, reproduction_energy=40): self.width = width self.height = height self.food_size = food_size self.n_agents = n_agents self.sheeps = list() self.foods = list() self.world = World(width, height, caption, flat) self.mutation = mutation # Instancia os recursos for x in range(0, self.world.width, food_size): for y in range(0, self.world.height, food_size): self.foods.append( Grass(x, y, food_size, food_energy, time_to_growth)) # Instancia os agentes for i in range(N_AGENTS): self.sheeps.append( Sheep( randint(0, self.world.width), randint(0, self.world.height), #random(width), #random(height), choice(SHEEP_COLORS), speed, energy, reproduction_energy))
def insertGrass(self, world_grid, y, x): grass = Grass(world_grid, y, x) world_grid.insertBotany(y, x, grass) grass.stepper()
def setup(self): self.worldNP = render.attachNewNode('World') # World self.debugNP = self.worldNP.attachNewNode(BulletDebugNode('Debug')) self.debugNP.hide() self.world = BulletWorld() self.world.setGravity(Vec3(0, 0, -9.81)) self.world.setDebugNode(self.debugNP.node()) # Plane #shape = BulletPlaneShape(Vec3(0, 0, 1), 0) #mesh = BulletTriangleMesh() #geomNodes = loader.loadModel('levels/test1/collision').findAllMatches('**/+GeomNode') #geomNode = geomNodes.getPath(0).node() #geom = geomNode.getGeom(0) #mesh.addGeom(geom) #shape = BulletTriangleMeshShape(mesh, dynamic=False, bvh=True ) #np = self.worldNP.attachNewNode(BulletRigidBodyNode('Ground')) #np.node().addShape(shape) #np.setPos(0, 0, 20.0) #np.setCollideMask(BitMask32.allOn()) #self.world.attachRigidBody(np.node()) #sky dome self.sun_sky=Sky() self.sun_sky.setTime(17.0) #terrain self.ground=Terrain(self.world, self.worldNP) self.ground.loadMesh(path+'levels/gandg2/collision') self.ground.setMaps(path+'levels/gandg2/') self.ground.setTextures((39, 1, 2, 15, 4, 5)) #grass self.grass=Grass() self.grass.setMap(path+'levels/gandg2/grass.png') self.grass_to_cut=self.grass.getStatus() # Car self.car=Car(self.world, self.worldNP) self.car.setPos(161.0,160.0,26) #camera self.camera=FlyingCamera() #car to character scale 0.0128 self.char=Character(self.world, self.worldNP) self.char.enterCar() #self.char.setPos(256, 250, 80) #filter manager, post process self.filters=Postprocess() #self.filters.setupFxaa() #no time to make it work, sorry... self.filters.setupFilters() #map objects .. hardcoded because of time self.object_root=render.attachNewNode('object_root') obj=[ (path+'models/pyweek_wall1',0.0,(303.0,405.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(301.0,405.0,25.0980434417725),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(299.0,405.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(297.0,405.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(295.0,405.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(293.0,405.0,25.0980434417725),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(291.0,405.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(289.0,405.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(287.0,405.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(285.0,405.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(283.0,405.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(281.0,405.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(281.0,385.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(283.0,385.0,25.0980453491211),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(285.0,385.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',90.0,(304.0,404.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',90.0,(304.0,402.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',90.0,(304.0,400.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',90.0,(304.0,398.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',90.0,(304.0,396.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',90.0,(304.0,394.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',90.0,(304.0,392.0,25.237850189209),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',90.0,(280.0,404.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',90.0,(280.0,398.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',90.0,(280.0,396.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',90.0,(280.0,394.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',90.0,(280.0,392.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',90.0,(280.0,390.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',90.0,(280.0,388.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',90.0,(280.0,386.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',90.0,(286.0,386.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',90.0,(286.0,388.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',90.0,(286.0,390.0,25.0980434417725),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(287.0,391.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(289.0,391.0,25.1190624237061),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(291.0,391.0,25.1960334777832),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(293.0,391.0,25.1596641540527),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(295.0,391.0,25.2697868347168),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(297.0,391.0,25.3282146453857),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(299.0,391.0,25.3496627807617),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(301.0,391.0,25.2688617706299),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(303.0,391.0,25.2534332275391),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',90.0,(280.0,402.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_box',0.0,(279.600006103516,401.700012207031,25.0980415344238),None), (path+'models/pyweek_box',0.0,(279.399993896484,402.200012207031,25.0980415344238),None), (path+'models/pyweek_box',0.0,(279.600006103516,402.700012207031,25.0980415344238),None), (path+'models/pyweek_box',0.0,(279.399993896484,403.399993896484,25.0980415344238),None), (path+'models/pyweek_box',0.0,(278.799987792969,402.799987792969,25.0980415344238),None), (path+'models/pyweek_box',0.0,(278.799987792969,402.100006103516,25.0980415344238),None), (path+'models/pyweek_box',0.0,(279.0,401.5,25.0980415344238),None), (path+'models/pyweek_box',0.0,(278.5,401.600006103516,25.0980415344238),None), (path+'models/pyweek_box',0.0,(278.799987792969,401.899993896484,25.5980415344238),None), (path+'models/pyweek_box',90.0,(279.5,402.600006103516,25.5980415344238),None), (path+'models/pyweek_box',90.0,(279.0,402.5,25.5980415344238),None), (path+'models/pyweek_box',90.0,(279.399993896484,402.0,25.5980415344238),None), (path+'models/pyweek_box',90.0,(278.100006103516,402.299987792969,25.0980415344238),None), (path+'models/pyweek_box',90.0,(277.799987792969,401.700012207031,25.0980415344238),None), (path+'models/pyweek_box',90.0,(278.200012207031,401.899993896484,25.5980415344238),None), (path+'models/pyweek_box',90.0,(279.399993896484,402.399993896484,26.0980415344238),None), (path+'models/pyweek_box',90.0,(279.0,401.899993896484,26.0980415344238),None), (path+'models/pyweek_box',90.0,(278.799987792969,402.399993896484,26.0980415344238),None) ] for i in obj: loadObject(model=i[0], H=i[1], pos=i[2], world=self.world, worldNP=self.worldNP, root=self.object_root, collision_solid=i[3]) self.object_root.flattenStrong() #models/pyweek_gate,90.0,(280.0,399.0,25.0980415344238)) #gui self.hud=HUD() #volume sfxMgr = base.sfxManagerList[0] sfxMgr.setVolume(cfg['sound-volume']*0.01) musicMgr = base.musicManager musicMgr.setVolume(cfg['music-volume']*0.01) #music self.driving_music=loader.loadMusic(path+'music/driving.ogg') self.driving_music.setLoop(True) self.driving_music.play() self.walking_music=loader.loadMusic(path+'music/walking.ogg') self.walking_music.setLoop(True) print self.char.actor.getScale(render)
class Game(DirectObject): def __init__(self): #the window props wp = WindowProperties.getDefault() wp.setUndecorated(False) wp.setFullscreen(False) wp.setSize(cfg['win-size'][0], cfg['win-size'][1]) wp.setOrigin(-2,-2) wp.setFixedSize(False) wp.setTitle("Grass and Gas - wezu -PyWeek 21") #open the window base.openMainWindow(props = wp) base.setBackgroundColor(0, 0, 0, 1) base.disableMouse() self.mode=DRIVING #make sure the config is ok cfg['hardware-skinning']=ConfigVariableBool('hardware-skinning', True).getValue() cfg['srgb']=ConfigVariableBool('framebuffer-srgb', False).getValue() cfg['win-size']=[ConfigVariableInt('win-size', '640 480').getWord(0), ConfigVariableInt('win-size', '640 480').getWord(1)] cfg['music-volume']=ConfigVariableInt('music-volume', '50').getValue() cfg['sound-volume']=ConfigVariableInt('sound-volume', '100').getValue() cfg['key-forward']=ConfigVariableString('key-forward','w').getValue() cfg['key-back']=ConfigVariableString('key-back','s').getValue() cfg['key-left']=ConfigVariableString('key-left','a').getValue() cfg['key-right']=ConfigVariableString('key-right','d').getValue() cfg['key-jump']=ConfigVariableString('key-jump','space').getValue() cfg['key-cut-grass']=ConfigVariableString('key-cut-grass','shift').getValue() cfg['key-enter-exit-car']=ConfigVariableString('key-enter-exit-car','tab').getValue() cfg['shadow-size']=ConfigVariableInt('shadow-size',1024).getValue() cfg['shadow-area']=ConfigVariableInt('shadow-area',50).getValue() self.accept('escape', self.doExit) self.accept('f1', self.hideHelp) self.accept(cfg['key-jump'], self.doFlip) self.accept( cfg['key-enter-exit-car'], self.changeMode) self.accept(cfg['key-cut-grass'], self.shear) self.accept( 'window-event', self.onWindowEvent) inputState.watchWithModifiers('forward', cfg['key-forward']) inputState.watchWithModifiers('reverse', cfg['key-back']) inputState.watchWithModifiers('turnLeft', cfg['key-left']) inputState.watchWithModifiers('turnRight', cfg['key-right']) # Task taskMgr.add(self.update, 'updateWorld') taskMgr.doMethodLater(5.0, self.countGrass, 'grass_counter') # Physics self.setup() # _____HANDLER_____ def hideHelp(self): if self.hud.help_frame.isHidden(): self.hud.help_frame.show() else: self.hud.help_frame.hide() def doExit(self): self.cleanup() sys.exit(1) def doReset(self): self.cleanup() self.setup() def toggleWireframe(self): base.toggleWireframe() def toggleTexture(self): base.toggleTexture() def toggleDebug(self): if self.debugNP.isHidden(): self.debugNP.show() else: self.debugNP.hide() def doScreenshot(self): base.screenshot('Bullet') def onWindowEvent(self,window=None): if window is not None: # window is none if panda3d is not started self.filters.update() self.hud.updateGuiNodes() def countGrass(self, task): current=self.grass.getStatus() if self.grass_to_cut ==0: self.grass_to_cut=current if current == 0: return v= (float(current)/float(self.grass_to_cut)) #print self.grass_to_cut, current self.hud.counter['text']= str(int(v*100.0))+"%" return task.again def update(self, task): dt = globalClock.getDt() if self.mode==DRIVING: self.car.drive(dt) self.hud.showSpeed(self.car.getKmph()) self.hud.showFuel(self.car.fuel) self.grass.setMowerPos(self.car.blade_node) self.hud.grradar_display['frameTexture']=self.grass.gradar['tex'] node_to_follow=self.car.node speed=0.3 elif self.mode==WALKING: self.char.walk(dt) node_to_follow=self.char.actor_node speed=0.03 self.world.doPhysics(dt, 10, 0.001) if self.mode!=EXITING: self.camera.follow(node_to_follow, dt, speed) self.sun_sky.sun_node.setPos(self.camera.cam_node.getPos(render)) return task.cont def cleanup(self): self.world = None self.worldNP.removeNode() def _setMode(self, mode): self.mode=mode #self.camera.zoomIn() def changeMode(self): if self.mode==DRIVING: if self.car.stopEngine(): self.car.exitCar() self.char.exitCar(self.car.node) #self.char.getOutOfCar(self.car.node) Sequence(Wait(3.6), Func(self._setMode, WALKING)).start() self.mode=EXITING #self.camera.zoomIn() self.hud.hide() self.driving_music.stop() self.walking_music.play() elif self.mode==WALKING: if abs(self.char.node.getDistance(self.car.node))<2.0: #if self.char self.mode=DRIVING #self.camera.zoomOut() self.hud.show() self.char.enterCar() self.car.enterCar() self.driving_music.play() self.walking_music.stop() #self.car.node.node().setMass(self.car.mass) def doFlip(self): if self.mode==DRIVING: self.car.flip() self.grass.getStatus() if self.mode==WALKING: self.char.jump() def shear(self): if self.mode==DRIVING: if self.car.blade_spining: self.car.blade_spining=False self.grass.mower_blade.hide() else: self.car.blade_spining=True self.grass.mower_blade.show() def setup(self): self.worldNP = render.attachNewNode('World') # World self.debugNP = self.worldNP.attachNewNode(BulletDebugNode('Debug')) self.debugNP.hide() self.world = BulletWorld() self.world.setGravity(Vec3(0, 0, -9.81)) self.world.setDebugNode(self.debugNP.node()) # Plane #shape = BulletPlaneShape(Vec3(0, 0, 1), 0) #mesh = BulletTriangleMesh() #geomNodes = loader.loadModel('levels/test1/collision').findAllMatches('**/+GeomNode') #geomNode = geomNodes.getPath(0).node() #geom = geomNode.getGeom(0) #mesh.addGeom(geom) #shape = BulletTriangleMeshShape(mesh, dynamic=False, bvh=True ) #np = self.worldNP.attachNewNode(BulletRigidBodyNode('Ground')) #np.node().addShape(shape) #np.setPos(0, 0, 20.0) #np.setCollideMask(BitMask32.allOn()) #self.world.attachRigidBody(np.node()) #sky dome self.sun_sky=Sky() self.sun_sky.setTime(17.0) #terrain self.ground=Terrain(self.world, self.worldNP) self.ground.loadMesh(path+'levels/gandg2/collision') self.ground.setMaps(path+'levels/gandg2/') self.ground.setTextures((39, 1, 2, 15, 4, 5)) #grass self.grass=Grass() self.grass.setMap(path+'levels/gandg2/grass.png') self.grass_to_cut=self.grass.getStatus() # Car self.car=Car(self.world, self.worldNP) self.car.setPos(161.0,160.0,26) #camera self.camera=FlyingCamera() #car to character scale 0.0128 self.char=Character(self.world, self.worldNP) self.char.enterCar() #self.char.setPos(256, 250, 80) #filter manager, post process self.filters=Postprocess() #self.filters.setupFxaa() #no time to make it work, sorry... self.filters.setupFilters() #map objects .. hardcoded because of time self.object_root=render.attachNewNode('object_root') obj=[ (path+'models/pyweek_wall1',0.0,(303.0,405.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(301.0,405.0,25.0980434417725),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(299.0,405.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(297.0,405.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(295.0,405.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(293.0,405.0,25.0980434417725),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(291.0,405.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(289.0,405.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(287.0,405.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(285.0,405.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(283.0,405.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(281.0,405.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(281.0,385.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(283.0,385.0,25.0980453491211),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(285.0,385.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',90.0,(304.0,404.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',90.0,(304.0,402.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',90.0,(304.0,400.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',90.0,(304.0,398.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',90.0,(304.0,396.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',90.0,(304.0,394.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',90.0,(304.0,392.0,25.237850189209),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',90.0,(280.0,404.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',90.0,(280.0,398.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',90.0,(280.0,396.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',90.0,(280.0,394.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',90.0,(280.0,392.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',90.0,(280.0,390.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',90.0,(280.0,388.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',90.0,(280.0,386.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',90.0,(286.0,386.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',90.0,(286.0,388.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',90.0,(286.0,390.0,25.0980434417725),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(287.0,391.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(289.0,391.0,25.1190624237061),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(291.0,391.0,25.1960334777832),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(293.0,391.0,25.1596641540527),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(295.0,391.0,25.2697868347168),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(297.0,391.0,25.3282146453857),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(299.0,391.0,25.3496627807617),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(301.0,391.0,25.2688617706299),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',0.0,(303.0,391.0,25.2534332275391),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_wall1',90.0,(280.0,402.0,25.0980415344238),path+'models/pyweek_wall1_collision'), (path+'models/pyweek_box',0.0,(279.600006103516,401.700012207031,25.0980415344238),None), (path+'models/pyweek_box',0.0,(279.399993896484,402.200012207031,25.0980415344238),None), (path+'models/pyweek_box',0.0,(279.600006103516,402.700012207031,25.0980415344238),None), (path+'models/pyweek_box',0.0,(279.399993896484,403.399993896484,25.0980415344238),None), (path+'models/pyweek_box',0.0,(278.799987792969,402.799987792969,25.0980415344238),None), (path+'models/pyweek_box',0.0,(278.799987792969,402.100006103516,25.0980415344238),None), (path+'models/pyweek_box',0.0,(279.0,401.5,25.0980415344238),None), (path+'models/pyweek_box',0.0,(278.5,401.600006103516,25.0980415344238),None), (path+'models/pyweek_box',0.0,(278.799987792969,401.899993896484,25.5980415344238),None), (path+'models/pyweek_box',90.0,(279.5,402.600006103516,25.5980415344238),None), (path+'models/pyweek_box',90.0,(279.0,402.5,25.5980415344238),None), (path+'models/pyweek_box',90.0,(279.399993896484,402.0,25.5980415344238),None), (path+'models/pyweek_box',90.0,(278.100006103516,402.299987792969,25.0980415344238),None), (path+'models/pyweek_box',90.0,(277.799987792969,401.700012207031,25.0980415344238),None), (path+'models/pyweek_box',90.0,(278.200012207031,401.899993896484,25.5980415344238),None), (path+'models/pyweek_box',90.0,(279.399993896484,402.399993896484,26.0980415344238),None), (path+'models/pyweek_box',90.0,(279.0,401.899993896484,26.0980415344238),None), (path+'models/pyweek_box',90.0,(278.799987792969,402.399993896484,26.0980415344238),None) ] for i in obj: loadObject(model=i[0], H=i[1], pos=i[2], world=self.world, worldNP=self.worldNP, root=self.object_root, collision_solid=i[3]) self.object_root.flattenStrong() #models/pyweek_gate,90.0,(280.0,399.0,25.0980415344238)) #gui self.hud=HUD() #volume sfxMgr = base.sfxManagerList[0] sfxMgr.setVolume(cfg['sound-volume']*0.01) musicMgr = base.musicManager musicMgr.setVolume(cfg['music-volume']*0.01) #music self.driving_music=loader.loadMusic(path+'music/driving.ogg') self.driving_music.setLoop(True) self.driving_music.play() self.walking_music=loader.loadMusic(path+'music/walking.ogg') self.walking_music.setLoop(True) print self.char.actor.getScale(render)