﻿# -*- coding: utf-8 -*-

"""
Enumerazione dei materiali.
"""

from src.element import EnumElement, finalize_enumeration


#-------------------------------------------------------------------------------

name = __name__[__name__.rfind(".")+1 : ]
elements = []
cycle_on_last = False


#-------------------------------------------------------------------------------

class MaterialElement(EnumElement):
    def __init__(self, name, description=""):
        super(MaterialElement, self).__init__(name, description)
        self.state    = ""  # Stato in cui si trova normalmente in natura il materiale: "SOLID", "LIQUID", "GASEOUS" oppure "NONE"
        self.hardness = -1  # Durezza del materiale
    #- Fine Inizializzazione -


#-------------------------------------------------------------------------------

NONE = MaterialElement("MATERIAL_NONE", "Nessuno")

# Materiali lignei
SOFTWOOD     = MaterialElement("legno dolce")
WOOD         = MaterialElement("legno")
HARDWOOD     = MaterialElement("legno duro")
TROPICALWOOD = MaterialElement("legni tropicali")  # Da considerarsi un legno duro
BAMBOO       = MaterialElement("bamboo")
OAK          = MaterialElement("quercia")
EBONY        = MaterialElement("ebano")
CORK         = MaterialElement("sughero")
WICKERS      = MaterialElement("vimini")
STRAW        = MaterialElement("paglia")

# Materiali vegetali
VEGETABLE    = MaterialElement("vegetale")

# Materiali cartacei
PAPER        = MaterialElement("carta")
PARCHMENT    = MaterialElement("pergamena")
CARDBOARD    = MaterialElement("cartone")
PAPYRUS      = MaterialElement("papiro")

# Materiali per vestiti e tessuti vari
COTTON       = MaterialElement("cotone")
SILK         = MaterialElement("seta")
SATIN        = MaterialElement("raso")
LACE         = MaterialElement("pizzo")
WOOL         = MaterialElement("lana")
LINE         = MaterialElement("lino")
CANVAS       = MaterialElement("tela")
CLOTH        = MaterialElement("tessuto")
VELVET       = MaterialElement("velluto")
FELT         = MaterialElement("feltro")
HEMP         = MaterialElement("canapa")
LEATHER      = MaterialElement("cuoio")
FUR          = MaterialElement("pelliccia")
SNAKESKIN    = MaterialElement("pelle di serpente")
FEATHERS     = MaterialElement("penne")
CELLULOSE    = MaterialElement("cellulosa")

# Materiali metallici e minerari
ALLOY        = MaterialElement("lega")  # lega generica di metalli
METAL        = MaterialElement("metallo")  # metallo generico se proprio non si sa cosa dare", magari cambiare il sinonimo
STEEL        = MaterialElement("acciaio")
GOLD         = MaterialElement("oro")
SILVER       = MaterialElement("argento")
ELECTRUM     = MaterialElement("electrum")  # è una lega di oro e argento
MITHRIL      = MaterialElement("mithril")
PLATINUM     = MaterialElement("platino")
TITANIUM     = MaterialElement("titanio")
ALUMINIUM    = MaterialElement("alluminio")
IRON         = MaterialElement("ferro")
LEAD         = MaterialElement("piombo")
COPPER       = MaterialElement("rame")
BRONZE       = MaterialElement("bronzo")
BRASS        = MaterialElement("ottone")
TIN          = MaterialElement("stagno")
WIRE         = MaterialElement("filo metallico")
PEWTER       = MaterialElement("peltro")
ADAMANTITE   = MaterialElement("adamantio")
MARBLE       = MaterialElement("marmo")
STONE        = MaterialElement("pietra")
QUARTZ       = MaterialElement("quarzo")
FLINT        = MaterialElement("selce")
LODESTONE    = MaterialElement("magnetite")
GRANITE      = MaterialElement("granito")
ENAMEL       = MaterialElement("smalto")
OBSIDIAN     = MaterialElement("ossidiana")
AMBER        = MaterialElement("ambra")
AGATE        = MaterialElement("agata")
LAPISLAZULI  = MaterialElement("lapislazzuli")
JADE         = MaterialElement("giada")

DRAGONSCALE  = MaterialElement("scaglie di drago")
GLASS        = MaterialElement("vetro")
POTTERY      = MaterialElement("ceramica")
PORCELAIN    = MaterialElement("porcellana")
ICE          = MaterialElement("ghiaccio")

# Materiali terrosi
SHELL        = MaterialElement("conchiglia")
EARTH        = MaterialElement("terra")
ACID         = MaterialElement("acido")
COAL         = MaterialElement("carbone")
SAND         = MaterialElement("sabbia")
CLAY         = MaterialElement("argilla")
ASH          = MaterialElement("cenere")

