package projectzombie.init;

import gl_engine.vec.Vec2d;
import projectzombie.model.Model;
import projectzombie.model.ModelBox;
import projectzombie.model.ModelCactus;
import projectzombie.model.ModelChunkBorder;
import projectzombie.model.ModelCross;
import projectzombie.model.ModelEmpty;
import projectzombie.model.ModelGrass;
import projectzombie.model.ModelGui;
import projectzombie.model.ModelItem;
import projectzombie.model.ModelPlayer;
import projectzombie.model.ModelRandom;
import projectzombie.model.ModelRock;
import projectzombie.model.ModelTallGrass;
import projectzombie.model.ModelTile;
import projectzombie.model.ModelTree;
import projectzombie.model.ModelTreeSnow;
import projectzombie.model.ModelVertical;

public class Models
{
	public static final Model EMPTY 				= new ModelEmpty();
	public static final Model TILE_MISSING			= new ModelTile(Resources.TEX_EMPTY);
	
	public static final Model TILE_TALL_GRASS		= new ModelTallGrass();
	public static final Model TILE_GRASS			= new ModelGrass();
	public static final Model TILE_TREE				= new ModelTree();
	public static final Model TILE_TREE_SNOW		= new ModelTreeSnow();
	
	public static final Model TILE_CAMPFIRE_LIT		= new ModelCross(Resources.ATLAS.get("/tile/campfire_lit.png"), 4, 20);
	public static final Model TILE_CAMPFIRE_UNLIT	= new ModelCross(Resources.ATLAS.get("/tile/campfire_unlit.png"));
	public static final Model TILE_BLAST_FURNACE	= new ModelBox(Resources.ATLAS.get("/tile/blast_furnace.png"));
	public static final Model TILE_WORKBENCH		= new ModelBox(Resources.ATLAS.get("/tile/workbench.png"));
	public static final Model TILE_CLAY_POT_EMPTY	= new ModelBox(Resources.ATLAS.get("/tile/clay_pot_empty.png"));
	public static final Model TILE_CLAY_POT_WATER_1	= new ModelBox(Resources.ATLAS.get("/tile/clay_pot_water_1.png"));
	public static final Model TILE_CLAY_POT_WATER_2	= new ModelBox(Resources.ATLAS.get("/tile/clay_pot_water_2.png"));
	public static final Model TILE_CLAY_POT_WATER_3	= new ModelBox(Resources.ATLAS.get("/tile/clay_pot_water_3.png"));
	
	public static final Model TILE_SAPLING_1		= new ModelCross(Resources.ATLAS.get("/tile/sapling1.png"));
	public static final Model TILE_SAPLING_2		= new ModelCross(Resources.ATLAS.get("/tile/sapling2.png"));
	public static final Model TILE_SAPLING_3		= new ModelCross(Resources.ATLAS.get("/tile/sapling3.png"));
	public static final Model TILE_SAPLING_4		= new ModelCross(Resources.ATLAS.get("/tile/sapling4.png"));
	
	public static final Model TILE_CACTUS_1			= new ModelCactus(Resources.ATLAS.get("/tile/cactus1.png"), 0.5);
	public static final Model TILE_CACTUS_2			= new ModelCactus(Resources.ATLAS.get("/tile/cactus2.png"), 1.0);
	public static final Model TILE_CACTUS_3			= new ModelCactus(Resources.ATLAS.get("/tile/cactus3.png"), 1.5);
	public static final Model TILE_CACTUS_4			= new ModelCactus(Resources.ATLAS.get("/tile/cactus4.png"), 2.0);
	
	public static final Model[] TILE_HEMP = new Model[] {
			new ModelBox(Resources.ATLAS.get("/tile/hemp1.png")),
			new ModelBox(Resources.ATLAS.get("/tile/hemp2.png")),
			new ModelBox(Resources.ATLAS.get("/tile/hemp3.png")),
			new ModelBox(Resources.ATLAS.get("/tile/hemp4.png")),
			new ModelBox(Resources.ATLAS.get("/tile/hemp5.png"), new Vec2d(1, 2)),
			new ModelBox(Resources.ATLAS.get("/tile/hemp6.png"), new Vec2d(1, 2)),
			new ModelBox(Resources.ATLAS.get("/tile/hemp7.png"), new Vec2d(1, 2)),
			new ModelBox(Resources.ATLAS.get("/tile/hemp8.png"), new Vec2d(1, 2)),
	};
	
