PHP Code:
#include std\player;
swim()
{
swimspeed = 200;
swimfactor = 0.05;
swimcorrection = 35.5; //experimental random number (do not change)
if(isdefined(self.swim_running) && self.swim_running)
return; //dont double-start thread
waters = getentarray("water", "targetname");
touching = false;
wastouching = false;
while(isdefined(self) && isdefined(self.sessionstate) && self.sessionstate == "playing")
{
wastouching = touching;
touching = false;
for(i = 0; i < waters.size; i++)
{
if(self istouching(waters[i]))
{
touching = true;
break;
}
}
vec = (0, 0, 0);
if(touching || wastouching)
{
fw = anglestoforward(self getplayerangles());
rg = anglestoright(self getplayerangles());
if(self leftButtonPressed())
vec -= rg;
if(self rightButtonPressed())
vec += rg;
if(self forwardButtonPressed())
vec += fw;
if(self backButtonPressed())
vec -= fw;
if(self leanleftButtonPressed())
vec -= (0, 0, 1);
if(self leanrightButtonPressed())
vec += (0, 0, 1);
vec = vectornormalize(vec);
vec = maps\mp\_utility::vectorScale(vec, swimspeed);
}
if(touching)
{
currentspeed = self getVelocity();
speed_diff = vec - currentspeed;
speed = (speed_diff[0] * swimfactor, speed_diff[1] * swimfactor, speed_diff[2] * swimfactor + swimcorrection * (1 - 0.5 * self isonground()));
self addVelocity(speed);
}
else if(wastouching && (vec[2] > swimspeed/10 || self jumpButtonPressed()))
{
currentspeed = self getVelocity();
currentspeed = (currentspeed[0], currentspeed[1], 250);
self setvelocity(currentspeed);
}
wait 0.05;
}
if(isdefined(self))
self.swim_running = false;
}