blob: 4ea4032947c8179a1b1ada093f58a8ff0f3c32c2 [file] [log] [blame]
Zesstra953f9972017-02-18 15:37:36 +01001
MG Mud User88f12472016-06-24 23:31:02 +02002P_MATERIAL
Zesstra953f9972017-02-18 15:37:36 +01003**********
MG Mud User88f12472016-06-24 23:31:02 +02004
MG Mud User88f12472016-06-24 23:31:02 +02005
Zesstra953f9972017-02-18 15:37:36 +01006NAME
7====
MG Mud User88f12472016-06-24 23:31:02 +02008
Zesstra953f9972017-02-18 15:37:36 +01009 P_MATERIAL "material"
MG Mud User88f12472016-06-24 23:31:02 +020010
MG Mud User88f12472016-06-24 23:31:02 +020011
Zesstra953f9972017-02-18 15:37:36 +010012DEFINIERT IN
13============
MG Mud User88f12472016-06-24 23:31:02 +020014
Zesstra953f9972017-02-18 15:37:36 +010015 <thing/material.h>
MG Mud User88f12472016-06-24 23:31:02 +020016
MG Mud User88f12472016-06-24 23:31:02 +020017
Zesstra953f9972017-02-18 15:37:36 +010018BESCHREIBUNG
19============
MG Mud User88f12472016-06-24 23:31:02 +020020
Zesstra953f9972017-02-18 15:37:36 +010021 Mapping mit prozentualen Anteilen von Materialien, aus denen ein Objekt
22 besteht.
MG Mud User88f12472016-06-24 23:31:02 +020023
MG Mud User88f12472016-06-24 23:31:02 +020024
Zesstra953f9972017-02-18 15:37:36 +010025BEMERKUNGEN
26===========
27
28 Bei SetProp kann man zu Vereinfachung auch ein einzelnes Material oder
29 ein Array aus Materialien angeben. Die Anteile werden dann
30 gleichmaessig verteilt.
31
32
33BEISPIELE
34=========
35
36 // 100% Eis
37 SetProp(P_MATERIAL, MAT_ICE);
38 // QueryProp(P_MATERIAL) -> ([MAT_ICE:100])
39
40 // 50% Eis, 50% Misc-Holz
41 SetProp(P_MATERIAL, ({ MAT_ICE, MAT_MISC_WOOD }));
42 // QueryProp(P_MATERIAL) -> ([MAT_ICE:50, MAT_MISC_WOOD: 50])
43
44 // 60% Eis, 40% Misc-Holz
45 SetProp(P_MATERIAL, ([ MAT_ICE: 60, MAT_MISC_WOOD: 40 ]));
46
47 // 100% Papier
48 SetProp(P_MATERIAL, MAT_PAPER);
49 // QueryProp(P_MATERIAL) -> ([MAT_PAPER:100])
50
51 // 50% Silber, 50% Gold
52 SetProp(P_MATERIAL, ({MAT_SILVER, MAT_GOLD}))
53 // QueryProp(P_MATERIAL) -> ([MAT_SILVER:50,MAT_GOLD:50])
54
55 // ein weiser Schmied, der was daraus macht:
56 int i;
57 string *mat, mname, mgroup;
58 mat=m_indices(ob->QueryProp(P_MATERIAL));
59 i=sizeof(mat);
60
61 write("Der Schmied sagt: "+ob->Name(WER)+" besteht aus ...\n");
62 while(i--) {
63 // den Namen erkennen/aussprechen:
64 // Materialien werden allgemein ganz schlecht erkannt (zu 5%), aber
65 // alles aus Metall wird zu +100% gut erkannt ...
66 mname=MATERIALDB->MaterialName(mat[i], WER,
67 ({5, ([MATERIAL_SYMMETRIC_RECOGNIZABILITY:
68 ({MATGROUP_METAL, 100})])}));
69
70 // und nur Metalle analysieren ...
71 if(MATERIALDB->MaterialGroup(([mat[i]:100]),MATGROUP_METAL)>=100) {
72 int j;
73 string *mgr;
74 mgr=MATERIALDB->GetMatMembership(mat[i]);
75 j=sizeof(mgr);
76 mgroup=" gehoert zu ";
77 while(j--) {
78 mgroup+=MATERIALDB->GroupName(mgr[j]);
79 if(j>0) mgroup+=", ";
MG Mud User88f12472016-06-24 23:31:02 +020080 }
Zesstra953f9972017-02-18 15:37:36 +010081 } else mgroup=" kenne ich nicht";
82 printf("%-12.12s: %s\n",mname, mgroup);
83 }
MG Mud User88f12472016-06-24 23:31:02 +020084
85
Zesstra953f9972017-02-18 15:37:36 +010086SIEHE AUCH
87==========
MG Mud User88f12472016-06-24 23:31:02 +020088
Zesstra953f9972017-02-18 15:37:36 +010089 Konzepte: material, materialerkennung
90 Grundlegend: /sys/thing/material.h
91 Methoden: QueryMaterial(), QueryMaterialGroup(), MaterialList(),
92 Listen: AllMaterials(), AllGroups(), Dump()
93 materialliste, materialgruppen
94 Master: AddMaterial(), ConvMaterialList(), MaterialGroup(),
95 GroupName(), MaterialName(),
96 GetGroupMembers(), GetMatMembership()
97 Sonstiges: P_MATERIAL_KNOWLEDGE
98
997. Mai 2004 Gloinson