PRIM MATERIAL

From Second Life Wiki
Revision as of 18:29, 17 April 2008 by Strife Onizuka (talk | contribs)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Description

Constant: integer PRIM_MATERIAL = 2;
Video tutorial about material

<videoflash>6OXYO61kQCA</videoflash>

The integer constant PRIM_MATERIAL has the value 2

Sets the prim material. Material does not affect mass, but does affect friction, bounce (elasticity), and collision sound. On a wood incline of 33 degrees, the example script below gave the following results:

Table detailing maximum velocity and distance traveled down the incline.
Type Velocity (m/s) Distance (m)
Stone 0.453181 0.361655
Metal 5.475444 10.211180
Glass 6.483150 11.678304
Wood 2.154549 9.433724
Flesh 0.351543 0.188043
Plastic 4.502428 9.590952
Rubber 0.374964 0.187106

[ PRIM_MATERIAL, integer material ]

[ PRIM_MATERIAL, integer material ]
• integer material PRIM_MATERIAL_* flag

When used with llSetPrimitiveParams & llSetLinkPrimitiveParams

llGetPrimitiveParams([ PRIM_MATERIAL ]);

llGetPrimitiveParams([ PRIM_MATERIAL ]);

Returns the list [ integer material ]

• integer material PRIM_MATERIAL_* flag

Related Articles

Constants

material Flags Description Friction Restitution
PRIM_MATERIAL_STONE 0 stone 0.8 0.4
PRIM_MATERIAL_METAL 1 metal 0.3 0.4
PRIM_MATERIAL_GLASS 2 glass 0.2 0.7
PRIM_MATERIAL_WOOD 3 wood 0.6 0.5
PRIM_MATERIAL_FLESH 4 flesh 0.9 0.3
PRIM_MATERIAL_PLASTIC 5 plastic 0.4 0.7
PRIM_MATERIAL_RUBBER 6 rubber 0.9 0.9
PRIM_MATERIAL_LIGHT 7 light, DEPRECATED: Looks the same as [ PRIM_FULLBRIGHT, ALL_SIDES, TRUE ] 0.6 0.5

Functions

•  llSetPrimitiveParams
•  llSetLinkPrimitiveParams
•  llGetPrimitiveParams

Events

•  changed

Examples

<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>

Deep Notes

Search JIRA for related Issues

Signature

integer PRIM_MATERIAL = 2;