ソラマメブログ

2008年07月15日

動作をON-OFFさせる、 切り替えるためのLSL

動作をON-OFFさせる、 切り替えるためのLSL  

ただそれだけです^^ 

★パーテイクルの ON-OFF、 
パーテイクルは、
llParticleSystem( [] );//パーテイクルの停止できます。

★スクリプトの動作は、名前を指定することで、 ON-OFFを指定できます この時のOFFは、停止していますのでなにも動作しません、負荷が最小になると思います。
//同じコンテンツにあるものに 限られますので、 子プリムで動作せるためにはリンクメッセージを受信するスクリプトは、切り替えのためのLSLとして動作していないといけません。
//親プリムから、直接、子プリムの特定なLSLを指定は困難です。(リモートロードなどで工夫できます)


//親プリムから、直接、子プリムの特定・リンクナンバーで設定できる 関数も多くありますので利用できます。色・透明度など
しかし、子プリムの特定・リンクナンバーで現在の状態を取得することは、困難です。 知ることは難しいです。



★リンクメセージを、発信する動作は、1つ準備してください、
必要に応じて 不要な部分を削除してください。 

★リンクメッセージで各部パーツの ON-OFF、するときには、
子プリム側では、受信すること、 変化することを組入れておけば良いです。

リンクメッセージは 文字を利用すること、数値を利用すること、 が多い方法です、 どちらか1つで動作は十分できます。

参考LSL   単独では、単にパーテークルが動作することが実験できます
//スクリプトの名前を指定して、 ON-OFFを指定できます
//通信のパラメータとして使用するもの どちらかの判定で利用できます。 数値or文字列
//タッチしたら 切り替え

// 必要のない部分を削除して使用してください //
// link_message では送信をする側と 受信する側を確認します。
// llMessageLinked(LINK_ALL_OTHERS,SET_ON,TURN_ON,NULL_KEY);//これは送信をする時に必要です。

//パラメータの変更・リストのよる総合・変更 必要な要素・項目だけ追加すれば実施できます
//llSetLinkPrimitiveParams( link_num, rules );
//http://rpgstats.com/wiki/index.php?title=LlSetPrimitiveParams
//http://wiki.secondlife.com/wiki/LSL_Portal/ja
//http://wiki.secondlife.com/wiki/LlSetPrimitiveParams/ja
// プリムの形状などすべてのパラメータが準備されています
//rules=[];
//rules= [ PRIM_POSITION, POS ];
//rules+=[ PRIM_ROTATION, ROT ];

//スクリプトの動作は、名前を指定して、 ON-OFFを指定できます
//同じコンテンツにあるものに 限られます
// Stops 'ScriptName' (in the prim's inventory)
//llSetScriptState("ScriptName", FALSE);
//llSetScriptState("ScriptName", TRUE);

//通信のパラメータとして使用するもの どちらかの判定で利用できます。 数値or文字列
integer SET_ON=100;
integer SET_OFF=101;
string TURN_ON="TURN_ON";
string TURN_OFF="TURN_OFF";

