Пример #1
0
    def update(self, data, common_data, dt):
        speed = 0.3
        # if doing something that can't be interrupted then countdown to end of it

        if self.coolDown(data, dt):
            pass
        else:
            if data.health <= 0:
                self.setState(data, common_data, eStates.dead)
                return
            self.setState(data, common_data, eStates.stationary)
            if rand_num(10) == 0:
                #				self.setState(data, common_data, eStates.stationary)
                data.vel = Vec3(0, 0, 0)
                data.cooldown = rand_num(5) / 10.0 + 0.1
            else:
                # chase hero
                target = common_data.game.requestTarget(common_data.pos)
                if (target.x < common_data.pos.x):
                    #					self.setState(data, common_data, eStates.runLeft)
                    data.vel = Vec3(-speed, 0, 0)
                    data.facing = eDirections.left
                else:
                    #					self.setState(data, common_data, eStates.runRight)
                    data.vel = Vec3(speed, 0, 0)
                    data.facing = eDirections.right
                if (target.y < common_data.pos.y):
                    data.vel.y = -speed
                else:
                    data.vel.y = speed

                if common_data.pos.distSq(
                        Vec3(target.x, target.y, common_data.pos.z)) < 800:
                    data.vel.z = 0  # drop on target
                elif (common_data.pos.z < 80) and (data.vel.z < 3):
                    data.vel.z += 2  # otherwise flap
                    common_data.entity.graphics.startAnim(
                        data=common_data.entity.graphics_data)

                data.cooldown = 0.2

        if common_data.pos.z > 0:
            friction(data.vel, 0.01)
        else:
            friction(data.vel, 0.1)

        basic_gravity(data.vel)
        basic_physics(common_data.pos, data.vel)

        restrictToArena(common_data.pos, data.vel)
Пример #2
0
 def initEntity(self, entity, data=False):
     if entity.data:
         entity.game_pad = entity.data['game_pad']
     else:
         entity.game_pad = False
     entity.cooldown = -1
     entity.vel = Vec3(0.0, 0.0, 0.0)
     entity.queued_vel = Vec3(0.0, 0.0, 0.0)
     entity.facing = None
     entity.queued_facing = 4
     entity.state = PacBun.eStates.idle
     entity.queued_state = entity.state
     entity.score = 0
     entity.invulnerable = False
Пример #3
0
	def update(self, data, common_data, dt):
		speed = 0.3
		# if doing something that can't be interrupted then countdown to end of it

		if self.coolDown(data, dt):
			pass
		else:
			if data.health <= 0:
				self.setState(data, common_data, px_entity.eStates.dead)
				return
			self.setState(data, common_data, px_entity.eStates.stationary)
			if rand_num(10)==0:
#				self.setState(data, common_data, eStates.stationary)
				data.vel = Vec3(0,0,0)
				data.cooldown = rand_num(10)/8.0+0.3
			else:
				# chase hero
				target = common_data.game.requestTarget(common_data.pos)
				if(target.x<common_data.pos.x):
#					self.setState(data, common_data, eStates.runLeft)
					data.vel = Vec3(-speed, 0, 0)
					data.facing = px_entity.eDirections.left
				else:
#					self.setState(data, common_data, eStates.runRight)
					data.vel = Vec3(speed, 0, 0)
					data.facing = px_entity.eDirections.right
				if(target.z<common_data.pos.z):
					data.vel.z = -speed
				else:
					data.vel.z = speed

				if common_data.pos.distSq(Vec3(target.x,target.y,common_data.pos.y))<800:
					data.vel.y = 0 # drop on target
				elif (common_data.pos.z<80) and (data.vel.z<3):
					data.vel.y += 2 # otherwise flap
					# common_data.entity.graphics.startAnim(data = common_data.entity.graphics_data)
					self.setState(data, common_data, px_entity.eStates.stationary, force_new_state=True)
					common_data.entity.sounds.playEvent(data, common_data, eEvents.flap)

				data.cooldown = 0.2

		if common_data.pos.y>0:
			px_controller.friction(data.vel, 0.01)
		else:
			px_controller.friction(data.vel, 0.1)

		px_controller.basic_gravity(data.vel)
		px_controller.basic_physics(common_data.pos, data.vel)

		background.restrictToArena(common_data.pos, data.vel)