	public static final Model TILE_SNOW				= new ModelTile(Resources.ATLAS.get("/tile/snow.png"));
	public static final Model TILE_ICE				= new ModelTile(Resources.ATLAS.get("/tile/ice.png"));
	public static final Model TILE_ICE_WALL			= new ModelTile(Resources.ATLAS.get("/tile/ice_wall.png"));
	public static final Model TILE_SANDSTONE		= new ModelTile(Resources.ATLAS.get("/tile/sandstone.png"));
	public static final Model TILE_SANDSTONE_WALL	= new ModelTile(Resources.ATLAS.get("/tile/sandstone_wall.png"));
	public static final Model TILE_GRASS_INFESTED	= new ModelTile(Resources.ATLAS.get("/tile/grass_infested.png"));
	public static final Model TILE_GRASS_BURNT		= new ModelTile(Resources.ATLAS.get("/tile/grass_burnt.png"));
	public static final Model TILE_SAND				= new ModelTile(Resources.ATLAS.get("/tile/sand.png"));
	public static final Model TILE_STONE			= new ModelTile(Resources.ATLAS.get("/tile/stone.png"));
	public static final Model TILE_DIRT				= new ModelTile(Resources.ATLAS.get("/tile/dirt.png"));
	public static final Model TILE_ROCK				= new ModelRock(Resources.ATLAS.get("/tile/rock.png"));
	public static final Model TILE_ROCK_ICE			= new ModelRock(Resources.ATLAS.get("/tile/rock_ice.png"));
	public static final Model TILE_ROCK_SANDSTONE	= new ModelRock(Resources.ATLAS.get("/tile/rock_sandstone.png"));
	public static final Model TILE_LADDER			= new ModelVertical(Resources.ATLAS.get("/tile/ladder.png"));
	public static final Model TILE_PORTAL			= new ModelTile(Resources.ATLAS.get("/tile/tunnel_down.png"));
	public static final Model TILE_WALL				= new ModelTile(Resources.ATLAS.get("/tile/wall.png"));
	public static final Model TILE_LADDER_UP		= new ModelVertical(Resources.ATLAS.get("/tile/ladder_up.png"), new Vec2d(1, 16));
	public static final Model TILE_CHEST			= new ModelVertical(Resources.ATLAS.get("/tile/chest.png"));
	public static final Model TILE_BOSS_PORTAL 		= new ModelVertical(Resources.ATLAS.get("/tile/boss_portal.png"), new Vec2d(2, 2));
	public static final Model TILE_WATER 			= new ModelTile(Resources.ATLAS.get("/tile/water.png"), 16, 10);
	public static final Model TILE_LAVA				= new ModelTile(Resources.ATLAS.get("/tile/lava.png"), 16, 50);
	public static final Model TILE_LAVA_FLOW		= new ModelTile(Resources.ATLAS.get("/tile/lava_flow.png"), 16, 50);
	public static final Model TILE_LANTERN 			= new ModelVertical(Resources.ATLAS.get("/tile/lantern.png"), 4, 5);
	public static final Model TILE_ROCK_IRON		= new ModelRock(Resources.ATLAS.get("/tile/rock_iron.png"));
	public static final Model TILE_ROCK_GOLD		= new ModelRock(Resources.ATLAS.get("/tile/rock_gold.png"));
	public static final Model TILE_ROCK_TIN			= new ModelRock(Resources.ATLAS.get("/tile/rock_tin.png"));
	public static final Model TILE_ROCK_COPPER		= new ModelRock(Resources.ATLAS.get("/tile/rock_copper.png"));
	public static final Model TILE_ROCK_COAL		= new ModelRock(Resources.ATLAS.get("/tile/rock_coal.png"));
	public static final Model TILE_ROCK_URANIUM		= new ModelRock(Resources.ATLAS.get("/tile/rock_uranium.png"));
	
