Esempio n. 1
0
    def shoot(self, bullet_collection, counter, speed):
        # se crea el controlador de animaciones y se inicializa con la textura
        bullet_anim = anim.Anim_Controller(self.bullet_animations, [BULLET_SIZE, BULLET_SIZE * WIDTH / HEIGHT, 1], 0)
        bullet_anim.Play("shooted") # se pone la textura de la bala
        #se crea un nodo que contiene la animacion
        scaled_bullet = sg.SceneGraphNode("scaled_bullet")
        scaled_bullet.transform = tr.rotationZ(np.pi)
        scaled_bullet.childs += [bullet_anim]

        # se crea un nodo con una gpuShape que servira para detectar las colisiones y verlas si se quiere
        collision_node = sg.SceneGraphNode("collision_enemyBullet")
        # se escala la hitbox para que tenga el mismo tamaño que la textura
        collision_node.transform = tr.scale(1, 1 * WIDTH / HEIGHT, 1)
        collision_node.childs +=  [es.toGPUShape(cl.createCircleHitbox(BULLET_HITBOX_RADIO, 10, 0, 1, 0))]

        # se crea uno nodo/objeto CollisionShape que tiene informacion y metodos para detectar colisiones con respecto de una gpuShape
        scaled_collision = cl.CollisionShape("scaled_collision", BULLET_HITBOX_RADIO, True)
        scaled_collision.transform = tr.rotationZ(np.pi) #se voltea
        scaled_collision.childs += [collision_node]

        #posicion donde aparece la bala
        tempPos = self.position + self.bullet_pos
        # se crea el objeto bullet que contendra como nodos hijos a la animacion y la hitbox
        bullet_object = go.bulletObject("bullet" + str(counter))
        bullet_object.fromEnemy = True #es bala enemiga
        # se traslada la bala en la pantalla a su posicion inicial
        bullet_object.transform = tr.translate(tempPos[0], tempPos[1], tempPos[2])
        bullet_object.position = tempPos
        bullet_object.velocity[1] = -speed #se indica su velocidad
        bullet_object.childs += [scaled_bullet] #se agrega la animacion
        bullet_object.childs += [scaled_collision] #se agrega la hitbox
        bullet_object.childs[1].parent = bullet_object # se agrega la referencia de padre al objeto CollisionShape

        #se agrega el objeto bullet a la collecion de balas enemigas
        bullet_collection.childs += [bullet_object]
Esempio n. 2
0
def setupfinishAnim(lose_image, win_image):
    global MAIN_NODE, BACKGROUND_ANIM, LETTERS_ANIM, WIN_ANIM
    backGround_frames = anim.createFrames(lose_image, [256, 76], [0, 0], [10, 1], [0, 0]) #se recorta la imagen
    letters_frames = anim.createFrames(lose_image, [256, 76], [0, 0], [10, 1], [1, 0]) #se recorta la imagen

    bg_animations = {"appear" : anim.Animation(backGround_frames, 9, False, False)} #se crean las animaciones
    lt_animations = {"appear": anim.Animation(letters_frames, 9, False, False)} #se crean las animaciones

    #Se crean los controladores de las animaciones y se inicializan
    BACKGROUND_ANIM = anim.Anim_Controller(bg_animations, [2, WIDTH / HEIGHT * 1, 1], 0)
    BACKGROUND_ANIM.Play("appear")
    LETTERS_ANIM =  anim.Anim_Controller(lt_animations, [2 * 0.4, WIDTH / HEIGHT * 0.4, 1], 0)
    LETTERS_ANIM.Play("appear")


    win_frames = anim.createFrames(win_image, [128, 192], [0, 0], [2, 11], [0, 0]) #se recorta la imagen
    win_animations = {"appear": anim.Animation(win_frames, 12, False, False)} #se crea la animacion
    # Se crea el controlador de la animacion y se inicializa
    WIN_ANIM = anim.Anim_Controller(win_animations, [2, WIDTH / HEIGHT * 2 * 1.5, 1], 0)
    WIN_ANIM.Play("appear")
Esempio n. 3
0
def addEnemies2(enemies_collection, amount):
    global enemy_counter, enemy2_center
    #se inicializan los valores para el centro de rotacion
    enemy2_center[0] = 0
    enemy2_center[1] = ENEMY2_SPAWN_POSY
    #angulo para distribuir radialmente a las naves
    tempTheta = 2 * np.pi / amount
    # se distribuyen los enemigos en la pantalla segun su cantidad
    for enemy in range(amount):
        # se crea el controlador de animaciones y se inicializa
        enemy_anim = anim.Anim_Controller(enemy2_animations, [ENEMY2_SIZE, ENEMY2_SIZE * WIDTH/HEIGHT, 1], 0)
        enemy_anim.Play("flying")
        # se define su posicion
        temp_posX = enemy2_center[0] + enemy2_radio * math.cos(tempTheta * enemy) * 2.5
        temp_posY = enemy2_center[1] + enemy2_radio * math.sin(tempTheta * enemy)* WIDTH / HEIGHT

        # se crea un nodo que contiene la animacion y que la voltea
        scaled_enemy = sg.SceneGraphNode("scaled_enemy")
        scaled_enemy.transform = tr.rotationZ(np.pi)
        scaled_enemy.childs += [enemy_anim]

        # se crea un nodo con una gpuShape que servira para detectar las colisiones y verlas si se quiere
        collision_node = sg.SceneGraphNode("collision_enemy2")
        collision_node.transform = tr.scale(1, 1* WIDTH / HEIGHT, 1)
        collision_node.childs +=  [es.toGPUShape(cl.createCircleHitbox(ENEMY2_HITBOX_RADIO, 10, 0, 1, 0))]

        # se crea uno nodo/objeto CollisionShape que tiene informacion y metodos para detectar colisiones con respecto de una gpuShape
        scaled_collision = cl.CollisionShape("scaled_collision", ENEMY2_HITBOX_RADIO, True)
        scaled_collision.transform = tr.rotationZ(np.pi)
        scaled_collision.childs += [collision_node]

        # se crea el objeto enemy que contendra como nodos hijos a la animacion y la hitbox
        enemy_object = enemyObject("enemy" + str(enemy_counter))
        enemy_object.theta = tempTheta * enemy
        enemy_object.enemy = 2 # es el tercer tipo de enemigos
        # se traslada la nave en la pantalla a su posicion inicial
        enemy_object.transform = tr.translate(temp_posX, temp_posY, 0)
        enemy_object.position[0] = temp_posX
        enemy_object.position[1] = temp_posY
        enemy_object.position[2] = 0
        enemy_object.velocity = [0, ENEMY2_CENTER_SPEED, 0] #se indica la velocidad del centro de rotacion
        enemy_object.childs += [scaled_enemy] #se agrega la animacion
        enemy_object.childs += [scaled_collision] #se agrega la hitbox
        enemy_object.childs[1].parent = enemy_object # se agrega la referencia de padre al objeto CollisionShape

        # se le agrega la animacion de su bala correspondiente
        enemy_object.bullet_animations = bullet2_animation
        enemy_counter += 1

        # se agrega el objeto enemy a la coleccion de enemigos
        enemies_collection.childs += [enemy_object]
Esempio n. 4
0
def setupPlayer(image, main_node):
    #Se crean los distintos frames para cada animacion, recortando la imagen
    ship_frames1 = anim.createFrames(image, [128, 128], [0, 0], [2], [0, 0]) #animacion para avanzar
    ship_frames2 = anim.createFrames(image, [128, 128], [0, 0], [2], [0, 1]) #animacion para retroceder
    hurt_frames = anim.createFrames(image, [128, 128], [0, 0], [2], [2, 2]) # animacion cuando le llega una bala
    explode_frames = anim.createFrames(image, [128, 128], [0, 0], [2, 5], [2, 0]) # animacion de explosion

    #se crea un diccionario con las animaciones
    ship_animations = {}
    ship_animations["fast"] = anim.Animation(ship_frames1, 12, True, False)
    ship_animations["slow"] = anim.Animation(ship_frames2, 12, True, False)
    ship_animations["hurt"] = anim.Animation(hurt_frames, 12, True, False)
    ship_animations["explode"] = anim.Animation(explode_frames, 9, False, False)

    #se crea el controlador de animaciones y se inicializa
    ship_Anim = anim.Anim_Controller(ship_animations, [PLAYER_SIZE, WIDTH / HEIGHT * PLAYER_SIZE, 1], 0)
    ship_Anim.Play("slow")

    #se crea un nodo que contiene la animacion
    anim_node = sg.SceneGraphNode("anim_player")
    anim_node.childs += [ship_Anim]

    # se crea un nodo con una gpuShape que servira para detectar las colisiones y verlas si se quiere
    collision_node = sg.SceneGraphNode("collision_player")
    collision_node.childs +=  [es.toGPUShape(cl.createCircleHitbox(PLAYER_HITBOX_RADIO, 10, 0, 1, 0))]

    # se crea uno nodo/objeto CollisionShape que tiene informacion y metodos para detectar colisiones con respecto de una gpuShape
    scaled_collision = cl.CollisionShape("scaled_collision", PLAYER_HITBOX_RADIO, True)
    # se escala la hitbox para que tenga el mismo tamaño que la textura
    scaled_collision.transform = tr.scale(1, 1 * WIDTH/HEIGHT, 1)
    scaled_collision.childs += [collision_node]

    # se crea el objeto player que contendra como nodos hijos a la animacion y la hitbox
    player_gameObject = playerObject("player")
    # se traslada la nave en la pantalla a su posicion inicial
    player_gameObject.transform = tr.translate(0, -0.5, 0)
    player_gameObject.position[0] = 0
    player_gameObject.position[1] = -0.5
    player_gameObject.position[2] = 0
    player_gameObject.childs += [anim_node] #se agrega la animacion
    player_gameObject.childs += [scaled_collision] #se agrega la hitbox
    player_gameObject.childs[1].parent = player_gameObject # se agrega la referencia de padre al objeto CollisionShape

    #agrega el objeto player a la escena principal
    main_node.childs += [player_gameObject]

    #retorna la referencia al objeto player
    return go.findNode(main_node, "player")