Пример #4
0
def restrictToArena(pos, vel):
    # stop running through walls at either side
    # if pos on left side of line then force to right side
    while pos.whichSidePlane(px_vector.Plane(1, 0, -1, 0)):
        px_controller.basic_physics(pos, Vec3(0.1, 0,
                                              -0.1))  # normal vector to plane

    # stop running through walls at either side
    # if pos on left side of line then force to right side
    while not pos.whichSidePlane(px_vector.Plane(1, 0, 1, -320)):
        px_controller.basic_physics(pos, Vec3(-0.1, 0,
                                              -0.1))  # normal vector to plane

    # stop running off screen bottom, top and sides
    pos.clamp(Vec3(0, 0, 0), Vec3(320, 200, 60))
Пример #5
0
	def initEntity(self, entity, data=False):
			# values for each instance

			entity.cooldown = -1
			entity.pause = 7
			entity.vel = Vec3(0.0,0.0,0.0)
			entity.queued_vel = Vec3(0.0,0.0,0.0)
			entity.facing = False
			entity.queued_facing = 4
			entity.health = 3
			entity.state = PacBun.eStates.idle
			entity.queued_state = entity.state
			entity.AI_cooldown = 1 + px_vector.rand_num(15) / 5.
			entity.type = data['type']
			entity.fox_speed = 1
Пример #6
0
    def __init__(self,
                 name,
                 game,
                 graphics=False,
                 sounds=False,
                 controller=False,
                 collider=False,
                 init=False,
                 parent=False,
                 data=False):
        self.data = data  # note this is done first so things like init can use the data
        self.game = game
        self.name = name
        self.pos = Vec3(0, 0, 0)
        self.state = eStates.idle
        self.new_state = True
        self.blink = False
        self.parent = parent

        self.components = {}
        for type in [
            ['graphics', graphics],
            ['sounds', sounds],
            ['controller', controller],
            ['collider', collider],
        ]:
            if type[1]:
                self.components[type[0]] = type[1]
                type[1].initEntity(self, data)

        if init:
            # px_log.log(f"Init entity: {name} code: {init}")
            # execute init
            exec(init, globals(), locals())
Пример #7
0
 def shoot(
     self,
     data,
     common_data,
     flippedX=False,
 ):
     arrow = self.game.requestNewEntity(entity_template=self.arrow_t,
                                        pos=common_data.pos +
                                        Vec3(-5 if flippedX else 5, 20, 0),
                                        parent=common_data.entity,
                                        name="Goblin archer arrow")
     arrow.collider_data.force = 0  #Vec3(-1 if flippedX else 1,0,0)
     arrow.collider_data.hero_damage = 1
     arrow.common_data.state = (px_entity.eStates.runLeft
                                if flippedX else px_entity.eStates.runRight)
     arrow.controller_data.vel = Vec3(-7 if flippedX else 7, 1, 0)
Пример #8
0
 def requestNewEnemy(self,
                     entity_template,
                     pos=Vec3(0, 0, 0),
                     parent=False,
                     name=False):
     self.num_monsters += 1
     self.requestNewEntity(entity_template, pos, parent, name)
Пример #9
0
def director_drake_blue(game):
    return [
        Message("Drake Blue Games presents...", Vec3(240, 180, 0),
                Color(0.8, 0.75, 1.0, 1.0), -1, px_graphics.eAlign.centre),
        Delay(2),
        MakeDirector('fade_to_mode', 'title'),
    ]
Пример #10
0
	def __init__(self, source, damage=0, damage_hero=0, force=Vec3(0,0,0), absorb=0, impassable=False):
		self.source = source
		self.damage = damage
		self.absorb = absorb
		self.damage_hero = damage_hero
		self.force = force
		self.absorb = absorb
		self.impassable = impassable
Пример #11
0
 def getCollisionMessage(self, data, common_data):
     if common_data.entity.controller_data.health > 0:
         return (px_collision.Message(source=common_data.entity,
                                      damage=0,
                                      damage_hero=1,
                                      force=Vec3(0, 0, 0)))
     else:
         return (px_collision.Message(source=common_data.entity))
