�ソスu�ソスI�ソス[�ソス�ソス�ソスf�ソスf�ソスv
�ソスd�ソス�ソス�ソス�ソス�ソス�ソス�ソス}�ソス�ソス�ソス�ソス�ソス�ソス�ソス�ソス�ソス�ソス�ソスヒ宏�ソス�ソス�ソス�ソス�ソス�ソスヤ滂ソス�ソス�ソスL�ソス�ソス
�ソス�ソス�ソス�ソス�ソスH�ソスネ托ソスw�ソスR�ソス�ソス�ソス�ソス�ソスf�ソスB�ソスA�ソスf�ソスU�ソスC�ソス�ソス�ソス�ソス�ソス�ソス�ソス�ソス
IMAGINE�ソス@�ソスv�ソス�ソス�ソスO�ソス�ソス�ソス~�ソス�ソス�ソスO�ソス�ソス�ソスS�ソス�ソス4�ソスl�ソス�ソス�ソス�ソス�ソス�ソス�ソス�ソスu�ソスI�ソス[�ソス�ソス�ソスf�ソスf�ソスv�ソスニゑソス�ソス�ソス�ソス�ソスihttp://gryng.blog87.fc2.com/blog-entry-15.html
http://456.im/wp/download/bbosc/
�ソスS�ソスJ�ソス�ソス�ソスノゑソス�ソス�ソス�ソス�ソスフ重�ソス�ソス0-10000�ソスノス�ソスP�ソス[�ソス�ソス�ソス�ソス�ソスト托ソス�ソスM�ソス�ソス�ソストゑソス�ソス�ソスワゑソス�ソスB
�ソスE�ソス�ソスA�ソスE�ソス�ソス�ソスA�ソス�ソス�ソス�ソスA�ソス�ソス�ソス�ソス�ソスフ4�ソスJ�ソス�ソス�ソスフ値�ソス�ソス�ソス�ソス�ソス�ソス�ソスワゑソス�ソス�ソス�ソスA�ソス�ソス�ソスフままでは使�ソス�ソス�ソスノゑソス�ソス�ソス�ソスフゑソスX�ソス�ソスY�ソスフ2�ソスl�ソスノ変奇ソス�ソス�ソス�ソスワゑソス�ソスB�ソスi�ソス�ソス�ソスフス�ソス�ソス�ソスC�ソスh�ソスj
�ソスy�ソスI�ソス[�ソス�ソス�ソスフ描�ソス�ソスz
�ソスl�ソスフ輪郭�ソスノゑソス�ソス�ソス�ソスト鯉ソス�ソス�ソス�ソスo�ソス�ソス�ソスd�ソスS�ソスフ擾ソス�ソス�ソス�ソス�ソス�ソス�ソスParticle�ソスフ色�ソス�ソス�ソス�ソス�ソス゚て、�ソスl�ソスフ趣ソス�ソス�ソスノ費ソスホゑソス�ソス�ソス�ソスフ難ソスツゑソスg�ソスン搾ソス�ソス�せ�ソストオ�ソス[�ソス�ソス�ソスフ描�ソス�ソスニゑソス�ソストゑソス�ソスワゑソス�ソスB
�ソスy�ソスI�ソス[�ソス�ソス�ソスフ診�ソスf�ソスz�ソスl�ソスフ重�ソスS�ソスヘ擾ソスノ難ソス�ソス�ソス�ソストゑソス�ソス�ソスフで、�ソス�ソス�ソスフ人�ソスフ重�ソスS�ソスフ標�ソス�ソス�ソス�ソス�ソス�ソス�ソス゚まゑソス�ソスB
�ソス�ソス�ソスb�ソスフ費ソス�ソス闔橸ソスヤゑソスンゑソス�ソスト、�ソスd�ソスS�ソスフ位置�ソス�足ゑソス�ソスト包ソス�ソスマゑソス�ソスo�ソス�ソス�ソスワゑソス�ソス�ソス�ソスB
�ソス�ソス�ソスマの位置�ソス�ソス�ソスO�ソスノゑソス�ソス驍ゥ�ソス�ソス�ソスノゑソス�ソス驍ゥ�ソスA�ソスE�ソスノゑソス�ソス驍ゥ�ソス�ソス�ソスノゑソス�ソス驍ゥ�ソスニゑソス�ソス�ソス�ソス�ソス�ソス�ソス�ソス�ソス�ソスナゑソス�ソス�ソス�ソスワゑソス�ソスノ色�ソス�ソス�ソス�ソス�ソス゚、X�ソス�ソスY�ソスフ奇ソス�ソス�ソス�ソスネどで費ソス�ソス�ソス�ソスノ色�ソス�ソスマゑソス�ソストまゑソス�ソスB�ソス�ソス�ソスニ再鯉ソス�ソス�ソス�ソスフゑソス�ソス�ソスI�ソス[�ソス�ソス�ソスf�ソスf�ソスフ趣ソス�ソス�ソス
�ソスo�ソス�ソス�ソス�ソス�ソスXWii�ソス{�ソス[�ソスh�ソス�ソス�ソス逑セ�ソス�ソス�ソス�ソス�ソス�ソスヘゑソス�ソスニ繊�ソスラなので、�ソス�ソス�ソスマゑソス�ソスo�ソス�ソス�ソス�ソス�ソスヤゑソスンゑソス�ソス驍ア�ソスニで再鯉ソス�ソス�ソス�ソス�ソス�ソス�ソス�ソス゚まゑソス�ソス�ソス�ソスB
�ソス�ソス�ソス�ソス�ソスフオ�ソス[�ソス�ソス�ソス�ソス�ソス�ソス�ソストゑソス�ソス�ソスニゑソス�ソスノ、�ソスフ重�ソス�ソス�ソスヌゑソス�ソス轤ゥ�ソスノゑソス�ソス�ソス�ソスツづゑソス�ソス�ソスニ色�ソス�ソス�ソス�ソス�ソス�じ�ソス�ソスマ会ソス�ソス�ソス�ソスワゑソス�ソスB�ソス�ソス�ソス�ソス�ソス�ソス�ソス�ソス�ソスナまゑソス�ソスB�ソスヘゑソス�ソス�ソス�ソス゚ゑソスニオ�ソス[�ソス�ソス�ソス�ソス�ソス蛯ォ�ソス�ソス�ソスネゑソス�ソストゑソスンゑソス�ソス�ソス�ソスナ楽�ソス�ソス�ソス�ソス�ソスI
�ソス�ソス�ソス�ソス�ソスヨゑソスネ具ソス�ソス�ソス�ソス�ソス�ソス�ソス�ソス�ソス�ソストゑソス�ソスA�ソスu�ソスI�ソス[�ソス�ソス�ソスv�ソスニゑソス�ソス�ソス�ソスB�ソス�ソス�ソスネ鯉ソス�ソスt�ソス�ソス�ソス�差�ソス�ソス�ソスz�ソス�ソス�ソス�ソス�ソストゑソス�ソス�ソスワゑソス�ソスB
�ソスy�ソス�ソスJ�ソス�ソス�ソス�ソス�ソスニゑソス�ソス�ソスz�ソス�ソスヤ具ソスJ�ソス�ソス�ソス�ソス�ソスニゑソス�ソス�が�ソスA�ソスJ�ソス�ソス�ソス�ソス�ソスナ人�ソスフ輪郭�ソス�ソス�ソスニる部�ソス�ソス�ソス�ソス�ソス�ソス�ソス�ソス�ソスフで、�ソス{�ソスフ趣ソス|�ソスニは外�ソス�ソストゑソス�ソスワゑソス�ソスワゑソス�ソスi�ソスホ)Wii�ソス{�ソス[�ソスh�ソス�ソス�ソス�ソスナの具ソスJ�ソスヘ色�ソス�ソス�ソス�ソス�ソス゚るた�ソス゚のア�ソス�ソス�ソスS�ソス�ソス�ソスY�ソス�ソス�ソスナゑソス�ソスB�ソス�ソス�ソスマゑソス�ソス�ソス�ソス謔、�ソスノゑソス�ソス驍ア�ソスニで簡単�ソスノク�ソス�ソス�ソスA�ソスナゑソス�ソス�ソス�ソス�ソス�ソス�ソス�ソス�ソスフでゑソス�ソス�ソス�ソスc�ソスB
�ソスy�ソス�ソス�ソスp�ソス�ソス�ソス�ソス�ソス�ソス�ソスC�ソスu�ソス�ソス�ソス�ソス�ソスzoscP5 BBOSC�ソスニの連�ソスgJMyron�ソスJ�ソス�ソス�ソス�ソス�ソスフ暦ソス�ソスp�ソスニ擾ソス�ソス�ソス�ソスw�ソスi�ソス�ソス�ソス�ソス�ソス@�ソスナ人�ソスニ背�ソスi�ソス�分ゑソス�ソス�ソスblobDetection�ソスl�ソスフ輪郭�ソス�ソス�ソスニるた�ソス゚に使�ソスp
�ソスyyoutube�ソスzhttp://www.youtube.com/watch?v=3pL3ObUwoA8
import oscP5.*;
/* �ソスI�ソスu�ソスW�ソスF�ソスN�ソスg�ソスフ読み搾ソス�ソス�ソス
------------------------------*/
OscP5 oscP5; //OscP5�ソスI�ソスu�ソスW�ソスF�ソスN�ソスg�ソス�ソス�ソスQ�ソスニゑソス�ソス�ソスマ撰ソス�ソスフ宣言
/* �ソス�ソス�ソス�ソス�ソスニ使�ソス�ソス�ソストゑソス�ソス�ソス�ソスマ撰ソス�ソス�ソスン抵ソス
------------------------------*/
//WiiFit
/*�ソスd�ソスS�ソスフ位置�ソス�判別ゑソス�ソス驍ス�ソス゚の趣ソス�ソス�ソス(�ソスt�ソス�ソス�ソス[�ソス�ソス)�ソス�ソス�ソス�ソス�ソス驍ス�ソス゚ゑソスint�ソス^�ソスフ変撰ソスt�ソス�ソス骭セ*/
int t = 100;
/*�ソスd�ソスS�ソスフ位置�ソス�ソス�ソス謫セ�ソス�ソス�ソス驍ス�ソス゚ゑソス閾値�ソス�ソス�ソス�ソス�ソス驍ス�ソス゚ゑソスint�ソス^�ソスフ変撰ソスthreshold�ソス�ソス骭セ*/
int threshold = 4000;
/*閾値�ソス�超ゑソス�ソス�ソス�ソスロのカ�ソスE�ソス�ソス�ソスg�ソス�ソス�ソス�ソス�ソス驍ス�ソス゚ゑソスint�ソス^�ソスフ配�ソス�ソスc�ソス�ソス骭セ*/
int [] c;
int [] balanceData;
float wbx, wby = 0.0;
int ac = 100;
int aspeed = 10;
/*--------------------------------------------------*
setup (�ソスナ擾ソス�ソスノ1�ソス�だゑソス�ソス�ソス�ソスs�ソス�ソス�ソス�ソス�ソス)
*--------------------------------------------------*/
void setup(){
//�ソス�ソス�ソスネ擾ソス�ソスハゑソスフ奇ソス{�ソスン抵ソス
background(0); //�ソスw�ソスi�ソスヘ搾ソス
frameRate(30);
size(320, 240);
smooth();
//WiiFit
oscP5 = new OscP5(this, 9000);�ソス@//OSC�ソスf�ソス[�ソス^�ソス�ソス�ソス�け趣ソス�ソス|�ソス[�ソスg�ソスヤ搾ソス�ソス�ソスン定す�ソス�ソス
c = new int[4];
balanceData = new int[4];�ソス@//WiiFit�ソス�ソス�ソス�ソスフデ�ソス[�ソス^�ソス�ソス�ソスS�ソスモ擾ソス�ソス�ソス�ソスi�ソス[�ソス�ソス�ソス�ソス
}
/*--------------------------------------------------*
draw
*--------------------------------------------------*/
void draw(){
�ソスi�ソス�ソス�ソス�ソス�ソスj
}
/*--------------------------------------------------*
WiiFit
*--------------------------------------------------*/
/* osc�ソス�ソス�ソスb�ソスZ�ソス[�ソスW�ソス�ソス�ソス�ソスM�ソス�ソス�ソス�ソス*/
void oscEvent(OscMessage theOscMessage){
//Wii balance board�ソスフ値�ソス�ソス�ソス�ソス�ソス驍ス�ソス゚ゑソスint�ソス^�ソスフ配�ソス�ソスbalanceData�ソス�ソス骭セ
//�ソスz�ソス�ソスフ番搾ソス�ソスニ上下�ソス�ソス�ソスE�ソスフセ�ソス�ソス�ソスT�ソス[�ソスフ対会ソス�ソスヨ係�ソスヘ、
//0:�ソスE�ソス�ソスA1:�ソスE�ソス�ソス�ソスA2:�ソス�ソス�ソス�ソスA3:�ソス�ソス�ソス�ソス
if(theOscMessage.checkAddrPattern("/data")==true){
if(theOscMessage.checkTypetag("iiii")) {
for(int i =0;i <4;i++){
/*Osc�ソスフ��ソス�ソスb�ソスZ�ソス[�ソスW�ソス�ソスbalanceData�ソスノ格�ソス[�ソス�ソス�ソス�ソス*/
balanceData[i] = theOscMessage.get(i).intValue();
}
}
}
}
/*--------------------------------------------------*
draw
*--------------------------------------------------*/
void draw(){
commonAction();
switch(step){
case 0:
checkAura();
break;
case 1:
drawAura();
break;
case 2:
standby();
break;
}
}
�ソスi�ソス�ソス�ソス�ソス�ソスj
/*--------------------------------------------------*
check aura
*--------------------------------------------------*/
void checkAura(){
//�ソスメゑソス�ソス�け会ソスハ表�ソス�ソス
image(checkImg, 0, 0);
//200�ソスt�ソス�ソス�ソス[�ソス�ソス�ソスフ間包ソス�ソスマ値�ソス�ソス�ソスo�ソス�ソス�ソス�ソス�ソス゚に体重�ソス�足ゑソス
if( checkCnt < 200 ){
checkCnt ++;
perSum[0] += balanceData[0];
perSum[1] += balanceData[1];
perSum[2] += balanceData[2];
perSum[3] += balanceData[3];
}
if( checkCnt == 200 ){
perXY();
colorSet();
step = 1;
checkCnt = 0;
//�ソスp�ソス[�ソスe�ソスB�ソスN�ソス�ソス
for(int i=0;i<pNum;i++){
p[i].reset(i);
}
}
//�ソスメゑソス�ソス�けフ�ソス�ソス�ソスb�ソスO
if( balanceData[0]<150 && balanceData[1]<150 && balanceData[2]<150 && \
balanceData[3]<150 ){
checkCnt = 0;
step = 2;
}
}
�ソスi�ソス�ソス�ソス�ソス�ソスj
void colorSet(){
println(perSum);
if( perSum[0]+perSum[2] > perSum[1]+perSum[3] ){
percc[0] = 225 + (30 * (perSum[0]+perSum[2])/2 / \
(perSum[0]+perSum[1]+perSum[2]+perSum[3]));
if( perSum[0]+perSum[1] > perSum[2]+perSum[3] ){
percc[1] = 150 * perSum[3] / (perSum[0]+perSum[1]+perSum[2]);
percc[2] = 255 * perSum[1] / (perSum[0]+perSum[3]+perSum[2]);
} else {
percc[1] = 255 * perSum[3] / (perSum[0]+perSum[1]+perSum[2]);
percc[2] = 150 * perSum[1] / (perSum[0]+perSum[3]+perSum[2]);
}
} else if( perSum[3] > perSum[1] ){
percc[1] = 225 + (30 * perSum[3] / \
(perSum[0]+perSum[1]+perSum[2]+perSum[3]));
if( (perSum[0]+perSum[2])/2 > perSum[1] ){
percc[0] = 255 * (perSum[0]+perSum[2])/2 / \
((perSum[0]+perSum[2])/2+perSum[1]+perSum[3]);
percc[2] = 150 * perSum[1] / (perSum[0]+perSum[3]+perSum[2]);
} else {
percc[0] = 150 * (perSum[0]+perSum[2])/2 / \
((perSum[0]+perSum[2])/2+perSum[1]+perSum[3]);
percc[2] = 255 * perSum[1] / (perSum[0]+perSum[3]+perSum[2]);
}
} else {
percc[2] = 225 + (30 * perSum[1] / \
(perSum[0]+perSum[1]+perSum[2]+perSum[3]));
if( (perSum[0]+perSum[2])/2 > perSum[3] ){
percc[0] = 255 * (perSum[0]+perSum[2])/2 / \
((perSum[0]+perSum[2])/2+perSum[1]+perSum[3]);
percc[1] = 150 * perSum[3] / (perSum[0]+perSum[1]+perSum[2]);
} else {
percc[0] = 150 * (perSum[0]+perSum[2])/2 / \
((perSum[0]+perSum[2])/2+perSum[1]+perSum[3]);
percc[1] = 255 * perSum[3] / (perSum[0]+perSum[1]+perSum[2]);
}
}
cc[0] = percc[0];
cc[1] = percc[1];
cc[2] = percc[2];
println("color:");
println(cc);
}
VR�ソスE�ソス�ソス�ソス^�ソスo�ソス[�ソスX�ソスニゑソス�ソス�ソス�ソスホ「SecondLife�ソスv�ソスナゑソス�ソス�ソス�ソスAGlovePIE�ソス�ソス�ソスg�ソス�ソス�ソスホ、WiiRemote�ソスナ托ソス�ソス�す�ソス驍ア�ソスニゑソス�ソスツ能�ソスノなゑソスワゑソス�ソスB�ソスI�ソス�ソス�ソスW�ソスi�ソス�ソス�ソスヘ「Google Earth�ソスv�ソス�ソス�ソスx�ソス[�ソスX�ソスノ、�ソス�ソスs�ソス�ソスw�ソス�ソス�ソス�ソス�ソスフ渡邉英�ソス�ソス�ソス謳カ�ソス�ソス�ソス�成�ソス�ソス�ソストゑソス�ソス�ソスワゑソス�ソス�ソス�ソスフで紹介し�ソスワゑソス�ソスB
//Calibrate your Wiimote!
//Place the Wiimote face up on a flat surface. Change these values until \
the
//debug line next to the run button shows zero for each axis.
var.xtrim = -7
var.ytrim = -20
var.ztrim = -4
//Set your Wiimote LEDs to your liking. Binary value, 1-15
Wiimote.Leds = 1
//Key Map
Mouse.LeftButton = Wiimote.A
Keyboard.ESC = Wiimote.Home
Keyboard.ESC = Wiimote.One
Keyboard.Up = Wiimote.Up
Keyboard.Down = Wiimote.Down
Keyboard.Left = Wiimote.Left
Keyboard.Right = Wiimote.Right
//Keyboard.F = Wiimote.Home
Keyboard.E = Wiimote.Plus
Keyboard.C = Wiimote.Minus
//Forward, Back, Up and Down
if Wiimote.B & Wiimote.Up Then
KeyBoard.Up = False
Keyboard.E = True
Wait 600ms
Keyboard.E = False
endif
if Wiimote.B & Wiimote.Down Then
KeyBoard.Down = False
Keyboard.C = True
Wait 600ms
Keyboard.C = False
endif
var.accx = Wiimote.RawForceX + var.xtrim
var.accy = Wiimote.RawForceY + var.ytrim
var.accz = Wiimote.RawForceZ + var.ztrim
// My best IR
Mouse Script, with 5DOF Tracking
// By Carl Kenner
// Change these values:
var.SensorBarSeparation = 7.5 inches // distance between middles of
two sensor bar dots
var.NoYawAllowed = true // Calculates X if no yaw is allowed,
otherwise calculates Yaw but not X
var.IRMulX = 1.2
var.IRMulY = 1.2
var.IROffsetX = 0 // add to mouse.x
var.IROffsetY = 0 // add to mouse.y
var.IRLeftButton = Wiimote.A
var.IRRightButton = Wiimote.B
// Compensate for roll
var.c = cos(Smooth(wiimote.roll, 10))
var.s = sin(Smooth(wiimote.roll, 10))
if wiimote.dot1vis then
var.dot1x = var.c*(511.5-wiimote.dot1x)/511.5 -
var.s*(wiimote.dot1y-383.5)/511.5
var.dot1y = var.s*(511.5-wiimote.dot1x)/511.5 +
var.c*(wiimote.dot1y-383.5)/511.5
end if
if wiimote.dot2vis then
var.dot2x = var.c*(511.5-wiimote.dot2x)/511.5 -
var.s*(wiimote.dot2y-383.5)/511.5
var.dot2y = var.s*(511.5-wiimote.dot2x)/511.5 +
var.c*(wiimote.dot2y-383.5)/511.5
end if
// if both dots are visible check which is which and how far apart
if wiimote.dot1vis and wiimote.dot2vis then
if var.dot1x <= var.dot2x then
var.leftdot = 1
var.dotdeltay = var.dot2y - var.dot1y
else
var.leftdot = 2
var.dotdeltay = var.dot1y - var.dot2y
end if
var.dotdeltax = abs(var.dot1x-var.dot2x)
var.DotSep = hypot(var.dotdeltax, var.dotdeltay) * 511.5
var.IRDistance = var.SensorBarSeparation * 1320 / var.DotSep
end if
// sort out the position of the left and right dots
if var.leftdot = 1 then
if wiimote.dot1vis and wiimote.dot2vis then
var.LeftDotX = var.dot1x
var.LeftDotY = var.dot1y
var.LeftDotVis = true
var.RightDotX = var.dot2x
var.RightDotY = var.dot2y
var.RightDotVis = true
else if wiimote.dot1vis then
if hypot(var.leftdotx-var.dot1x,var.leftdoty-var.dot1y) <=
hypot(var.rightdotx-var.dot1x,var.rightdoty-var.dot1y) then
// is the real dot 1
var.LeftDotX = var.dot1x
var.LeftDotY = var.dot1y
var.RightDotX = var.dot1x + var.dotdeltax
var.RightDotY = var.dot1y + var.dotdeltay
var.LeftDotVis = true
var.RightDotVis = false
else
// was originally dot 2, but now called dot 1.
var.leftdot = 2 // this dot (1) is actually the right dot
var.LeftDotX = var.dot1x - var.dotdeltax
var.LeftDotY = var.dot1y - var.dotdeltay
var.RightDotX = var.dot1x
var.RightDotY = var.dot1y
var.RightDotVis = true
var.LeftDotVis = false
end if
else if wiimote.dot2vis then
var.LeftDotX = var.dot2x - var.dotdeltax
var.LeftDotY = var.dot2y - var.dotdeltay
var.RightDotX = var.dot2x
var.RightDotY = var.dot2y
var.RightDotVis = true
var.LeftDotVis = false
end if
else if var.leftdot = 2 then
if wiimote.dot1vis and wiimote.dot2vis then
var.LeftDotX = var.dot2x
var.LeftDotY = var.dot2y
var.LeftDotVis = true
var.RightDotX = var.dot1x
var.RightDotY = var.dot1y
var.RightDotVis = true
else if wiimote.dot1vis then
if hypot(var.leftdotx-var.dot1x,var.leftdoty-var.dot1y) <=
hypot(var.rightdotx-var.dot1x,var.rightdoty-var.dot1y) then
var.leftdot = 1 // dot 1 is now the left dot
var.LeftDotX = var.dot1x
var.LeftDotY = var.dot1y
var.RightDotX = var.dot1x + var.dotdeltax
var.RightDotY = var.dot1y + var.dotdeltay
var.LeftDotVis = true
var.RightDotVis = false
else
// the real dot 1 (on the right)
var.LeftDotX = var.dot1x - var.dotdeltax
var.LeftDotY = var.dot1y - var.dotdeltay
var.RightDotX = var.dot1x
var.RightDotY = var.dot1y
var.RightDotVis = true
var.LeftDotVis = false
end if
else if wiimote.dot2vis then
var.RightDotX = var.dot2x + var.dotdeltax
var.RightDotY = var.dot2y + var.dotdeltay
var.LeftDotX = var.dot2x
var.LeftDotY = var.dot2y
var.LeftDotVis = true
var.RightDotVis = false
end if
else
var.LeftDotX = var.dot1x
var.LeftDotY = var.dot1y
var.RightDotX = var.LeftDotX
var.RightDotY = var.LeftDotY
var.LeftDotVis = true
var.RightDotVis = true
end if
// Find the imaginary middle dot
var.MiddleDotX = (var.leftdotx + var.rightdotx)/2
var.MiddleDotY = (var.leftdoty + var.rightdoty)/2
var.MiddleDotVis = wiimote.dot1vis or wiimote.dot2vis
if var.MiddleDotVis then
var.TotalPitch = atan2(511.5*var.MiddleDotY,1320) + Wiimote.Pitch
var.DotYaw = atan2(-511.5*var.MiddleDotX,1320) // assume yaw is 0
var.WiimoteYawNoX = atan2(511.5*var.MiddleDotX,1320)
var.WiimoteXNoYaw = -sin(var.dotyaw)*var.IRDistance
var.WiimoteY = -sin(var.totalpitch)*var.IRDistance
var.WiimoteZ = (-sqrt(sqr(var.IRDistance) -
sqr(var.WiimoteY)))*var.IRDistance/RemoveUnits(var.IRDistance)
end if
// scale it to the screen range 0 to 1
var.IRx = var.IRMulX*var.middledotx/2 + 0.5
var.IRy = var.IRMulY*var.middledoty*1023/767/2 + 0.5
var.IRvis = wiimote.dot1vis or wiimote.dot2vis
var.IROnScreen = 0 <= var.IRx <= 1 and 0 <= var.IRy <= 1
// is it off the screen?
var.IRTooFarLeft = var.IRx < 0 or (var.IRx < 0.1 and (not var.IRvis))
var.IRTooFarRight = var.IRx > 1 or (var.IRx > 1-0.1 and (not var.IRvis))
var.IRTooFarUp = var.IRy < 0 or (var.IRy < 0.1 and (not var.IRvis))
var.IRTooFarDown = var.IRy > 1 or (var.IRy > 1-0.1 and (not var.IRvis))
// Heavily smooth small movements, but do zero lag for quick movements
var.MoveAmount = 1024*hypot(delta(var.IRx), delta(var.IRy))
if smooth(var.MoveAmount) > 12 then
var.SmoothX = var.IRx
var.SmoothY = var.IRy
var.LastSureFrame = PIE.Frame
else if (PIE.frame-var.LastSureFrame) > 18 then
var.SmoothX = Smooth(var.IRx, 18, 4/1024)
var.SmoothY = Smooth(var.IRy, 18, 4/1024)
else if (PIE.frame-var.LastSureFrame) > 14 then
var.SmoothX = Smooth(var.IRx, 14, 4/1024)
var.SmoothY = Smooth(var.IRy, 14, 4/1024)
else if (PIE.frame-var.LastSureFrame) > 10 then
var.SmoothX = Smooth(var.IRx, 10, 4/1024)
var.SmoothY = Smooth(var.IRy, 10, 4/1024)
else if (PIE.frame-var.LastSureFrame) > 6 then
var.SmoothX = Smooth(var.IRx, 6, 4/1024)
var.SmoothY = Smooth(var.IRy, 6, 4/1024)
else if (PIE.frame-var.LastSureFrame) > 2 then
var.SmoothX = Smooth(var.IRx, 2, 4/1024)
var.SmoothY = Smooth(var.IRy, 2, 4/1024)
end if
// Freeze the mouse cursor while they start pressing the button
// otherwise it will make the cursor jump
var.Freeze = (var.IRLeftButton or var.IRRightButton) and
KeepDown(pressed(var.IRLeftButton) or pressed(var.IRRightButton),
600ms)
// Only change the mouse position if pointing at the screen
// otherwise they can still use a real mouse
if var.IRvis and (not var.Freeze) then
mouse.x = var.SmoothX
mouse.y = var.SmoothY
end if
// delay the buttons slightly so we have time to freeze the cursor (is
that needed?)
//mouse.LeftButton = var.IRLeftButton and (not
KeepDown(pressed(var.IRLeftButton), 40ms))
//mouse.RightButton = var.IRRightButton and (not
KeepDown(pressed(var.IRRightButton), 40ms))
// display 6DOF data
if var.NoYawAllowed then
debug = 'X: '+var.WiimoteXNoYaw+', Y: '+var.WiimoteY+', Z:
'+var.WiimoteZ+', Yaw: 0, Pitch: '+Wiimote.Pitch+', Roll:
'+Wiimote.Roll
else
debug = 'X: 0, Y: '+var.WiimoteY+', Z: '+var.WiimoteZ+', Yaw:
'+var.WiimoteYawNoX+', Pitch: '+Wiimote.Pitch+', Roll:
'+Wiimote.Roll
endif
//Debug
if Wiimote.Up
var.Button = "Up"
elseif Wiimote.Down
var.Button = "Down"
elseif wiimote.Left
var.Button = "Left"
else if wiimote.Right
var.Button = "Right"
elseif wiimote.A and not wiimote.B
var.Button = "A"
elseif wiimote.B and not wiimote.A
var.button = "B"
elseif wiimote.A and wiimote.B
var.button = "A + B"
elseif wiimote.Home
var.button = "Home"
elseif wiimote.Plus
var.button = "Plus"
elseif wiimote.Minus
var.button = "Minus"
else
var.button = ""
endif
debug = "x:" + var.accx + ", y:" + var.accy + ", z:" + var.accz + " "
+ var.Button