edscode.lslp 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. rotation VectorToRotation( vector V )
  2. {
  3. V = llVecNorm( V );
  4. vector UP = < 0.0, 0.0, 1.0 >;
  5. vector LEFT = llVecNorm(UP%V);
  6. V = llVecNorm(LEFT%UP); // confined to the horizontal plane
  7. return llAxes2Rot(V, LEFT, UP);
  8. }
  9. debug (string message ){
  10. list params = llGetPrimitiveParams ([PRIM_MATERIAL ]);
  11. if ( llList2Integer (params ,0)==PRIM_MATERIAL_FLESH ){
  12. llOwnerSay(llGetScriptName ()+": " +message );
  13. }
  14. }
  15. integer get_prim(string name){
  16. integer num_links=llGetNumberOfPrims();
  17. integer i;
  18. integer prim=-1;
  19. for (i=0;i<=num_links;i++){
  20. if (llGetLinkName(i)==name){
  21. prim=i;
  22. //debug("found ------------------- "+name+": "+(string)name);
  23. }else{
  24. //debug("not found ------------------- "+name+": "+(string)i);
  25. }
  26. }
  27. return prim;
  28. }
  29. string pie_slice_for_position(vector avatar){
  30. //returns name of pie_slice
  31. integer i;
  32. float closest_so_far=100.0;
  33. string closest_so_far_link="";
  34. for (i=1;i<=6;i++){
  35. integer link_num = get_prim("orb"+(string)i);
  36. list link_data=llGetLinkPrimitiveParams(link_num, [PRIM_POSITION]);
  37. vector pos = llList2Vector(link_data, 0);
  38. float dist = llVecDist(pos, avatar);
  39. if (dist<closest_so_far){
  40. closest_so_far=dist;
  41. closest_so_far_link="orb"+(string)i;
  42. }
  43. }
  44. return closest_so_far_link;
  45. }
  46. rotation getRot(key target){
  47. vector vTarget=llList2Vector(llGetObjectDetails(target,[OBJECT_POS]),0);
  48. vector vPos=llGetPos(); //object position
  49. float fDistance=llVecDist(<vTarget.x,vTarget.y,0>,<vPos.x,vPos.y,0>); // XY Distance, disregarding height differences.
  50. rotation result = llRotBetween(<1,0,0>,llVecNorm(<fDistance,0,vTarget.z - vPos.z>)) * llRotBetween(<1,0,0>,llVecNorm(<vTarget.x - vPos.x,vTarget.y - vPos.y,0>));
  51. return result;
  52. }
  53. default
  54. {
  55. state_entry()
  56. {
  57. llSensor("", NULL_KEY, AGENT, 20.0, PI);
  58. }
  59. sensor(integer num) {
  60. integer i;
  61. for (i=0; i<num; i++) {
  62. llSay(0,llDetectedName(i)+" "+pie_slice_for_position(llDetectedPos(i)));
  63. }
  64. }
  65. touch_start(integer num) {
  66. llSensor("", NULL_KEY, AGENT, 20.0, PI);
  67. }
  68. }