Пример #12
0
def director_bunny_select(game):
    return [
        SetRenderLayerColor('game', Color(0, 0, 0, 0)),
        SetRenderLayerColor('overlay', Color(0, 0, 0, 0)),
        FadeToClearColor(Color.fromInts(0, 0, 0), 1),
        Message("Choose your bunny:", Vec3(240, 220, 0), Color(1, 1, 1, 1), -1,
                px_graphics.eAlign.centre),
        MakeEntity('pacbun choose',
                   data={
                       'pos': Vec3(210, 160, 0),
                       'parent': 'bunny choice',
                       'bun num': 0,
                       'bun name': 'Pac-Bun',
                       'message color': px_graphics.Color(1, 1, 0, 1),
                   }),
        MakeEntity('pinkie choose',
                   data={
                       'pos': Vec3(230, 160, 0),
                       'parent': 'bunny choice',
                       'bun num': 1,
                       'bun name': 'Pinkie',
                       'message color': px_graphics.Color(1, 0.8, 0.8, 1),
                   }),
        MakeEntity('blue choose',
                   data={
                       'pos': Vec3(250, 160, 0),
                       'parent': 'bunny choice',
                       'bun num': 2,
                       'bun name': 'Blue',
                       'message color': px_graphics.Color(0.5, 0.5, 1.0, 1),
                   }),
        MakeEntity('bowie choose',
                   data={
                       'pos': Vec3(270, 160, 0),
                       'parent': 'bunny choice',
                       'bun num': 3,
                       'bun name': 'Bowie',
                       'message color': px_graphics.Color(1, 1, 1.0, 1),
                   }),
        FadeRenderLayer('overlay', Color(1, 1, 1, 1), 1),
        FadeRenderLayer('game', Color(1, 1, 1, 1), 1),
        WaitForFlag('next_scene'),
        MakeDirector('fade_to_mode', 'play')
    ]
Пример #13
0
	def __init__(self, game, data):
		super(HeroController, self).__init__(game)
		# values global to all heroes
		self.invincible_states = (eStates.dead, eStates.fallLeft, eStates.fallRight, eStates.dead)

		hit_controller = self.game.controller_manager.makeTemplate({"Template": HitController})
		hit_collider = self.game.collision_manager.makeTemplate({"Template": HitCollider})

		hit_t = self.game.entity_manager.makeEntityTemplate(graphics=False, controller=hit_controller,
																															 collider=hit_collider)

		# cool downs in seconds
		self.strikes = [
			#			cool	del		range					force		damage
			Strike(0.8, 0.2, Vec3(24, 0, 0), 3, 2, template=hit_t),  # big
			Strike(0.8, 0.4, Vec3(8, 0, 30), 2, 2, template=hit_t),  # big_up
			Strike(0.3, 0.1, Vec3(12, 0, 0), 1, 1, template=hit_t),  # small
			Strike(0.3, 0.2, Vec3(18, 0, 0), 2, 0, template=hit_t),  # block
		]
Пример #14
0
		def __init__(self, common_data, init=False):
			if init:
				self.game_pad = init.game_pad
			else:
				self.game_pad = False

			self.vel = Vec3(0.0,-3.0,0.0)
			self.cooldown = -1
			common_data.state = eRainStates.state_fall
			common_data.new_state = False
Пример #15
0
		def __init__(self, common_data, init=False):
			if init:
				pass
			else:
				pass
			self.cooldown = 0
			self.health = 5
			self.vel = Vec3(0,0,0)
			self.mass = 4
			self.facing = px_entity.eDirections.left
Пример #16
0
	def strike(self, data, common_data,
						 strike,
						 flippedX=False,
						 name="unknown strike"
							):
		strike_ent = self.game.requestNewEntity(entity_template=strike.template,
																							 pos=common_data.pos +(strike.range.flippedX() if flippedX else strike.range),
																							 parent=common_data.entity,
																							 name=name)
		strike_ent.collider_data.force = Vec3(-strike.force if flippedX else strike.force,0,0)
		strike_ent.collider_data.damage = strike.damage
Пример #17
0
 def __init__(self, common_data, init=False):
     if init:
         pass
     else:
         pass
     self.cooldown = 0
     self.health = 5
     self.vel = Vec3(0, 0, 0)
     self.mass = 4
     self.facingleft = True
     self.fired = False
Пример #18
0
		def __init__(self, common_data, init=False):
			if init:
				self.game_pad = init.game_pad
			else:
				self.game_pad = False

			self.vel = Vec3(0.0,0.0,0.0)
			self.feed = False
			self.cooldown = 0
			self.faceleft = False

			common_data.state = DuckStates.stationary
Пример #19
0
 def receiveCollision(self, this_entity, message):
     data = this_entity.controller_data
     common_data = this_entity.common_data
     if message:
         if not (common_data.state == eStates.fallRight
                 or common_data.state == eStates.fallLeft):
             # if message.source.common_data.name !="Reaper":
             # 	log("Reaper hit by " + message.source.common_data.name)
             if message.absorb > 2:
                 data.vel = Vec3(0, 0, 0) + message.force / data.mass
             else:
                 data.vel = data.vel + message.force / data.mass
