P_MATERIAL ========== NAME ---- :: P_MATERIAL "material" DEFINIERT IN ------------ :: 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