Nitaro
2007年04月29日 18:01
//************************************
// Particle Settings
//************************************
//0---------
integer flags;
integer fColor = TRUE;
integer fScale = TRUE;
integer fBounce = FALSE;
integer fWind = FALSE;
integer fFollowSrc = FALSE;
integer fVelocity = FALSE;
//integer fTarget = True;
integer fLinear = FALSE;
integer fEmissive = TRUE;
//1---------
vector pColorStart = <1.0,1.0,1.0>;
float pAlphaStart = 1.0;
vector pColorEnd = <.2,.2,1.0>;
float pAlphaEnd = .0;
vector pSizeStart = <.1,.1,.0>;
vector pSizeEnd = <.1,.2,.0>;
float pMaxAge = 2.0;
vector sAccel = <.0,.0,.15>;
integer sPattern = 2;
//1-Drop,2-Explode,4-Angle,8-Angle_Cone,10-Angle-Cone-Empty
//float sAngleInner;
//float sAngleOuter;
string sTexture = "";
float sBurstRate = .1;
//14 --- none? ---
integer sBurstCount = 10;
float sBurstRadius = .0;
float sSpeedMin = .0;
float sSpeedMax = .05;
float sMaxAge = .0;
key sTargetKey = "";
vector sOMEGA = <.0,.0,.0>;
float sAngleBegin = PI;
float sAngleEnd = PI;
//************************************
// HITODAMA settings
//************************************
float baseRange = 20; //最大移動範囲。単位(cm)
float pos1; // llFrand(baseRange) * 0.01
float pos2; // llFrand(baseRange) * -0.01
vector foo; // basePosition
float TimerRate = 30.0;
float posRate = 5.0;
float baseRate = 5.0;
//************************************
// sub callParticle()
//************************************
callParticle() {
flags = 0;
if (fColor) flags = flags | PSYS_PART_INTERP_COLOR_MASK;
if (fScale) flags = flags | PSYS_PART_INTERP_SCALE_MASK;
if (fBounce) flags = flags | PSYS_PART_BOUNCE_MASK;
if (fWind) flags = flags | PSYS_PART_WIND_MASK;
if (fFollowSrc) flags = flags | PSYS_PART_FOLLOW_SRC_MASK;
if (fVelocity) flags = flags | PSYS_PART_FOLLOW_VELOCITY_MASK;
if (sTargetKey != "") flags = flags | PSYS_PART_TARGET_POS_MASK;
if (fLinear) flags = flags | PSYS_PART_TARGET_LINEAR_MASK;
if (fEmissive) flags = flags | PSYS_PART_EMISSIVE_MASK;
if (sTargetKey == "owner") sTargetKey = llGetOwner();
if (sTargetKey == "self") sTargetKey = llGetKey();
llParticleSystem([
0, flags, 1, pColorStart,
2, pAlphaStart, 3, pColorEnd,
4, pAlphaEnd, 5, pSizeStart,
6, pSizeEnd, 7, pMaxAge,
8, sAccel, 9, sPattern,
//10, sAngleInner,11, sAngleOuter,
12, sTexture, 13, sBurstRate,
//14
15, sBurstCount,16, sBurstRadius,
17, sSpeedMin, 18, sSpeedMax,
19, sMaxAge, 20,sTargetKey,
21, sOMEGA, 22, sAngleBegin,
23, sAngleEnd
]);
}
//************************************
// Particle System Main
//************************************
default{
state_entry(){
llSetText("HITODAMA!!(touch)",<1,1,1>,1);
llParticleSystem([]);
llSetTimerEvent(0);
llSetAlpha(1.0,ALL_SIDES);
}
touch(integer touched){
state move;
}
on_rez(integer start_param){
llResetScript();
}
}
state move{
state_entry(){
foo = llGetPos();
callParticle();
llSetText("",<1,1,1>,1);
llSetAlpha(.0,ALL_SIDES);
llSetTimerEvent(TimerRate);
}
timer(){
pos1 = llFrand(baseRange) * 0.01;
pos2 = llFrand(baseRange) * -0.01;
// pos1 = 0.1;
// pos2 = -0.1;
llSetPos(llGetPos() + <pos1,pos2,pos2>);
llSleep(baseRate + llFrand(posRate));
llSetPos(llGetPos() + <pos2,pos2,pos1>);
llSleep(baseRate + llFrand(posRate));
llSetPos(llGetPos() + <pos2,pos1,pos2>);
llSleep(baseRate + llFrand(posRate));
llSetPos(foo);
}
touch(integer touched) {
state default;
}
}