# Materiali preziosi
DIAMOND      = MaterialElement("diamante")
PEARL        = MaterialElement("perla")
GEM          = MaterialElement("gemma")
RUBY         = MaterialElement("rubino")
CRISTAL      = MaterialElement("cristallo")
IVORY        = MaterialElement("avorio")
CORUNDUM     = MaterialElement("corindone")  # Ossido di alluminio in cristalli estremamente duri di colore vario e lucentezza adamantina, di diverse varietà tra le quali alcune utilizzate come gemme
CORAL        = MaterialElement("corallo")
EMERALD      = MaterialElement("smeraldo")
AMETHYST     = MaterialElement("ametista")
NACRE        = MaterialElement("madreperla")
ONYX         = MaterialElement("onice")
MOONSTONE    = MaterialElement("pietra della luna")  # Si tratta della varietà di feldspato detta "adularia", un silicato di potassio e alluminio con qualità da gemma
SAPPHIR      = MaterialElement("zaffiro")
OPAL         = MaterialElement("opale")
HEMATITE     = MaterialElement("ematite")
GARNET       = MaterialElement("granato mandarino")

# Materiali commestibili
CREAM        = MaterialElement("crema")
MEAT         = MaterialElement("carne")
FISH         = MaterialElement("pesce")
MILK         = MaterialElement("latte")
CHEESE       = MaterialElement("formaggio")
BUTTER       = MaterialElement("burro")
MARGARINE    = MaterialElement("margarina")
LEGUME       = MaterialElement("legumi")
FLOUR        = MaterialElement("farina")
RICE         = MaterialElement("riso")
BREAD        = MaterialElement("pane")  # Se si vuole specificare pane grattugiato o un particolare tipo di pane senza mettere ingredienti etcetc
OIL          = MaterialElement("olio")  # Oppure si può intendere come olio per le lampade
PULP         = MaterialElement("polpa di bacca e frutti")
CEREAL       = MaterialElement("cereale")
FRUIT        = MaterialElement("frutta")  # Si intendono tutti i tipi di frutta e frutti, anche quelli secchi come noci e noccioline
VEGETABLES   = MaterialElement("verdura")
SEED         = MaterialElement("sementi")
HERB         = MaterialElement("erbe")
ROOT         = MaterialElement("radice")
CHOCOLATE    = MaterialElement("cioccolato")
PEPPER       = MaterialElement("pepe")
KERNEL       = MaterialElement("nocciolo")  # noccioli dei frutti
MUSHROOM     = MaterialElement("fungo")
CACAO        = MaterialElement("cacao")
EGG          = MaterialElement("uova")
SUGAR        = MaterialElement("zucchero")

# Materiali per pavimenti o soffitti:
TILES        = MaterialElement("tegole")

# Materiali vari
WEB          = MaterialElement("ragnatela")
SLIME        = MaterialElement("melma")
JELLY        = MaterialElement("gelatina")
WAX          = MaterialElement("cera")
RUBBER       = MaterialElement("gomma")
BALM         = MaterialElement("balsamo")
RUNE         = MaterialElement("runa")
ESSENCE      = MaterialElement("essenza")  # Essenze profumate
LEAF         = MaterialElement("fogliame")
SPONGE       = MaterialElement("spugna")
ELASTIC      = MaterialElement("elastico")
FLOWER       = MaterialElement("fiori")
DUST         = MaterialElement("polvere")
THORN        = MaterialElement("spine")
SOAP         = MaterialElement("sapone")
INCENSE      = MaterialElement("incenso")
SPORE        = MaterialElement("spore")

# Materiali anatomici
FLESH        = MaterialElement("carne")
HAIR         = MaterialElement("capelli")  # Capelli ma anche crine di cavallo et similia
GUT          = MaterialElement("budella")
HORN         = MaterialElement("corno")
BLOOD        = MaterialElement("sangue")
NAIL         = MaterialElement("unghia")  # Anche da intendersi artigli, zoccoli e tutto l'ungulame animale
TOOTH        = MaterialElement("dente")  # Anche zanne
BEAK         = MaterialElement("becco")
PRICK        = MaterialElement("aculei")
BONE         = MaterialElement("osso")

# Materiali.. immateriali
ENERGY       = MaterialElement("energia")
NOTHINGNESS  = MaterialElement("nulla")
VOID         = MaterialElement("vuoto")
AIR          = MaterialElement("aria")
LIGHT        = MaterialElement("luce")
SHADOW       = MaterialElement("ombra")  # Anche oscurità può andare bene
SPIRIT       = MaterialElement("spirito")  # materiale.. fantasma O_o
FIRE         = MaterialElement("fuoco")
MANA         = MaterialElement("mana")  # Servirà per gli oggetti fatti magicamente dai maghi costruttori, o per riparare gli oggetti magicamente, al posto del metallo ci mette il mana, se si rovina lo si può rigenerare tramite mana
UNKNOWN      = MaterialElement("sconosciuto")  # L'ho messo solo per gli oggetti che fanno da tappa buchi, tipo l'ultimo dell'accademia

# Materiali liquidi (water è definito in precedenza)
WATER        = MaterialElement("acqua")
ALCOHOL      = MaterialElement("alcol")


#-------------------------------------------------------------------------------
# Stato fisico del materiale in natura

SOFTWOOD.STATE = "SOLID"


#-------------------------------------------------------------------------------
# Durezza dei soli materiali solidi

SOFTWOOD.hardness = 25
DIAMOND.hardness = 100


#-------------------------------------------------------------------------------

finalize_enumeration(__name__)
for enum_element in elements:
    if not enum_element.state:
        print "Materiale %s senza uno state valido: %r" % (enum_element.name, enum_element.state)
    if enum_element.hardness == -1:
        print "Materiale %s senza una hardness valida: %d" % (enum_element.name, enum_element.hardness)