	public static final Model ENTITY_BOSS_IDLE = new ModelVertical(Resources.ATLAS.get("/entity/boss1/boss_still.png"), new Vec2d(4, 4));
	public static final Model ENTITY_BOSS_FIRING = new ModelVertical(Resources.ATLAS.get("/entity/boss1/boss_firing.png"), new Vec2d(4, 4), 4, 50);
	public static final Model ENTITY_BOSS_WALKING = new ModelVertical(Resources.ATLAS.get("/entity/boss1/boss_walking.png"), new Vec2d(4, 4), 4, 50);
	public static final Model ENTITY_BOSS_WALKING_AND_FIRING = new ModelVertical(Resources.ATLAS.get("/entity/boss1/boss_walking_firing.png"), new Vec2d(4, 4), 4, 50);
	public static final Model ENTITY_TNT 	= new ModelVertical(Resources.ATLAS.get("/entity/tnt.png"), new Vec2d(0.5, 0.5));
	public static final Model ENTITY_FLARE 	= new ModelVertical(Resources.ATLAS.get("/entity/flare.png"), new Vec2d(0.5, 0.5));
	public static final Model ENTITY_DUMMY	= new ModelVertical(Resources.ATLAS.get("/entity/dummy.png"));
	public static final Model ENTITY_GRAPPLING_HOOK	= new ModelVertical(Resources.ATLAS.get("/entity/grappling_hook.png"));
	
	public static final Model PARTICLE_BLOOD = new ModelVertical(Resources.ATLAS.get("/particle/blood.png"), new Vec2d(1, 1));
	public static final Model PARTICLE_WATER = new ModelVertical(Resources.ATLAS.get("/particle/water.png"), new Vec2d(1, 1));
	public static final Model PARTICLE_SMOKE_TRAIL = new ModelVertical(Resources.ATLAS.get("/particle/smoke_trail.png"), new Vec2d(1, 1));
	
	
	public static final ModelRandom PARTICLE_SMOKE_RANDOM = new ModelRandom(
			new ModelVertical(Resources.ATLAS.get("/particle/smoke_0.png")),
			new ModelVertical(Resources.ATLAS.get("/particle/smoke_1.png")),
			new ModelVertical(Resources.ATLAS.get("/particle/smoke_2.png")),
			new ModelVertical(Resources.ATLAS.get("/particle/smoke_3.png")),
			new ModelVertical(Resources.ATLAS.get("/particle/smoke_4.png")),
			new ModelVertical(Resources.ATLAS.get("/particle/smoke_5.png")));
	
	public static final ModelGui UI_PIXEL_WHITE 		= new ModelGui(Resources.ATLAS.get("/gui/pixel_white.png"));
	public static final ModelGui UI_PIXEL_BLACK			= new ModelGui(Resources.ATLAS.get("/gui/pixel_black.png"));
	public static final ModelGui UI_BUTTON 				= new ModelGui(Resources.ATLAS.get("/gui/button_normal.png"), new Vec2d(12, 1.5));
	public static final ModelGui UI_BUTTON_HOVER 		= new ModelGui(Resources.ATLAS.get("/gui/button_hover.png"), new Vec2d(12, 1.5));
	public static final ModelGui UI_BUTTON_DELETE		= new ModelGui(Resources.ATLAS.get("/gui/button_delete.png"), new Vec2d(1.875, 1.875));
	public static final ModelGui UI_BUTTON_DELETE_HOVER	= new ModelGui(Resources.ATLAS.get("/gui/button_delete_hover.png"), new Vec2d(1.875, 1.875));
	public static final ModelGui UI_BUTTON_PLAY			= new ModelGui(Resources.ATLAS.get("/gui/button_play.png"), new Vec2d(1.875, 1.875));
	public static final ModelGui UI_BUTTON_PLAY_HOVER	= new ModelGui(Resources.ATLAS.get("/gui/button_play_hover.png"), new Vec2d(1.875, 1.875));
	public static final ModelGui UI_LABEL				= new ModelGui(Resources.ATLAS.get("/gui/label.png"), new Vec2d(24, 3));
	public static final ModelGui UI_LABEL_RECIPE		= new ModelGui(Resources.ATLAS.get("/gui/label_recipe.png"), new Vec2d(12, 3));
	public static final ModelGui UI_TEXT_BOX			= new ModelGui(Resources.ATLAS.get("/gui/text_box.png"), new Vec2d(12, 1.5));
	public static final ModelGui UI_TEXT_CURSOR			= new ModelGui(Resources.ATLAS.get("/gui/text_cursor.png"), 2, 50);
	