integer link_num=3;
list rules=[];
integer flag;
particle_on(){
    llParticleSystem(  [
        PSYS_SRC_TEXTURE, llGetInventoryName(INVENTORY_TEXTURE, 0),
        PSYS_PART_START_SCALE, <0.3,0.5, 0>,  PSYS_PART_END_SCALE, <0.4,1.2, 0>,
        PSYS_PART_START_COLOR, <1,1,0>,       PSYS_PART_END_COLOR, <1,1,1>,
        PSYS_PART_START_ALPHA, 0.5,            PSYS_PART_END_ALPHA, 0.2,
        PSYS_SRC_BURST_PART_COUNT, 1,
        PSYS_SRC_BURST_RATE,  0.3,
        PSYS_PART_MAX_AGE, 5.0,
        PSYS_SRC_MAX_AGE, 0.0,

        PSYS_SRC_PATTERN, 8, // 1=DROP, 2=EXPLODE, 4=ANGLE, 8=ANGLE_CONE,
        PSYS_SRC_ACCEL, <0.0,0.0,0.0>,

        PSYS_SRC_BURST_RADIUS, 0.3,
        PSYS_SRC_BURST_SPEED_MIN, 0.0,   PSYS_SRC_BURST_SPEED_MAX, 0.05,

        PSYS_SRC_ANGLE_BEGIN,  0*DEG_TO_RAD,        PSYS_SRC_ANGLE_END, 0*DEG_TO_RAD,
        PSYS_SRC_OMEGA, <0,0,0>,

        // PSYS_SRC_TARGET_KEY,      llGetLinkKey(llGetLinkNum() + 1),

        PSYS_PART_FLAGS, ( 0
            | PSYS_PART_INTERP_COLOR_MASK
        | PSYS_PART_INTERP_SCALE_MASK
        | PSYS_PART_EMISSIVE_MASK
        | PSYS_PART_FOLLOW_VELOCITY_MASK
        // | PSYS_PART_WIND_MASK
        // | PSYS_PART_BOUNCE_MASK
        // | PSYS_PART_FOLLOW_SRC_MASK
        // | PSYS_PART_TARGET_POS_MASK
        // | PSYS_PART_TARGET_LINEAR_MASK
        ) ] );
}

turn_on(){
    //通信のパラメータとして使用するもの どちらかの判定で利用できます
    llMessageLinked(LINK_ALL_OTHERS,SET_ON,TURN_ON,NULL_KEY);
    llSetScriptState("ScriptName", TRUE);//スクリプトの名前を指定して、ON

    particle_on();//パーテイクルの起動

    //プリムのパラメータの個別設定
    llSetAlpha(0.3,ALL_SIDES);
    llSetLinkAlpha(2,0.3,ALL_SIDES);
    llSetColor(<1,1,1>,ALL_SIDES);
    llSetLinkColor(2,<1,1,1>,ALL_SIDES);
    llSetPrimitiveParams([25, ALL_SIDES, 0.02]);
    llSetLinkPrimitiveParams(2,[25, ALL_SIDES, 0.03]);
    llSetText("",<1,1,0>,1.0);//フロート文字表示
}
turn_off(){
    //通信のパラメータとして使用するもの どちらかの判定で利用できます
    llMessageLinked(LINK_ALL_OTHERS,SET_OFF,TURN_OFF,NULL_KEY);
    llSetScriptState("ScriptName", FALSE);//スクリプトの名前を指定して、OFF

    llParticleSystem( [] );//パーテイクルの停止

    //プリムのパラメータの個別設定
    llSetAlpha(1.0,ALL_SIDES);
    llSetLinkAlpha(2,0.5,ALL_SIDES);
    llSetColor(<0,0,1>,ALL_SIDES);
    llSetLinkColor(2,<0,0,1>,ALL_SIDES);
    llSetPrimitiveParams([25, ALL_SIDES, 0.0]);
    llSetLinkPrimitiveParams(2,[25, ALL_SIDES, 0.0]);
    llSetText("OFF-LINE",<1,0,0>,1.0);//フロート文字表示
}


default {
    state_entry() {
        turn_off();
        flag=0;
    }
    //タッチしたら 切り替え
    touch_start(integer total_number)
    {
        flag++;
        if (flag==1)
        {
            flag=-1;
            turn_on();
        }
        else
        {
            turn_off();
        }
    }
    //通信のパラメータとして使用するもの どちらかの判定で利用できます。 数値or文字列
    link_message(integer sender, integer num, string message, key id)
    {
        if(num == SET_ON ||message==TURN_ON)
        {
            turn_on();
            flag=1;
        }
        else if(num == SET_OFF ||message==TURN_OFF)
        {
            turn_off();
            flag=0;
        }
    }
}

タグ :LSL

Posted by しんいち at 15:50│Comments(0)動作をON-OFFさせる
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。