P_MATERIAL
==========

NAME
----
::

     P_MATERIAL					"material"

DEFINIERT IN
------------
::

     <thing/material.h>

BESCHREIBUNG
------------
::

     Mapping mit prozentualen Anteilen von Materialien, aus denen ein Objekt 
     besteht.

BEMERKUNGEN
-----------
::

     Bei SetProp kann man zu Vereinfachung auch ein einzelnes Material oder 
     ein Array aus Materialien angeben. Die Anteile werden dann 
     gleichmaessig verteilt.

BEISPIELE
---------
::

     // 100% Eis
     SetProp(P_MATERIAL, MAT_ICE);
     // QueryProp(P_MATERIAL) -> ([MAT_ICE:100])

     // 50% Eis, 50% Misc-Holz
     SetProp(P_MATERIAL, ({ MAT_ICE, MAT_MISC_WOOD }));
     // QueryProp(P_MATERIAL) -> ([MAT_ICE:50, MAT_MISC_WOOD: 50])

     // 60% Eis, 40% Misc-Holz
     SetProp(P_MATERIAL, ([ MAT_ICE: 60, MAT_MISC_WOOD: 40 ]));

     // 100% Papier
     SetProp(P_MATERIAL, MAT_PAPER);
     // QueryProp(P_MATERIAL) -> ([MAT_PAPER:100])

     // 50% Silber, 50% Gold
     SetProp(P_MATERIAL, ({MAT_SILVER, MAT_GOLD}))
     // QueryProp(P_MATERIAL) -> ([MAT_SILVER:50,MAT_GOLD:50])

     // ein weiser Schmied, der was daraus macht:
     int i;
     string *mat, mname, mgroup;
     mat=m_indices(ob->QueryProp(P_MATERIAL));
     i=sizeof(mat);

     write("Der Schmied sagt: "+ob->Name(WER)+" besteht aus ...\n");
     while(i--) {
      // den Namen erkennen/aussprechen:
      // Materialien werden allgemein ganz schlecht erkannt (zu 5%), aber
      // alles aus Metall wird zu +100% gut erkannt ...
      mname=MATERIALDB->MaterialName(mat[i], WER,
	     ({5, ([MATERIAL_SYMMETRIC_RECOGNIZABILITY:
			({MATGROUP_METAL, 100})])}));

      // und nur Metalle analysieren ...
      if(MATERIALDB->MaterialGroup(([mat[i]:100]),MATGROUP_METAL)>=100) {
       int j;
       string *mgr;
       mgr=MATERIALDB->GetMatMembership(mat[i]);
       j=sizeof(mgr);
       mgroup=" gehoert zu ";
       while(j--) {
        mgroup+=MATERIALDB->GroupName(mgr[j]);
        if(j>0) mgroup+=", ";
       }
      } else mgroup=" kenne ich nicht";
      printf("%-12.12s: %s\n",mname, mgroup);
     }

SIEHE AUCH
----------
::

     Konzepte:	  material, materialerkennung
     Grundlegend: /sys/thing/material.h
     Methoden:    QueryMaterial(), QueryMaterialGroup(), MaterialList(),
     Listen:	  AllMaterials(), AllGroups(), Dump()
		  materialliste, materialgruppen
     Master:	  AddMaterial(), ConvMaterialList(), MaterialGroup(),
		  GroupName(), MaterialName(),
		  GetGroupMembers(), GetMatMembership()
     Sonstiges:	  P_MATERIAL_KNOWLEDGE

7. Mai 2004 Gloinson

