--@name baallssssssssssssssssssss
--@author 
--@shared

if SERVER then
local main = prop.create(chip():getPos() + Vector(0,0,20),Angle() , "models/hunter/misc/sphere075x075.mdl",true)
main:setMass(20000)
main:setMaterial("models/props_pipes/pipesystem01a_skin2")
main:getPhysicsObject():setMaterial("gmod_silent")
main:enableSphere(true, 37.5/2)
main:getPhysicsObject():addGameFlags(FVPHYSICS.DMG_DISSOLVE)
local chair = prop.createSent(chip():getPos() + chip():getUp() * 10, Angle(), "Chair_Plastic", true)
local podc = prop.createSent(chip():getPos(), Angle(), "gmod_wire_pod", true)
local pod= podc:getWirelink()
local mass = main:getMass()
podc:setNocollideAll(true)
podc:setNoDraw(true)
main:enableDrag(false)

pod["Vehicle"]=chair
pod["Hide Player"]=1

chair:setNoDraw(true)
chair:setNocollideAll(true)
local first = chair:getPos()
local hud = prop.createComponent(chip():getPos(), Angle(0) , "starfall_hud", "models/bull/dynamicbuttonsf.mdl", true)
hud:linkComponent(chip())
hud:linkComponent(chair)
hud:setNoDraw(true)
hud:setNocollideAll(true)
chip():setPos(Vector(0))
chip():setNoDraw(true)
local driver

local function set_driver(ply, vehicle, role)
    if vehicle ~= chair then return end 
    driver = role and ply 
    main:setFrozen(not isValid(driver))
end

local function onground(ent)
    return trace.line(ent:getPos(),ent:getPos()-Vector(0,0,40),function() return false end).Hit
end

hook.add("PlayerEnteredVehicle", "SetDriver", set_driver)
hook.add("PlayerLeaveVehicle", "SetDriver", set_driver)

hook.add("ClientInitialized","load",function(ply)
    net.start("load")
    net.writeEntity(main)
    net.send(ply)
end)

hook.add("tick","",function()
    chair:setPos(main:getPos()+Vector(0,0,10))
    chair:setAngles(Angle(0))
    chair:setFrozen(true)
    main:setNocollideAll(false)
    if driver and onground(main) then
        if driver:keyDown(IN_KEY.FORWARD) then
            main:applyAngForce(Angle(12*mass,0,0))
            main:applyForceCenter(Vector(6*mass,0,0):getRotated(Angle(0,driver:getEyeAngles()[2],0)))
        end
        if driver:keyDown(IN_KEY.BACK) then
            main:applyAngForce(Angle(-12*mass,0,0))
            main:applyForceCenter(Vector(-6*mass,0,0):getRotated(Angle(0,driver:getEyeAngles()[2],0)))
        end
        if driver:keyDown(IN_KEY.MOVELEFT) then
            main:applyAngForce(Angle(12*mass,90,0))
            main:applyForceCenter(Vector(0,6*mass,0):getRotated(Angle(0,driver:getEyeAngles()[2],0)))
        end
        if driver:keyDown(IN_KEY.MOVERIGHT) then
            main:applyAngForce(Angle(12*mass,-90,0))
            main:applyForceCenter(Vector(0,-6*mass,0):getRotated(Angle(0,driver:getEyeAngles()[2],0)))
        end
        if driver:keyDown(IN_KEY.JUMP) then
            main:applyForceCenter(Vector(0,0,106*mass):getRotated(Angle(0,driver:getEyeAngles()[2],0)))
        end
        if driver:keyDown(IN_KEY.SPEED) then
            local force = -main:getVelocity()/3*mass
            main:applyForceCenter(Vector(force[1],force[2]))
            main:applyAngForce(-main:getAngleVelocityAngle()/2*mass)
        end
    end
end)

hook.add("EntityTakeDamage","",function(ent)
    if ent == main then
        return true
    end
end)

end
if CLIENT then
    net.receive("load",function()
        net.readEntity(function(ent)
            main(ent)
            end)
    end)
    function main(ent)
        local font = render.createFont("Arial",72,400,false,true,false,true)
        hook.add("drawhud","",function()
            local pos1 = ent:getPos():toScreen()
            local x1,y1=pos1.x,pos1.y
            local vel = ent:getVelocity()
            local tr = trace.line(ent:getPos(),ent:getPos()+Vector(vel[1],vel[2],0)*10,function() return false end)
            local pos2 = tr.HitPos:toScreen()
            local x2,y2=pos2.x,pos2.y
            render.setColor(Color(255,0,0))
            render.drawLine(x1,y1,x2,y2)
            render.setColor(Color(104,104,104))
            render.drawRoundedBox(10,1600,800,300,100)  
            render.setColor(Color(255,255,255))   
            local speed = ent:getVelocity():getLength() * 0.01905 * 3.6
            render.setFont(font)
            render.drawSimpleText(1750,850,tostring(math.ceil(speed)).." KM/H",1,1)
        end)
        hook.add("calcview","",function()
            local tr = trace.line(ent:getPos(),ent:getPos()+Vector(-100,0,0):getRotated(eyeAngles()),function() return false end)
            return {origin=tr.HitPos+Vector(9,0,0):getRotated(eyeAngles()),drawviewer=true}
        end)
    end
end
