TADAA:
The only drawback is it uses SLIGHTLY MORE ops than Whosdr's (like 200 more)Code:@name Drone Base @inputs [Pod Cam]:wirelink Active E:entity @persist ForwardSpeed SideSpeed UpSpeed Pos:vector TargetQuat:quaternion @persist ForwardAcc ForwardTopSpd SideAcc SideTopSpd UpAcc UpTopSpd TurnSpeed ForceMul QuatMul1 QuatMul2 CameraDistance CameraHeight ShiftBoost @trigger if (first()|duped()) { #CHANGE THESE TO WHAT YOU WANT ForwardAcc = 0.8 #How fast it accelerates forward (W & S) ForwardTopSpd = 20 #Forward Top Speed SideAcc = 0.8 #How fast it accelerates to the side (A & D) SideTopSpd = 20 #Side Top Speed UpAcc = 0.8 #How fast it accelerates up and down (Space & Alt) UpTopSpd = 2 #Up/Down Top Speed TurnSpeed = 0.08 #How fast it turns ForceMul = 40 #ApplyForce Multiplier QuatMul1 = 1000 #Quaternion Multiplier nr 1 QuatMul2 = 20 #Quaternion Multiplier nr 2 CameraDistance = 200 #How far behind the prop the camera is CameraHeight = 50 #How far above the prop the camera is ShiftBoost = 50 #How much extra boost shift gives to speed (is in percent!!!) #Do not change anything below here unless you know what you are doing } runOnTick(Active&E) if (~Active) { if (Active) { TargetQuat = quat(Pod["Entity",entity]:driver():eyeAngles()) Cam["Parent",entity] = E Pos = E:pos() } } if (Active ) { #Controls W = Pod["W",number] A = Pod["A",number] S = Pod["S",number] D = Pod["D",number] Space = Pod["Space",number] Alt = Pod["Alt",number] Shift = Pod["Shift",number] Driver = Pod["Entity",entity]:driver() #Fly if (W|S) { ForwardSpeed = clamp(ForwardSpeed+(W-S)*ForwardAcc,-ForwardTopSpd,ForwardTopSpd) } else { ForwardSpeed -= clamp(ForwardSpeed,-ForwardAcc,ForwardAcc) } if (A|D) { SideSpeed = clamp(SideSpeed+(D-A)*SideAcc,-SideTopSpd,SideTopSpd) } else { SideSpeed -= clamp(SideSpeed,-SideAcc,SideAcc) } if (Space|Alt) { UpSpeed = clamp(UpSpeed+(Space-Alt),-UpTopSpd,UpTopSpd) } else { UpSpeed -= clamp(UpSpeed,-ForwardAcc,ForwardAcc) } Pos += (TargetQuat:forward() * ForwardSpeed + TargetQuat:right() * SideSpeed + TargetQuat:up() * UpSpeed) * (1+ShiftBoost/100*Shift) E:applyForce(((Pos-E:pos())*ForceMul-E:vel())*E:mass()) #Aim TargetQuat = slerp(TargetQuat,quat(Driver:eyeAngles()),TurnSpeed) Torque = E:toLocal(rotationVector(TargetQuat/quat(E))+E:pos()) E:applyTorque((Torque*QuatMul1-E:angVelVector()*QuatMul2)*E:inertia()) #Camera Cam["Position",vector] = Pos - Driver:eye() * CameraDistance + vec(0,0,CameraHeight) Cam["Direction",vector] = Driver:eye() }


LinkBack URL
About LinkBacks




Reply With Quote


Bookmarks