Пример #20
0
def director_quit(game):
    bunnies = game.game_data['bunnies']
    return [
        FadeToClearColor(Color(0, 0, 0), 1),
        SetRenderLayerColor('game', Color(0, 0, 0, 0)),
        SetRenderLayerColor('overlay', Color(0, 0, 0, 0)),
        FadeRenderLayer('game', Color(1, 1, 1, 1), 0.5),
        FadeRenderLayer('overlay', Color(1, 1, 1, 1), 0.5),
        Message("Goodbye and thank you for playing", Vec3(240, 165, 0),
                bunnies['pacbun'].color, 3, px_graphics.eAlign.centre),
        Message("with me and my friends.", Vec3(240, 150, 0),
                bunnies['pacbun'].color, 3, px_graphics.eAlign.centre),
        MakeEntity(template='pacbun bye',
                   name='pacbun',
                   pos=Vec3(240, 115, 1),
                   parent=game),
        MakeEntity(template='pinkie bye',
                   name='pinkie',
                   pos=Vec3(221, 89, 1),
                   parent=game),
        MakeEntity(template='blue bye',
                   name='blue',
                   pos=Vec3(236, 85, 1),
                   parent=game),
        MakeEntity(template='bowie bye',
                   name='bowie',
                   pos=Vec3(252, 86, 1),
                   parent=game),
        Delay(2),
        FadeRenderLayer('game', Color(0, 0, 0, 0), 1),
        FadeRenderLayer('overlay', Color(0, 0, 0, 0), 1),
        Delay(2),
        Quit()
    ]
Пример #21
0
    def __init__(self, ren):
        self.ren = ren

        self.images = []
        self.drawables = []

        self.origin = Vec3(0, 0, 0)

        self.font_manager = px_text.FontManager(self.ren)
        self.default_font = 0

        # Color cast used for fading and other effects
        self.color_cast = Color(1, 1, 1, 1)
Пример #22
0
        def __init__(self, common_data, init=False):
            if init:
                pass
            else:
                pass

            self.cooldown = -1
            self.health = 10
            self.vel = Vec3(0, 0, 0)
            self.mass = 3
            self.facing = px_entity.eDirections.right

            common_data.state = px_entity.eStates.stationary
            common_data.new_state = False
Пример #23
0
    def update(self, data, common_data, dt):
        speed = 0.3
        # if doing something that can't be interrupted then countdown to end of it

        if self.coolDown(data, dt):
            pass
        else:
            if data.health <= 0:
                self.setState(data, common_data, eStates.dead)
                return
            if rand_num(10) == 0:
                self.setState(data, common_data, eStates.stationary)
                data.vel = Vec3(0, 0, 0)
                data.cooldown = rand_num(1) + 2
            else:
                # chase hero
                target = common_data.game.requestTarget(common_data.pos)
                if (target.x < common_data.pos.x):
                    self.setState(data, common_data, eStates.runLeft)
                    data.vel = Vec3(-speed, 0, 0)
                    data.facing = eDirections.left
                else:
                    self.setState(data, common_data, eStates.runRight)
                    data.vel = Vec3(speed, 0, 0)
                    data.facing = eDirections.right
                if (target.y < common_data.pos.y):
                    data.vel.y = -speed
                else:
                    data.vel.y = speed

                data.cooldown = 0.5

        basic_physics(common_data.pos, data.vel)

        restrictToArena(common_data.pos, data.vel)

        friction(data.vel)
Пример #24
0
def director_high_scores(game):
    return [
        FadeToClearColor(Color(0, 0, 0), 2),
        FadeRenderLayer('overlay', Color(1, 1, 1, 1), 1),
        Delay(1),
        Message("Best", Vec3(207, 260, 0), Color(1, 1, 0, 1), -1,
                px_graphics.eAlign.left),
        MakeEntity(template='high_scores',
                   name='high scores',
                   pos=Vec3(240, 250, 50),
                   parent=game,
                   init="import high_score\n"
                   "high_score.init(self)"),
        Delay(0.8),
        Message("est", Vec3(230, 260, 0), Color(0, 1, 1, 1), -1,
                px_graphics.eAlign.left),
        Delay(0.8),
        Message("Buns", Vec3(250, 260, 0), Color(1, 0, 1, 1), -1,
                px_graphics.eAlign.left),
        Delay(3),
        # FadeRenderLayer('overlay', Color(0,0,0,0),1),
        # Delay(1),
        MakeDirector('fade_to_next_scene')
    ]
