Advertisement
Guest User

Biped leg code

a guest
Mar 5th, 2016
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.65 KB | None | 0 0
  1. # Fully functional biped demo
  2.  
  3. @name HoloLeg Mk2 Proto
  4. @inputs [Hip Foot]:entity Hippos1:vector
  5. @outputs [CorAngle HypeAngle]:angle Out3
  6. @persist Hippos:vector
  7. runOnTick(1)
  8. if(->Hippos1){
  9. Hippos = Hippos1
  10. }else{
  11. Hippos = vec(0,0,0)
  12. }
  13.  
  14. Thighlength = 4*12
  15. Shinlength = 4*12
  16.  
  17. PhxMetallic = "Phoenix_storms/mat/mat_phx_metallic"
  18. Grey = vec(1,1,1)*50
  19.  
  20. function holoData (Index,Model:string,Scale:vector,Pos:vector,Ang:angle,Material:string,Color:vector,Parent:entity){
  21. holoCreate(Index)
  22. holoModel(Index,Model)
  23. holoScale(Index,Scale)
  24. holoPos(Index,Pos)
  25. holoAng(Index,Ang)
  26. holoMaterial(Index,Material)
  27. holoColor(Index,Color)
  28. holoParent(Index,Parent)
  29.  
  30. }
  31.  
  32.  
  33. function number angconverter (Ang1,Ang2){
  34. if((Ang1 - Ang2) > 180){Out1b = -(360 - (Ang1))}else{Out1b = Ang1}
  35. if((Ang2 - Ang1) > 180){Out2b = -(360 - (Ang2))}else{Out2b = Ang2}
  36. Out3 = Out2b - Out1b
  37. return Out3
  38. }
  39.  
  40.  
  41. if(first()){
  42. holoData(1,"cube",vec(1,1,1)*2,Hip:toWorld(vec(0,20,-20)),Hip:angles(),PhxMetallic,Grey,Hip) # Hip joint
  43. holoData(2,"cube",vec(1,1,1)*2,Hip:toWorld(vec(0,50,0)),Hip:angles(),PhxMetallic,vec(50,255,50),Hip) # hypotenuse
  44. holoData(3,"cube",vec(1,1,1)*2,holoEntity(2):toWorld(vec(0,50,0)),Hip:angles(),PhxMetallic,vec(255,50,50),holoEntity(2)) # rotated hypotenuse
  45.  
  46. holoData(4,"cube",vec(Thighlength/12,1,1),holoEntity(1):toWorld(vec(Thighlength/2,0,0)),Hip:angles(),PhxMetallic,Grey,holoEntity(1)) # thigh decor
  47. holoData(5,"cube",vec(1,1,1)*1.25,holoEntity(1):toWorld(vec(Thighlength,0,0)),holoEntity(1):angles(),PhxMetallic,Grey,holoEntity(1)) # knee joint
  48. holoData(6,"cube",vec(Shinlength/12,1,1),holoEntity(5):toWorld(vec(-Shinlength/2,0,0)),holoEntity(5):angles(),PhxMetallic,Grey,holoEntity(5)) # shin decor
  49. }
  50.  
  51. Avrgpoint = (Hip:toWorld(Hippos) + Foot:pos())/2
  52. Hypelength = clamp((Hip:toWorld(Hippos) - Foot:pos()):length(),0,Thighlength+Shinlength)
  53. HypeAngle = (Hip:toWorld(Hippos) - Foot:pos()):toAngle() + ang(90,0,0)
  54.  
  55. Out3 = angconverter(Hip:angles():yaw(),HypeAngle:yaw())
  56.  
  57. CorAngle = HypeAngle - ang(0,Out3,0)
  58. holoScale(1,vec(1,1,1)*1.5)
  59.  
  60. holoPos(2,Avrgpoint)
  61. holoScale(2,vec(0.25,1,Hypelength/12)*1)
  62. holoAng(2,HypeAngle)
  63.  
  64. holoPos(3,Avrgpoint)
  65. holoScale(3,vec(1,0.25,Hypelength/15)*1)
  66. holoAng(3,holoEntity(2):toWorld(ang(0,-Out3,0)))
  67.  
  68. holoPos(1,holoEntity(3):toWorld(vec(0,0,Hypelength/2)))
  69.  
  70. HipAng = acos((Thighlength^2 + Hypelength^2 - Shinlength^2)/(2*Thighlength*Hypelength)) - 90
  71. holoAng(1,holoEntity(3):toWorld(ang(-HipAng,0,0)))
  72. KneeAng = acos((Thighlength^2 + Shinlength^2 - Hypelength^2)/(2*Thighlength*Shinlength))
  73. holoAng(5,holoEntity(1):toWorld(ang(-KneeAng,0,0)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement