import numpy as np
import cv2


def load_slime():
    slime = cv2.imread('images/16x20slime.png', cv2.IMREAD_UNCHANGED)

    normal = np.empty((20, 16, 4, 4))

    slime_sprite = [normal]

    # Sliming (3 frames)
    # Dead (1 frame)

    for j, direction in enumerate(slime_sprite):
        for i in range(4):
            direction[:, :, :, i] = slime[j*20:j*20+20,i*16:i*16+16,:]

    return slime_sprite


def load_player():
    guy = cv2.imread('images/32x36guy.png', cv2.IMREAD_UNCHANGED)

    up = np.empty((36, 32, 4, 13))
    right = np.empty((36, 32, 4, 13))
    down = np.empty((36, 32, 4, 13))
    # make left out of flipping right
    left = np.empty((36, 32, 4, 13))

    player_sprite = [up, right, down]

    # Walking (3 frames)
    # Punching (4 frames)
    # Cheer (5 frames)
    # Dead (1 frame)

    for j, direction in enumerate(player_sprite):
        for i in range(13):
            direction[:, :, :, i] = guy[j*36:j*36+36,i*32:i*32+32,:]

    # Making left animation
    for i in range(13):
        rightframe = right[:,:,:, i]
        leftframe = cv2.flip(rightframe, 1)
        left[:,:,:,i] = leftframe

    player_sprite.append(left)

    return player_sprite


def load_doggy():
    dog = cv2.imread('images/32x32dog.png', cv2.IMREAD_UNCHANGED)

    left = np.empty((32, 32, 4, 7))
    up = np.empty((32, 32, 4, 7))
    down = np.empty((32, 32, 4, 7))
    # make right out of flipping left
    right = np.empty((32, 32, 4, 7))

    dog_sprite = [left, up, down]

    # 3 frames happy dog
    # 1 frame sleepy dog (only on left direction)

    for j, direction in enumerate(dog_sprite):
        for i in range(7):
            direction[:, :, :, i] = dog[j*32:j*32+32,i*32:i*32+32,:]

    # Making right animation
    for i in range(7):
        leftframe = left[:,:,:, i]
        rightframe = cv2.flip(leftframe, 1)
        right[:,:,:,i] = rightframe

    dog_sprite.append(right)

    return dog_sprite


def load_heart():
    heart = cv2.imread('images/16x16hearts.png', cv2.IMREAD_UNCHANGED)

    normal = np.empty((16, 16, 4, 3))

    heart_sprite = [normal]

    # Full, half heart (2 frames)

    for j, direction in enumerate(heart_sprite):
        for i in range(3):
            direction[:, :, :, i] = heart[j*16:j*16+16,i*16:i*16+16,:]

    return heart_sprite