Пример #25
0
	def update(self, data, common_data, dt):
		# deal with things that can interrupt actions e.g. landing
		if common_data.pos.y <= 0:
			# on the ground
			self.setState(data, common_data, self.state_pool, self.pool_cooldown)
			data.vel = Vec3(0, 0, 0)
		else:
			# falling
			pass

		# deal with things that can't interrupt actions that are already happening
		if not self.coolDown(data, dt):
			if common_data.state == Controller.state_pool:
				self.setState(data, common_data, eStates.dead)

		px_controller.basic_physics(common_data.pos, data.vel)
Пример #26
0
		def __init__(self, common_data, init=False):
			if init:
				self.game_pad = init.game_pad
			else:
				self.game_pad = False

			self.cooldown = -1
			self.vel = Vec3(0.0,0.0,0.0)
			self.mass = 1
			self.jump = False
			self.attack = False
			self.facing = eDirections.down
			self.health = 3
			common_data.state = eStates.standDown
			self.invincible_cooldown = 2
			self.invincible = self.invincible_cooldown

			self.hero_struck=[]
			for s in range(0,eStrikes.num_strikes):
				self.hero_struck.append(False)
Пример #27
0
 def strike(
     self,
     data,
     common_data,
     strike,
     flippedX=False,
 ):
     strike_ent = self.game.requestNewEntity(
         entity_template=strike.template,
         pos=common_data.pos +
         (strike.range.flippedX() if flippedX else strike.range),
         parent=common_data.entity,
         name="Hero strike")
     strike_ent.collider_data.force = Vec3(
         -strike.force if flippedX else strike.force, 0, 0)
     strike_ent.collider_data.absorb = strike.absorb
     strike_ent.collider_data.damage = strike.damage
     strike_ent.collider_data.dim = strike.dim
     strike_ent.collider_data.orig = strike.orig
     strike_ent.controller_data.cooldown = strike.duration
Пример #28
0
    def update(self, entity, dt):
        # check if currently chosen bunny
        # bunny_choice = entity.game.getEntityByName('bunny choice')
        # if bunny_choice.controller_data.current_bun[0]==0:
        # 	print("Pacbun!")

        if entity.game.current_bun[0] == entity.bun_num:
            if entity.state != PacBun.eStates.runDown:
                self.setState(entity, PacBun.eStates.runDown)
                entity.message = entity.game.message(
                    text=entity.bun_name,
                    pos=entity.pos + Vec3(0, 40, 0),
                    color=entity.message_color,
                    duration=-1,
                    align=px_graphics.eAlign.centre,
                    fade_speed=0.5)
        else:
            self.setState(entity, PacBun.eStates.idle)
            if entity.message:
                entity.message.process('fade out', [0.5])
Пример #29
0
def director_title(game):
    bunnies = game.game_data['bunnies']
    return [
        SetRenderLayerColor('overlay', Color(0, 0, 0, 0)),
        SetRenderLayerColor('game', Color(0, 0, 0, 0)),
        FadeToClearColor(Color(0, 0, 0), 1),
        Delay(1),
        MakeEntity(template='title',
                   name='title',
                   pos=Vec3(240, 185, 0),
                   parent=game),
        MakeEntity(template='pacbun bye',
                   name='pacbun',
                   pos=Vec3(230, 138, 1),
                   parent=game),
        MakeEntity(template='pinkie bye',
                   name='pinkie',
                   pos=Vec3(210, 138, 1),
                   parent=game),
        MakeEntity(template='blue bye',
                   name='blue',
                   pos=Vec3(250, 138, 1),
                   parent=game),
        MakeEntity(template='bowie bye',
                   name='bowie',
                   pos=Vec3(270, 138, 1),
                   parent=game),
        FadeRenderLayer('overlay', Color(1, 1, 1, 1), 1),
        FadeRenderLayer('game', Color(1, 1, 1, 1), 1),
        Delay(2),
        Message("Press Space to play", Vec3(240, 110, 0),
                bunnies['pacbun'].color, -1, px_graphics.eAlign.centre),
        Delay(1),
        Message("(Esc to exit)", Vec3(240, 90, 0), bunnies['pacbun'].color, -1,
                px_graphics.eAlign.centre),
        Delay(5),
        # FadeRenderLayer('overlay', Color(0,0,0,0),1),
        # Delay(1),
        MakeDirector('fade_to_next_scene')
    ]