	public static final ModelGui UI_SELECTION_BOX_WIDE		= new ModelGui(Resources.ATLAS.get("/gui/selection_box_wide.png"), new Vec2d(24, 12));
	public static final ModelGui UI_SELECTION_BOX_CRAFTING	= new ModelGui(Resources.ATLAS.get("/gui/selection_box_crafting.png"), new Vec2d(12, 12));
	public static final ModelGui UI_SELECTION_BOX_STORAGE	= new ModelGui(Resources.ATLAS.get("/gui/selection_box_storage.png"), new Vec2d(12, 12));
	public static final ModelGui UI_ITEM_SLOT_STORAGE		= new ModelGui(Resources.ATLAS.get("/gui/item_slot_storage.png"), new Vec2d(1.5, 1.5));
	
	public static final ModelGui UI_HEALTH_FG		= new ModelGui(Resources.ATLAS.get("/gui/health_full.png"), new Vec2d(6, 0.375));
	public static final ModelGui UI_HEALTH_BG		= new ModelGui(Resources.ATLAS.get("/gui/health_empty.png"), new Vec2d(6, 0.375));
	public static final ModelGui UI_ITEM_SLOTS		= new ModelGui(Resources.ATLAS.get("/gui/hotbar.png"), new Vec2d(15, 1.5));
	public static final ModelGui UI_ACTIVE_SLOT		= new ModelGui(Resources.ATLAS.get("/gui/hotbar_selected.png"), new Vec2d(1.5, 1.5));
	public static final ModelGui UI_INVENTORY		= new ModelGui(Resources.ATLAS.get("/gui/inventory.png"), new Vec2d(12, 12));
	public static final ModelGui UI_TEMPERATURE		= new ModelGui(Resources.ATLAS.get("/gui/temperature.png"), new Vec2d(0.75, 0.75));
	public static final ModelGui UI_WATER			= new ModelGui(Resources.ATLAS.get("/gui/water.png"), new Vec2d(0.75, 0.75));
	public static final ModelGui UI_ITEM_HOVER		= new ModelGui(Resources.ATLAS.get("/gui/pixel_black.png")).setOpacity(0.25);
	public static final ModelGui UI_TEXT_BG			= new ModelGui(Resources.ATLAS.get("/gui/pixel_white.png")).setColor(0.5f, 0.5f, 0.5f);
	public static final ModelGui UI_STONE_BG		= new ModelGui(Resources.ATLAS.get("/tile/stone.png"));
	
	public static final ModelItem UI_SLOT_ARMOR_HELMET		= new ModelItem(Resources.ATLAS.get("/gui/slot_armor_helmet.png"));
	public static final ModelItem UI_SLOT_ARMOR_CHEST		= new ModelItem(Resources.ATLAS.get("/gui/slot_armor_chest.png"));
	public static final ModelItem UI_SLOT_ARMOR_LEGS		= new ModelItem(Resources.ATLAS.get("/gui/slot_armor_legs.png"));
	public static final ModelItem UI_SLOT_CLOTHING_SHIRT	= new ModelItem(Resources.ATLAS.get("/gui/slot_clothing_shirt.png"));
	public static final ModelItem UI_SLOT_CLOTHING_PANTS	= new ModelItem(Resources.ATLAS.get("/gui/slot_clothing_pants.png"));
	public static final ModelItem UI_SLOT_CLOTHING_BOOTS	= new ModelItem(Resources.ATLAS.get("/gui/slot_clothing_boots.png"));
	
