PHP Code:
@name HK-Drone V2
@inputs [RPod LPod APod]:entity Pod:wirelink
@outputs RThrust LThrust AThrust Altitude Angles:angle HoverThrust RPitch LPitch APitch Ground
@persist RPitch LPitch TZ Altitude Roll Pitch ForwardVel SideVel RPodChange LPodChange
@persist AngVel SpeedCounter SpinCounter Bank Acc Right Left APitch UpsideDown Torque
@persist [Self Base]:entity
interval(50)
if(first()){
Self = entity()
Altitude=Self:pos():z()
Base = Self:isWeldedTo()
rangerHitWater(1)
rangerFilter(Base)
rangerPersist(1)
}
Active=Pod["Active"]
W=Pod["W",number]
A=Pod["A",number]
S=Pod["S",number]
D=Pod["D",number]
Mouse1=Pod["Mouse1",number]
Mouse2=Pod["Mouse2",number]
R=Pod["R",number]
Space=Pod["Space",number]
Shift=Pod["Shift",number]
Alt=Pod["Alt",number]
Driver=Pod["Entity",number]:driver()
AimPos=Pod["AimPos",number]
Bearing=Pod["Bearing",number]
Elevation=Pod["Elevation",number]
###Minimum Height
Ground = rangerOffset(64000,Self:pos(),vec(0,0,-1)):position():z()+40
###Flying Altitude
if(!Active){
Altitude=Self:pos():z()
RPitch=UpsideDown*RPod:angles():pitch()
LPitch=UpsideDown*LPod:angles():pitch()
APitch=UpsideDown*APod:angles():pitch()
RPod:applyAngForce(ang(RPitch+$RPitch*4,0,0)*20)
LPod:applyAngForce(ang(LPitch+$LPitch*4,0,0)*20)
APod:applyAngForce(ang(APitch+$APitch*4,0,0)*20)
RThrust=0
LThrust=0
AThrust=0
}
else{
if(Shift){
Altitude=clamp(Altitude+3,Ground,999999999)
}elseif(Space){
Altitude=clamp(Altitude-3,Ground,999999999)
}
###Maintain Altitude
Z = Self:pos():z()
TZ = (-Z + Altitude)
HoverThrust=(TZ+$TZ*10)
###Angle of Thruster Pods
if(abs(Pitch)>90){
UpsideDown=-1
}else{
UpsideDown=1
}
GoAngle=40*(S-W)
TurnAngle=20*(D-A)
RPitch=clamp((RPod:angles():pitch()+GoAngle+TurnAngle+SpeedCounter+SpinCounter),-90,90)
LPitch=clamp((LPod:angles():pitch()+GoAngle-TurnAngle+SpeedCounter-SpinCounter),-90,90)
APitch=clamp((APod:angles():pitch()+GoAngle+SpeedCounter),-90,90)
RPod:applyAngForce(ang(RPitch*1+$RPitch*4,0,0)*180)
LPod:applyAngForce(ang(LPitch*1+$LPitch*4,0,0)*180)
APod:applyAngForce(ang(APitch*1+$APitch*2,0,0)*180)
###Hover Balance
SelfAngs = Self:angles()
Angles=SelfAngs
Roll=SelfAngs:pitch()
Pitch=SelfAngs:roll()
RollCounter=(Roll+$Roll*3)*3
PitchCounter=(Pitch+$Pitch*2)*4
StrafeCounter=(SideVel+$SideVel*0.25)/2+1.25
CosP = HoverThrust/cos(Pitch)
RThrust=clamp(UpsideDown*(CosP-RollCounter-StrafeCounter),0,200)
LThrust=clamp(UpsideDown*(CosP+RollCounter+StrafeCounter),0,200)
AThrust=clamp(UpsideDown*(CosP-PitchCounter),-100,100)
###Counter Movement
if(W|S){
SpeedCounter=0
}else{
SpeedCounter=-(Self:velL():y())/12+0.25
}
if(A|D){
SpinCounter=0
}else{
SpinCounter=(Self:angVel():yaw())/4
}
}
Bookmarks