Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module( "constraint", package.seeall )
- local logic_collision_pair_ent
- local meta={}
- local _R_Entity_DeleteOnRemove=_R.Entity.DeleteOnRemove
- _R.Entity.DeleteOnRemove=function(ent,delthis)
- if getmetatable(delthis)==meta then return end
- _R_Entity_DeleteOnRemove(ent,delthis)
- end
- meta.__index=meta
- function meta:IsPlayer() end
- function meta:IsEntity() end
- function meta:IsNPC() end
- function meta:IsVehicle() end
- function meta:GetClass() return "logic_collision_pair" end
- function meta:GetModel() return "" end
- function meta:GetMaterial() return "" end
- function meta:GetTable() return self end
- function meta:SetTable(t)
- for k,v in pairs(t) do
- self[k]=v
- end
- return self
- end
- function meta:EntIndex() return 0 end
- function meta:GetPos() return Vector(0,0,0) end
- function meta:GetAngles() return Angle(0,0,0) end
- function meta:GetOwner() return NULL end
- function meta:CPPIGetOwner(...) return _R.Entity.CPPIGetOwner(self,...) end
- function meta:CPPISetOwner(...) return _R.Entity.CPPISetOwner(self,...) end
- function meta:GetCreationID()
- return self.__id
- end
- function meta:SetKeyValue(k,v)
- if k=="startdisabled" then
- self.__startdisabled = v==1 and true or v==0 and false or v end
- end
- function meta:Spawn()
- self.__VALID=true
- end
- function meta:Activate()
- if not self.__startdisabled then
- self:Input( "DisableCollisions", nil, nil, nil )
- end
- end
- function meta:Remove()
- print(tostring(self),"REMOVE")
- if self.__VALID then
- self.__VALID=false
- else
- return
- end
- hook.Call("EntityRemoved",GAMEMODE,self)
- //self:Input( "EnableCollisions", nil, nil, nil )
- end
- function meta:__tostring()
- return self:IsValid() and "FakeEntity [0][logic_collision_pair]" or "[NULL FakeEntity]"
- end
- function meta:__gc()
- print(self,"gc")
- end
- function meta:IsValid()
- return self.__VALID
- end
- function meta:SetPhysConstraintObjects( Phys1, Phys2 )
- -- print("SETPHYS",Phys1,Phys2)
- self.__Phys1=Phys1
- self.__Phys2=Phys2
- self.__Ent1=IsValid(Phys1:GetEntity()) and Phys1:GetEntity() or false
- self.__Ent2=IsValid(Phys2:GetEntity()) and Phys1:GetEntity() or false
- end
- function meta:Input( input )
- if (self.__Ent1 and not IsValid(self.__Ent1))
- or (self.__Ent2 and not IsValid(self.__Ent2))
- then print"EEEK!!" return end
- if input=="DisableCollisions" then
- Msg("DisableCollisions",tostring(self),self.__Phys1, self.__Phys2)
- logic_collision_pair_ent:SetPhysConstraintObjects( self.__Phys1, self.__Phys2 )
- logic_collision_pair_ent:Input( "DisableCollisions", nil, nil, nil )
- MsgN("...",logic_collision_pair_ent:GetSaveTable()['m_succeeded'] and "success" or "failed")
- logic_collision_pair_ent:SetSaveValue('m_succeeded',false)
- elseif input=="EnableCollisions" then
- Msg("EnableCollisions",tostring(self),self.__Phys1, self.__Phys2)
- logic_collision_pair_ent:SetPhysConstraintObjects( self.__Phys1, self.__Phys2 )
- logic_collision_pair_ent:Input( "EnableCollisions", nil, nil, nil )
- MsgN("...",logic_collision_pair_ent:GetSaveTable()['m_succeeded'] and "success" or "failed")
- logic_collision_pair_ent:SetSaveValue('m_succeeded',false)
- end
- end
- for k,v in pairs(_R.Entity) do
- if k:find("__") then continue end
- meta[k]=meta[k] or v
- end
- local id=9000
- local function ents_Create_logic_collision_pair()
- if not IsValid(logic_collision_pair_ent) then
- logic_collision_pair_ent = ents.Create"logic_collision_pair"
- logic_collision_pair_ent:SetKeyValue( "startdisabled", 1 )
- end
- local t=setmetatable({__VALID=false},meta)
- t.Entity=t
- t.Created=CurTime()
- id=id+1
- t.__id=id
- return t
- end
- function NoCollide( Ent1, Ent2, Bone1, Bone2 )
- if ( !CanConstrain( Ent1, Bone1 ) ) then return false end
- if ( !CanConstrain( Ent2, Bone2 ) ) then return false end
- local Phys1 = Ent1:GetPhysicsObjectNum( Bone1 )
- local Phys2 = Ent2:GetPhysicsObjectNum( Bone2 )
- if ( Phys1 == Phys2 ) then return false end
- if ( Find( Ent1, Ent2, "NoCollide", Bone1, Bone2 ) ) then
- return false
- end
- // Make Constraint
- //onStartConstraint( Ent1, Ent2 )
- local Constraint = ents_Create_logic_collision_pair()
- Constraint:SetKeyValue( "startdisabled", 1 )
- Constraint:SetPhysConstraintObjects( Phys1, Phys2 )
- //Constraint:SetPhysConstraintEnts( Ent1, Ent2 )
- Constraint:Spawn()
- Constraint:Activate()
- Constraint:Input( "DisableCollisions", nil, nil, nil )
- //onFinishConstraint( Ent1, Ent2 )
- AddConstraintTable( Ent1, Constraint, Ent2 )
- local ctable =
- {
- Type = "NoCollide",
- Ent1 = Ent1,
- Ent2 = Ent2,
- Bone1 = Bone1,
- Bone2 = Bone2,
- }
- Constraint:SetTable( ctable )
- return Constraint
- end
- duplicator.RegisterConstraint( "NoCollide", NoCollide, "Ent1", "Ent2", "Bone1", "Bone2" )
Advertisement
Add Comment
Please, Sign In to add comment