PDA

View Full Version : Leaning detect



RobsoN
6th August 2013, 16:38
Hello everyone,

Izno told me nice idea to detect leaning. Link origin to tag_eye and detect difference between origins.
The problem is i haven't got idea how to do that (detect difference). I got only script for spawn and link:


eye = spawn("script_origin",self getEye());
eye linkto(self, "tag_eye");

If you can, please help.
Regards RobsoN.

IzNoGoD
6th August 2013, 17:41
dostuffonspawn()
{
if(isdefined(self.eye))
self.eye delete();
eye = spawn("script_origin", self.origin);
self.eye = eye;
eye thread deleteon("disconnect", self);
wait 0.05; //cant linkto() directly on spawn. Needs wait. waittillframeend; might do the job here too.
if(!isdefined(Self)) //user might disconnect
return;
eye linkto(self, "tag_eye");
}

isleaning()
{
if(!isdefined(self.eye))
return "no";
right_2d = anglestoright((0, self getplayerangles()[1], 0));
vec = self.eye.origin - self.origin;
dot = vectordot(vec, right_2d);
if(dot > 5)
return "right";
else if(dot < -5)
return "left";
else
return "no";
}

deleteon(event, user)
{
user waittill(event);
if(isdefined(self))
self delete();
}

IzNoGoD
6th August 2013, 17:41
The 5 and -5 are estimations. Might require proper tweaking.

RobsoN
6th August 2013, 18:29
So pro. Thanks you very much IzNoGod. Now Im able to read more about vectors.

Mitch
6th August 2013, 19:08
Isn't this better?


isleaning()
{
if(!isdefined(self.eye))
return 0;
right_2d = anglestoright((0, self getplayerangles()[1], 0));
vec = self.eye.origin - self.origin;
dot = vectordot(vec, right_2d);
if(dot > 5)
return 1; // right
else if(dot < -5)
return -1; // left
else
return 0;
}

Now it returns -1 for left and 1 for right.

Edit: a other way to do it is to use kung's extensions. It has a leanleft/right buttonpressed function.

IzNoGoD
6th August 2013, 19:10
Ofc it is, was just example code :)