Пример #30
0
    def __init__(self):
        # do bare minimum to set up
        # most set up is in first update
        # this way I can restart the game
        super(BiscuitBattle, self).__init__("Biscuit Battle",
                                            res_x=1920,
                                            res_y=1080,
                                            zoom=1,
                                            fullscreen=False)

        ###############################
        # set up background and title #
        ###############################
        backgraphics = self.graphics_manager.makeTemplate(
            backgroundGraphics(self.renlayer))
        backcontroller = self.controller_manager.makeTemplate({
            "Template":
            BackgroundController,
            "Lines": [
                Line(Vec3(0, 0, 0), Vec3(1920, 0, 0)),
                Line(Vec3(0, 1080, 0), Vec3(1920, 1080, 0)),
                Line(Vec3(0, 0, 0), Vec3(0, 1080, 0)),
                Line(Vec3(1920, 0, 0), Vec3(1920, 1080, 0)),
            ],
        })
        back_t = self.entity_manager.makeEntityTemplate(
            graphics=backgraphics, controller=backcontroller)
        back = self.entity_manager.makeEntity(back_t)
        back.setPos(Vec3(0.0, 64.0, 0.0))
        self.drawables.append(back)

        title_graphics = self.graphics_manager.makeTemplate(
            titleGraphics(self.renlayer))
        title_controller = self.controller_manager.makeTemplate(
            {"Template": TitleController})
        self.title_t = self.entity_manager.makeEntityTemplate(
            graphics=title_graphics, controller=title_controller)
        self.title = self.requestNewEntity(entity_template=self.title_t,
                                           pos=Vec3(48, 50, 145),
                                           parent=self,
                                           name="Title")
        self.title.setGamePad(self.input.getGamePad(0))

        self.raining = False
        self.setGameMode(eGameModes.title)

        self.collision_manager = CollisionManager(
            game=self
        )  # TODO: should this be a ComponentManager() like the others?

        ###################
        # make components #
        ###################
        # Graphics Templates
        bat_graphics = self.graphics_manager.makeTemplate(
            batGraphics(self.renlayer))
        reaper_graphics = self.graphics_manager.makeTemplate(
            reaperGraphics(self.renlayer))
        raingraphics = self.graphics_manager.makeTemplate(
            rainGraphics(self.renlayer))
        herographics = self.graphics_manager.makeTemplate(
            heroGraphics(self.renlayer))
        heartgraphics = self.graphics_manager.makeTemplate(
            heartGraphics(self.renlayer))

        # Controller Templates
        raincontroller = self.controller_manager.makeTemplate(
            {"Template": RainController})
        herocontroller = self.controller_manager.makeTemplate(
            {"Template": HeroController})
        bat_controller = self.controller_manager.makeTemplate(
            {"Template": BatController})
        reaper_controller = self.controller_manager.makeTemplate(
            {"Template": ReaperController})
        heart_controller = self.controller_manager.makeTemplate(
            {"Template": HeartIndicatorController})

        # Collider Templates
        hero_collider = self.collision_manager.makeTemplate(
            {"Template": HeroCollider})
        bat_collider = self.collision_manager.makeTemplate(
            {"Template": BatCollider})
        reaper_collider = self.collision_manager.makeTemplate(
            {"Template": ReaperCollider})

        #########################################
        # Make entity templates from components #
        #########################################
        self.bat_t = self.entity_manager.makeEntityTemplate(
            graphics=bat_graphics,
            controller=bat_controller,
            collider=bat_collider)
        self.reaper_t = self.entity_manager.makeEntityTemplate(
            graphics=reaper_graphics,
            controller=reaper_controller,
            collider=reaper_collider)
        self.rain_t = self.entity_manager.makeEntityTemplate(
            graphics=raingraphics, controller=raincontroller)
        self.hero_t = self.entity_manager.makeEntityTemplate(
            graphics=herographics,
            controller=herocontroller,
            collider=hero_collider)

        # info bar
        self.heart_t = self.entity_manager.makeEntityTemplate(
            graphics=heartgraphics, controller=heart_controller)

        # director
        director_controller = self.controller_manager.makeTemplate(
            {"Template": DirectorController})

        self.director_t = self.entity_manager.makeEntityTemplate(
            controller=director_controller)