	public static final ModelItem ITEM_EMPTY 			= ModelItem.createEmpty();
	public static final ModelItem ITEM_MISSING			= new ModelItem(Resources.TEX_EMPTY);
	public static final ModelItem ITEM_CAMPFIRE			= new ModelItem(Resources.ATLAS.get("/tile/campfire_unlit.png"));
	public static final ModelItem ITEM_BLAST_FURNACE	= new ModelItem(Resources.ATLAS.get("/item/blast_furnace.png"));
	public static final ModelItem ITEM_WORKBENCH		= new ModelItem(Resources.ATLAS.get("/item/workbench.png"));
	public static final ModelItem ITEM_GRAPPLING_HOOK 	= new ModelItem(Resources.ATLAS.get("/item/grappling_hook.png"));
	public static final ModelItem ITEM_HEALTH_POTION	= new ModelItem(Resources.ATLAS.get("/item/health_potion.png"));
	public static final ModelItem ITEM_AMMO_BOX			= new ModelItem(Resources.ATLAS.get("/item/ammo_box.png"));
	public static final ModelItem ITEM_TNT 				= new ModelItem(Resources.ATLAS.get("/entity/tnt.png"));
	public static final ModelItem ITEM_FLARE 			= new ModelItem(Resources.ATLAS.get("/entity/flare.png"));
	public static final ModelItem ITEM_LANTERN 			= new ModelItem(Resources.ATLAS.get("/tile/lantern.png"), 4, 5);
	public static final ModelItem ITEM_TORCH_LIT 		= new ModelItem(Resources.ATLAS.get("/item/torch_lit.png"), 4, 50);
	public static final ModelItem ITEM_TORCH_UNLIT		= new ModelItem(Resources.ATLAS.get("/item/torch_unlit.png"));
	
	public static final ModelItem ITEM_CLAY_POT_WET		= new ModelItem(Resources.ATLAS.get("/item/clay_pot_wet.png"));
	public static final ModelItem ITEM_CLAY_POT_EMPTY	= new ModelItem(Resources.ATLAS.get("/item/clay_pot_empty.png"));
	public static final ModelItem ITEM_CLAY_POT_WATER_1	= new ModelItem(Resources.ATLAS.get("/item/clay_pot_water1.png"));
	public static final ModelItem ITEM_CLAY_POT_WATER_2	= new ModelItem(Resources.ATLAS.get("/item/clay_pot_water2.png"));
	public static final ModelItem ITEM_CLAY_POT_WATER_3	= new ModelItem(Resources.ATLAS.get("/item/clay_pot_water3.png"));
	
	public static final ModelItem ITEM_FLINT_HATCHET	= new ModelItem(Resources.ATLAS.get("/item/flint_hatchet.png"));
	public static final ModelItem ITEM_STONE_HATCHET	= new ModelItem(Resources.ATLAS.get("/item/stone_hatchet.png"));
	public static final ModelItem ITEM_STONE_PICK		= new ModelItem(Resources.ATLAS.get("/item/stone_pick.png"));
	public static final ModelItem ITEM_STONE_SHOVEL		= new ModelItem(Resources.ATLAS.get("/item/stone_shovel.png"));
	
	public static final ModelItem ITEM_ORE_IRON			= new ModelItem(Resources.ATLAS.get("/item/ore_iron.png"));
	public static final ModelItem ITEM_ORE_COPPER		= new ModelItem(Resources.ATLAS.get("/item/ore_copper.png"));
	public static final ModelItem ITEM_ORE_TIN 			= new ModelItem(Resources.ATLAS.get("/item/ore_tin.png"));
	public static final ModelItem ITEM_ORE_GOLD			= new ModelItem(Resources.ATLAS.get("/item/ore_gold.png"));
	
	public static final ModelItem ITEM_SPAWN_ZOMBIE		= new ModelItem(Resources.ATLAS.get("/entity/zombie_front_moving.png"), 4, 10);
	public static final ModelItem ITEM_SPAWN_DUMMY		= new ModelItem(Resources.ATLAS.get("/entity/dummy.png"));
	