Esempio n. 5
0
def addEnemies0(enemies_collection, amount):
    global enemy_counter
    #se distribuyen los enemigos en la pantalla segun su cantidad
    for enemy in range(amount):
        # se crea el controlador de animaciones y se inicializa
        enemy_anim = anim.Anim_Controller(enemy0_animations, [ENEMY0_SIZE, ENEMY0_SIZE * WIDTH/HEIGHT, 1], 0)
        enemy_anim.Play("flying")
        #se define su posicion horizontal
        temp_posX = -1 + 1/amount -0.05 + enemy*(2/amount)

        # se crea un nodo que contiene la animacion y que la voltea
        scaled_enemy = sg.SceneGraphNode("scaled_enemy")
        scaled_enemy.transform = tr.rotationZ(np.pi)
        scaled_enemy.childs += [enemy_anim]

        # se crea un nodo con una gpuShape que servira para detectar las colisiones y verlas si se quiere
        collision_node = sg.SceneGraphNode("collision_enemy0")
        collision_node.transform = tr.scale(1, 1* WIDTH / HEIGHT, 1)
        collision_node.childs +=  [es.toGPUShape(cl.createCircleHitbox(ENEMY0_HITBOX_RADIO, 10, 0, 1, 0))]

        # se crea uno nodo/objeto CollisionShape que tiene informacion y metodos para detectar colisiones con respecto de una gpuShape
        scaled_collision = cl.CollisionShape("scaled_collision", ENEMY0_HITBOX_RADIO, True)
        scaled_collision.transform = tr.rotationZ(np.pi)
        scaled_collision.childs += [collision_node]

        # se crea el objeto enemy que contendra como nodos hijos a la animacion y la hitbox
        enemy_object = enemyObject("enemy" + str(enemy_counter))
        enemy_object.enemy = 0 # es el primer tipo de enmigos
        # se traslada la nave en la pantalla a su posicion inicial
        enemy_object.transform = tr.translate(temp_posX, ENEMY0_SPAWN_POSY, 0)
        enemy_object.position[0] = temp_posX
        enemy_object.position[1] = ENEMY0_SPAWN_POSY
        enemy_object.position[2] = 0
        #se indica su velocidad
        enemy_object.velocity = [0, ENEMY0_SPAWN_SPEED, 0]
        enemy_object.childs += [scaled_enemy] #se agrega la animacion
        enemy_object.childs += [scaled_collision] #se agrega la hitbox
        enemy_object.childs[1].parent = enemy_object # se agrega la referencia de padre al objeto CollisionShape

        #se le agrega la animacion de su bala correspondiente
        enemy_object.bullet_animations = bullet0_animation
        enemy_counter += 1
        #se agrega el objeto enemy a la collecion de enemigos
        enemies_collection.childs += [enemy_object]
Esempio n. 6
0
def addStars(stars_coll):
    posY = 0
    #posicion horizontal del paquete depende de los anteriores
    if len(stars_coll.childs) == 0:
        posY = -1
    else:
        posY = stars_coll.childs[-1].position[1] + STAR_POSY

    #se crea un gameObject que vendria siendo el paquete de estrellas y se posiciona
    start_node = gameObject("star_node")
    start_node.transform = tr.translate(0, posY, 0)
    start_node.position[1] = posY
    #cantidad random de estrellas que contendra el paquete
    amountInX = random.randint(STARS_IN_X_MIN, STARS_IN_X_MAX)

    for x in range(amountInX):
        #por cada estrella del paquete se crea una animController con una estrella random, tamaño random y se inicializa
        anim0 = anim.Animation(stars_images[random.randint(0, 15)],
                               random.randint(STAR_MIN_FPS, STAR_MAX_FPS),
                               True, False)
        scale = STAR_MIN_SIZE + random.random() * (STAR_MAX_SIZE -
                                                   STAR_MIN_SIZE)
        anim_Ctl = anim.Anim_Controller({"star": anim0},
                                        [scale, scale * WIDTH / HEIGHT, scale],
                                        0)
        anim_Ctl.Play("star")

        #posicion horizontal random
        startPosX = -1 + (2 / amountInX) * x + random.random() * (2 /
                                                                  amountInX)
        #posicion vertical variando un poco con respecto a la del paquete
        startPosY = (-1 + random.random() * 2) * STAR_DELTA_POSY

        #se crea el gameobject de cada estrella con su animacion
        star_object = gameObject("star")
        star_object.transform = tr.translate(startPosX, startPosY, 0)
        star_object.position = np.array([startPosX, startPosY, 0])
        star_object.childs += [anim_Ctl]
        #se agrega cada estrella al paquete
        start_node.childs += [star_object]
    #se agrega el paquete a la coleccion de estrellas
    stars_coll.childs += [start_node]