
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