	public static final ModelItem ITEM_ROCK				= new ModelItem(Resources.ATLAS.get("/item/rock.png"));
	public static final ModelItem ITEM_SNOW_PILE		= new ModelItem(Resources.ATLAS.get("/item/snow_pile.png"));
	public static final ModelItem ITEM_SANDSTONE		= new ModelItem(Resources.ATLAS.get("/item/sandstone.png"));
	public static final ModelItem ITEM_FLINT			= new ModelItem(Resources.ATLAS.get("/item/flint.png"));
	public static final ModelItem ITEM_CLAY				= new ModelItem(Resources.ATLAS.get("/item/clay.png"));
	public static final ModelItem ITEM_IRON 			= new ModelItem(Resources.ATLAS.get("/item/iron.png"));
	public static final ModelItem ITEM_COPPER 			= new ModelItem(Resources.ATLAS.get("/item/copper.png"));
	public static final ModelItem ITEM_TIN 				= new ModelItem(Resources.ATLAS.get("/item/tin.png"));
	public static final ModelItem ITEM_GOLD				= new ModelItem(Resources.ATLAS.get("/item/gold.png"));
	public static final ModelItem ITEM_SLAG				= new ModelItem(Resources.ATLAS.get("/item/slag.png"));
	public static final ModelItem ITEM_COAL				= new ModelItem(Resources.ATLAS.get("/item/coal.png"));
	
	public static final ModelItem ITEM_PLANT_FIBRE		= new ModelItem(Resources.ATLAS.get("/item/plant_fibre.png"));
	public static final ModelItem ITEM_HEMP_SEED		= new ModelItem(Resources.ATLAS.get("/item/hemp_seed.png"));
	public static final ModelItem ITEM_ACORN			= new ModelItem(Resources.ATLAS.get("/item/acorn.png"));
	public static final ModelItem ITEM_LOG				= new ModelItem(Resources.ATLAS.get("/item/log.png"));
	public static final ModelItem ITEM_LOG_SNOW			= new ModelItem(Resources.ATLAS.get("/item/log_snow.png"));
	public static final ModelItem ITEM_CHARCOAL			= new ModelItem(Resources.ATLAS.get("/item/charcoal.png"));
	public static final ModelItem ITEM_ASH				= new ModelItem(Resources.ATLAS.get("/item/ash.png"));
	
	// Player varients
	public static final ModelPlayer ENTITY_PLAYER_W = new ModelPlayer(
			Resources.ATLAS.get("/player/player_white_back_still.png"),
			Resources.ATLAS.get("/player/player_white_back_moving.png"),
			Resources.ATLAS.get("/player/player_white_front_still.png"),
			Resources.ATLAS.get("/player/player_white_front_moving.png"));
	
	public static final ModelPlayer ENTITY_PLAYER_B = new ModelPlayer(
			Resources.ATLAS.get("/player/player_black_back_still.png"),
			Resources.ATLAS.get("/player/player_black_back_moving.png"),
			Resources.ATLAS.get("/player/player_black_front_still.png"),
			Resources.ATLAS.get("/player/player_black_front_moving.png"));
	
	
	public static final Model ENTITY_ZOMBIE_B			= new ModelVertical(Resources.ATLAS.get("/entity/zombie_back_moving.png"), 4, 10);
	public static final Model ENTITY_ZOMBIE_F			= new ModelVertical(Resources.ATLAS.get("/entity/zombie_front_moving.png"), 4, 10);
	public static final Model ENTITY_ZOMBIE_B_ARMORED	= new ModelVertical(Resources.ATLAS.get("/entity/armored_zombie_back_moving.png"), 4, 10);
	public static final Model ENTITY_ZOMBIE_F_ARMORED	= new ModelVertical(Resources.ATLAS.get("/entity/armored_zombie_front_moving.png"), 4, 10);

	public static final ModelChunkBorder CHUNK_BORDER = new ModelChunkBorder();
}
