specialJoint = {};

function specialJoint.prerequisitesPresent(specializations)
return true;
end;

function specialJoint:load(xmlFile)

        self.specialJoint = {};
        self.specialJoint.index = getXMLInt(xmlFile, "vehicle.specialJoint#index");
        self.specialJoint.node = Utils.indexToObject(self.components, getXMLString(xmlFile, "vehicle.specialJoint#node"));
        self.specialJoint.rotNode = Utils.indexToObject(self.components, getXMLString(xmlFile, "vehicle.specialJoint#rotationNode"));
        self.specialJoint.rotNode2 = Utils.indexToObject(self.components, getXMLString(xmlFile, "vehicle.specialJoint#rotationNode2"));
    local joint = self.attacherJoints[self.specialJoint.index];
        self.specialJoint.rotNodeBackup = joint.rotationNode;
        self.specialJoint.rotNode2Backup = joint.rotationNode2;
        self.specialJoint.maxRotLimitBackup = joint.maxRotLimit;
        self.specialJoint.backup = joint.jointTransform;
    local x, y, z = Utils.getVectorFromString(getXMLString(xmlFile, "vehicle.specialJoint#maxRotLimit"));
        self.specialJoint.maxRotLimit = {};
        self.specialJoint.maxRotLimit[1] = math.rad(math.abs(Utils.getNoNil(x, 0)));
        self.specialJoint.maxRotLimit[2] = math.rad(math.abs(Utils.getNoNil(y, 0)));
        self.specialJoint.maxRotLimit[3] = math.rad(math.abs(Utils.getNoNil(z, 0)));
end;

function specialJoint:delete()
end;

function specialJoint:mouseEvent(posX, posY, isDown, isUp, button)
end;

function specialJoint:keyEvent(unicode, sym, modifier, isDown)
end;

function specialJoint:update(dt)
end;

function specialJoint:updateTick(dt)
end;

function specialJoint:draw()
end;

local oldVehicleAttachImplement = Vehicle.attachImplement;
        Vehicle.attachImplement = function(self, object, jointIndex, noEventSend, index)
        if self.specialJoint ~= nil then
        if self.specialJoint.index == jointIndex and object.specialJoint ~= nil then
        self.specialJoint.attachable = object;
    local joint = self.attacherJoints[self.specialJoint.index];
        joint.jointTransform = self.specialJoint.node;
        joint.rotationNode = self.specialJoint.rotNode;
        joint.rotationNode2 = self.specialJoint.rotNode2;
        joint.maxRotLimit = self.specialJoint.maxRotLimit;
        object.attacherJoint.node = object.specialJoint.node;
    end;
end;
oldVehicleAttachImplement(self, object, jointIndex, noEventSend, index);
end;

local oldVehicleDetachImplement = Vehicle.detachImplement;
Vehicle.detachImplement = function(self, implementIndex, noEventSend)
local implement = self.attachedImplements[implementIndex];
local index = nil;
local object = nil;
    if implement ~= nil then
    index = implement.jointDescIndex;
    object = implement.object;
end;
oldVehicleDetachImplement(self, implementIndex, noEventSend);

if implement ~= nil then
if self.specialJoint ~= nil then
if object.specialJoint ~= nil and self.specialJoint.index == index then
local joint = self.attacherJoints[self.specialJoint.index];
                joint.jointTransform = self.specialJoint.backup;
                joint.rotationNode = self.specialJoint.rotNodeBackup;
                joint.rotationNode = self.specialJoint.rotNode2Backup;
                joint.maxRotLimit = self.specialJoint.maxRotLimitBackup;
                object.attacherJoint.node = object.specialJoint.backup;
            end;
        end;
    end;
end;
	
	