Python1320

FAKE NCOLLIDE >.x

Aug 18th, 2012
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.76 KB | None | 0 0
  1. module( "constraint", package.seeall )
  2. local logic_collision_pair_ent
  3. local meta={}
  4. local _R_Entity_DeleteOnRemove=_R.Entity.DeleteOnRemove
  5.   _R.Entity.DeleteOnRemove=function(ent,delthis)
  6.     if getmetatable(delthis)==meta then return end
  7.     _R_Entity_DeleteOnRemove(ent,delthis)
  8.    
  9. end
  10.  
  11.     meta.__index=meta
  12.  
  13.     function meta:IsPlayer() end
  14.     function meta:IsEntity() end
  15.     function meta:IsNPC() end
  16.     function meta:IsVehicle() end
  17.     function meta:GetClass() return "logic_collision_pair" end
  18.     function meta:GetModel() return "" end
  19.     function meta:GetMaterial() return "" end
  20.     function meta:GetTable() return self end
  21.     function meta:SetTable(t)
  22.         for k,v in pairs(t) do
  23.             self[k]=v
  24.         end
  25.         return self
  26.     end
  27.     function meta:EntIndex() return 0 end
  28.     function meta:GetPos() return Vector(0,0,0) end
  29.     function meta:GetAngles() return Angle(0,0,0) end
  30.     function meta:GetOwner() return NULL end
  31.     function meta:CPPIGetOwner(...) return _R.Entity.CPPIGetOwner(self,...) end
  32.     function meta:CPPISetOwner(...) return _R.Entity.CPPISetOwner(self,...) end
  33.     function meta:GetCreationID()
  34.         return self.__id
  35.     end
  36.  
  37.     function meta:SetKeyValue(k,v)
  38.         if k=="startdisabled" then
  39.             self.__startdisabled = v==1 and true or v==0 and false or v end
  40.     end
  41.     function meta:Spawn()
  42.         self.__VALID=true
  43.     end
  44.     function meta:Activate()
  45.         if not self.__startdisabled then
  46.             self:Input( "DisableCollisions", nil, nil, nil )
  47.         end
  48.     end
  49.    
  50.     function meta:Remove()
  51.         print(tostring(self),"REMOVE")
  52.         if self.__VALID then
  53.             self.__VALID=false
  54.         else
  55.             return
  56.         end
  57.         hook.Call("EntityRemoved",GAMEMODE,self)
  58.         //self:Input( "EnableCollisions", nil, nil, nil )
  59.     end
  60.    
  61.     function meta:__tostring()
  62.         return self:IsValid() and "FakeEntity [0][logic_collision_pair]" or "[NULL FakeEntity]"
  63.     end
  64.    
  65.     function meta:__gc()
  66.         print(self,"gc")
  67.     end
  68.     function meta:IsValid()
  69.         return self.__VALID
  70.     end
  71.    
  72.     function meta:SetPhysConstraintObjects( Phys1, Phys2 )
  73.     --  print("SETPHYS",Phys1,Phys2)
  74.         self.__Phys1=Phys1
  75.         self.__Phys2=Phys2
  76.         self.__Ent1=IsValid(Phys1:GetEntity()) and Phys1:GetEntity() or false
  77.         self.__Ent2=IsValid(Phys2:GetEntity()) and Phys1:GetEntity() or false
  78.     end
  79.     function meta:Input( input )
  80.         if (self.__Ent1 and not IsValid(self.__Ent1))
  81.         or (self.__Ent2 and not IsValid(self.__Ent2))
  82.         then print"EEEK!!" return end
  83.         if input=="DisableCollisions" then
  84.             Msg("DisableCollisions",tostring(self),self.__Phys1, self.__Phys2)
  85.                 logic_collision_pair_ent:SetPhysConstraintObjects( self.__Phys1, self.__Phys2 )
  86.                 logic_collision_pair_ent:Input( "DisableCollisions", nil, nil, nil )
  87.             MsgN("...",logic_collision_pair_ent:GetSaveTable()['m_succeeded'] and "success" or "failed")
  88.             logic_collision_pair_ent:SetSaveValue('m_succeeded',false)
  89.         elseif input=="EnableCollisions" then
  90.             Msg("EnableCollisions",tostring(self),self.__Phys1, self.__Phys2)
  91.                 logic_collision_pair_ent:SetPhysConstraintObjects( self.__Phys1, self.__Phys2 )
  92.                 logic_collision_pair_ent:Input( "EnableCollisions", nil, nil, nil )
  93.             MsgN("...",logic_collision_pair_ent:GetSaveTable()['m_succeeded'] and "success" or "failed")
  94.             logic_collision_pair_ent:SetSaveValue('m_succeeded',false)
  95.         end
  96.     end
  97.  
  98.     for k,v in pairs(_R.Entity) do
  99.         if k:find("__") then continue end
  100.         meta[k]=meta[k] or v
  101.     end
  102. local id=9000
  103. local function ents_Create_logic_collision_pair()
  104.     if not IsValid(logic_collision_pair_ent) then
  105.         logic_collision_pair_ent = ents.Create"logic_collision_pair"
  106.         logic_collision_pair_ent:SetKeyValue( "startdisabled", 1 )
  107.     end
  108.     local t=setmetatable({__VALID=false},meta)
  109.     t.Entity=t
  110.     t.Created=CurTime()
  111.     id=id+1
  112.     t.__id=id
  113.     return t
  114. end
  115.  
  116.  
  117.  
  118. function NoCollide( Ent1, Ent2, Bone1, Bone2 )
  119.  
  120.     if ( !CanConstrain( Ent1, Bone1 ) ) then return false end
  121.     if ( !CanConstrain( Ent2, Bone2 ) ) then return false end
  122.    
  123.     local Phys1 = Ent1:GetPhysicsObjectNum( Bone1 )
  124.     local Phys2 = Ent2:GetPhysicsObjectNum( Bone2 )
  125.  
  126.     if ( Phys1 == Phys2 ) then return false end
  127.  
  128.     if ( Find( Ent1, Ent2, "NoCollide", Bone1, Bone2 ) ) then
  129.         return false
  130.     end
  131.  
  132.     // Make Constraint
  133.     //onStartConstraint( Ent1, Ent2 )
  134.    
  135.         local Constraint = ents_Create_logic_collision_pair()
  136.             Constraint:SetKeyValue( "startdisabled", 1 )
  137.             Constraint:SetPhysConstraintObjects( Phys1, Phys2 )
  138.             //Constraint:SetPhysConstraintEnts( Ent1, Ent2 )
  139.         Constraint:Spawn()
  140.         Constraint:Activate()
  141.         Constraint:Input( "DisableCollisions", nil, nil, nil )
  142.    
  143.     //onFinishConstraint( Ent1, Ent2 )
  144.     AddConstraintTable( Ent1, Constraint, Ent2 )
  145.    
  146.     local ctable  =
  147.     {
  148.         Type  = "NoCollide",
  149.         Ent1  = Ent1,
  150.         Ent2  = Ent2,
  151.         Bone1 = Bone1,
  152.         Bone2 = Bone2,
  153.     }
  154.  
  155.     Constraint:SetTable( ctable )
  156.  
  157.     return Constraint
  158.  
  159. end
  160. duplicator.RegisterConstraint( "NoCollide", NoCollide, "Ent1", "Ent2", "Bone1", "Bone2" )
Advertisement
Add Comment
Please, Sign In to add comment