PRIM MATERIAL/de
LSL Portal | Funktionen | Ereignisse | Typen | Konstanten | Datenflusskontrolle | Script Sammlung | Tutorien |
Beschreibung
Konstante: integer PRIM_MATERIAL = 2;<videoflash>6OXYO61kQCA</videoflash>
Die integer Konstante PRIM_MATERIAL hat den Wert 2
Setzt oder bezieht das Material eines Prims. Die Wahl des Materials hat keinen Effekt auf die Masse, wirkt sich allerdings auf Reibung, Elastizität und das Kollisionsgeräusch aus. Ein hölzernes Gefälle von 33° gibt für das unten angegebene Beispielscript die folgenden Resultate:
Type | Velocity (m/s) | Distance (m) |
---|---|---|
Stein | 0.453181 | 0.361655 |
Metall | 5.475444 | 10.211180 |
Glas | 6.483150 | 11.678304 |
Holz | 2.154549 | 9.433724 |
Fleisch | 0.351543 | 0.188043 |
Plastik | 4.502428 | 9.590952 |
Gummi | 0.374964 | 0.187106 |
llSetPrimitiveParams
[ PRIM_MATERIAL, integer Material ]• integer | Material | – | PRIM_MATERIAL_* flag |
Wenn mit llSetPrimitiveParams & llSetLinkPrimitiveParams genutzt
llGetPrimitiveParams
llGetPrimitiveParams([ PRIM_MATERIAL ]);Gibt die Liste [ integer Material ]
• integer | Material | – | PRIM_MATERIAL_* flag |
Ähnliche Artikel
Konstanten
|
Funktionen
• | llSetPrimitiveParams | – | Setzt die Parameter eines Prims | |
• | llSetLinkPrimitiveParams | – | Setzt die Parameter eines gelinkten Prims | |
• | llGetPrimitiveParams | – | Bezieht Parameter eines Prims |
Ereignisse
• | changed | – | Wird bei einer Änderung ausgelößt |
Beispiele
<lsl>// © 2008 by Karzita Zabaleta // Author of Scripting Your World, Wiley, October 2008.
list gMaterialTypes = [
"STONE", "METAL", "GLASS", "WOOD", "FLESH", "PLASTIC", "RUBBER"
];
vector gHomePosition; rotation gHomeRotation; integer gWaitCount = 0; float gMaxVelMag; integer gPrimMaterial;
moveTo(vector origin, vector destination) {
float dist = llVecDist(origin, destination); integer passes = llCeil( llLog(dist/10.0) / llLog(2.0) ); integer i; list params = [PRIM_POSITION, destination]; for (i=0; i<passes; i++) { params = (params=[]) + params + params; } // actually move the prim, now llSetPrimitiveParams(params);
}
returnHome() {
llSetStatus(STATUS_PHYSICS, FALSE); moveTo(llGetPos(),gHomePosition); llSetTimerEvent(0); llSetRot(gHomeRotation);
}
calculate_velocity() {
float velMag = llVecMag(llGetVel()); if (velMag > gMaxVelMag) { gMaxVelMag = velMag; }
}
default {
state_entry() { gHomePosition = llGetPos(); gHomeRotation = llGetRot(); } on_rez(integer _n) { llResetScript(); } touch_start(integer n) { gMaxVelMag = 0; llSetPrimitiveParams([PRIM_MATERIAL, gPrimMaterial]); llSetStatus(STATUS_PHYSICS,TRUE); llSetTimerEvent(0.1); llResetTime(); gWaitCount=0; gPrimMaterial++; if (gPrimMaterial == 7 ) gPrimMaterial = 0; } timer() { calculate_velocity(); gWaitCount++; if (gWaitCount > 100) { // 10 seconds string type = llList2String( gMaterialTypes, gPrimMaterial-1 ); llOwnerSay(type+" reached maximum velocity of "+(string)gMaxVelMag+ " and traveled "+(string)llVecDist(llGetPos(), gHomePosition)+" meters."); returnHome(); } }
}</lsl>