Advertisement
Urumasi

Ranger Camera V2

Aug 7th, 2015
339
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.35 KB | None | 0 0
  1. @name Ranger camera V2
  2. @persist S:wirelink Res Materials:array Image:table Image2:table Mat:table T DT AT Loading Scanning CV:vector CA:angle PixelSize Range Delta:vector2
  3. runOnTick(1)
  4. runOnFile(1)
  5. runOnChat(1)
  6.  
  7. if(first()){
  8. S = entity():isConstrainedTo():wirelink()
  9. function wirelink:initScreen(Res){
  10. This[1048574]=0
  11. This[1048569]=3
  12. This[1048575]=1
  13. This[1048572]=Res
  14. This[1048573]=Res
  15. }
  16. function wirelink:drawPixel(X, Y, Color:vector, Res){
  17. This[X+Y*Res]=rgb2digi(Color, 3)
  18. Image[X+1, array]:setVector(Y+1, Color)
  19. }
  20. function wirelink:drawLine(X, Y, Down, Len, Color:vector, Res){
  21. if(Down){
  22. for(I=1, Len){
  23. This:drawPixel(X, Y+I-1, Color, Res)
  24. }
  25. }else{
  26. for(I=1, Len){
  27. This:drawPixel(X+I-1, Y, Color, Res)
  28. }
  29. }
  30. }
  31. function vector g(X, Y){
  32. return Image2[X+1, array]:vector(Y+1)
  33. }
  34. function vector array:averageV(){
  35. AR = array()
  36. AG = array()
  37. AB = array()
  38. foreach(K, V:vector=This){
  39. AR:pushNumber(V:x())
  40. AG:pushNumber(V:y())
  41. AB:pushNumber(V:z())
  42. }
  43. return vec(AR:average(), AG:average(), AB:average())
  44. }
  45. function wirelink:aa(X, Y, Res){
  46. if(X==0 & Y==0){
  47. This:drawPixel(X, Y, array(g(0,0), g(0,0), g(1,0), g(0,1), g(1,1)):averageV(), Res)
  48. }elseif(X==Res-1 & Y==0){
  49. This:drawPixel(X, Y, array(g(Res-1,0), g(Res-1,0), g(Res-2,0), g(Res-1,1), g(Res-2,1)):averageV(), Res)
  50. }elseif(X==0 & Y==Res-1){
  51. This:drawPixel(X, Y, array(g(0,Res-1), g(0,Res-1), g(1,Res-1), g(0,Res-2), g(1,Res-2)):averageV(), Res)
  52. }elseif(X==Res-1 & Y==Res-1){
  53. This:drawPixel(X, Y, array(g(Res-1,Res-1), g(Res-1,Res-1), g(Res-2,Res-1), g(Res-1,Res-2), g(Res-2,Res-2)):averageV(), Res)
  54. }elseif(X==0){
  55. This:drawPixel(X, Y, array(g(0,Y-1), g(1,Y-1), g(0,Y), g(0,Y), g(0,Y), g(1,Y), g(0,Y+1), g(1,Y+1)):averageV(), Res)
  56. }elseif(X==Res-1){
  57. This:drawPixel(X, Y, array(g(Res-1,Y-1), g(Res-2,Y-1), g(Res-1,Y), g(Res-1,Y), g(Res-1,Y), g(Res-2,Y), g(Res-1,Y+1), g(Res-2,Y+1)):averageV(), Res)
  58. }elseif(Y==0){
  59. This:drawPixel(X, Y, array(g(X-1,0), g(X-1,1), g(X,0), g(X,0), g(X,0), g(X,1), g(X+1,0), g(X+1,1)):averageV(), Res)
  60. }elseif(Y==Res-1){
  61. This:drawPixel(X, Y, array(g(X-1,Res-1), g(X-1,Res-2), g(X,Res-1), g(X,Res-1), g(X,Res-1), g(X,Res-2), g(X+1,Res-1), g(X+1,Res-2)):averageV(), Res)
  62. }else{
  63. This:drawPixel(X, Y, array(g(X-1,Y-1), g(X-1,Y), g(X-1,Y+1), g(X,Y-1), g(X,Y), g(X,Y), g(X,Y), g(X,Y), g(X,Y), g(X,Y), g(X,Y+1), g(X+1,Y-1), g(X+1,Y), g(X+1,Y+1)):averageV(), Res)
  64. }
  65. }
  66. Res = 128
  67. PixelSize = 3
  68. S:initScreen(Res)
  69. rangerPersist(1)
  70. rangerFilter(players())
  71. rangerIgnoreWorld(0)
  72. Materials = array("wood", "metal", "concrete", "tile", "plastic", "dirt", "grass")
  73. Image = table()
  74. Image2 = table()
  75. for(I=1,Res){
  76. Image:pushArray(array())
  77. Image2:pushArray(array())
  78. }
  79. S:drawLine(3, 3, 0, Materials:count()*4+2, vec(100,255,0), Res)
  80. S:drawLine(3, 4, 1, 2, vec(100,255,0), Res)
  81. S:drawLine(3, 6, 0, Materials:count()*4+2, vec(100,255,0), Res)
  82. S:drawLine(Materials:count()*4+4, 4, 1, 2, vec(100,255,0), Res)
  83. Delta = vec2(1, 0)
  84. }else{
  85. rangerFilter(players())
  86. if(T<Materials:count() & fileCanLoad() & !Loading){
  87. fileLoad(">e2shared/"+Materials:string(T+1)+".txt")
  88. S:drawLine(4+T*4, 4, 0, 4, vec(80,204,0), Res)
  89. S:drawLine(4+T*4, 5, 0, 4, vec(80,204,0), Res)
  90. Loading = 1
  91. }elseif(T<Materials:count() & fileClk() & Loading){
  92. print("Loaded "+Materials:string(T+1))
  93. Mat[Materials:string(T+1), table] = vonDecodeTable(fileRead())
  94. Loading = 0
  95. T++
  96. }
  97. if(T==Materials:count()){
  98. S:initScreen(Res)
  99. T++
  100. }
  101. while(perf(90)){
  102. #[ TEXTURE TEST ] #
  103. if(T>=Materials:count() & DT<256*Materials:count()){
  104. PI = floor(DT/256)
  105. PX = (DT%16)
  106. PY = floor(DT/16)%16
  107. S:drawPixel(PX+array(0,1,1,0,1,2,2,2):number(PI)*16, PY+array(1,0,1,2,2,2,1,0):number(PI)*16, Mat[Materials:string(PI+1), table][PY+1, array]:vector(PX+1), Res)
  108. DT++
  109. }
  110. if(DT==Res*Res*Materials:count()){print("Done drawing"), DT++}
  111. #[ RANGER CAMERA ]#
  112. if(T>=Materials:count() & Scanning & DT<Res*Res){
  113. PX = DT%Res
  114. PY = floor(DT/Res)
  115. R = rangerOffset(100000, CV, CA:forward()-CA:up()*(2*PY/Res-1)+CA:right()*(2*PX/Res-1))
  116. if(R:hit()){
  117. MatT = R:matType()
  118. Pos = R:hitWorld()? R:position() : R:entity():toLocal(R:position())
  119. Box = R:entity():boxSize()
  120. Pi = floor((Pos-(R:hitWorld()? vec() : Box))/PixelSize)
  121. if(R:hitWorld()){
  122. Norm = R:hitNormal()
  123. if(round(abs(Norm:x()))==1){
  124. PiX = Pi:z()%16
  125. PiY = Pi:y()%16
  126. }elseif(round(abs(Norm:y()))==1){
  127. PiX = Pi:z()%16
  128. PiY = Pi:x()%16
  129. }else{
  130. PiX = Pi:x()%16
  131. PiY = Pi:y()%16
  132. }
  133. }else{
  134. PiX = (Pi:x()+(Pi:z()*(abs(abs(Pos:x())-abs(Box:x()/2))<2) ))%16
  135. PiY = (Pi:y()+(Pi:z()*(abs(abs(Pos:y())-abs(Box:y()/2))<2) ))%16
  136. }
  137. Ra = R:position():distance(CV)
  138. Image2[PX+1, array]:setVector(PY+1, clamp((Range-Ra)/Range, 0, 1)*Mat[MatT, table][PiX+1, array]:vector(PiY+1))
  139. }else{
  140. Image2[PX+1, array]:setVector(PY+1, clamp((Range-Ra)/Range, 0, 1)*Mat[MatT, table][PiX+1, array]:vector(PiY+1))
  141. }
  142. S:drawPixel(PX, PY, vec(255,0,0), Res)
  143. DT++
  144. if(changed(time())){
  145. Time = (Res*Res-DT)/(Delta:x()-Delta:y())
  146. setName("Taking the picture... "+round(DT/(0.01*Res*Res))+"% Estimated time until completion: "+floor(Time/60)+"m "+round(Time%60)+"s")
  147. Delta = vec2(DT, Delta:x())
  148. }
  149. }
  150. #[ BLUR ]#
  151. if(DT>Res+1 & AT<Res*Res){
  152. PX = AT%Res
  153. PY = floor(AT/Res)
  154. S:aa(PX, PY, Res)
  155. AT++
  156. }
  157. #[ NO BLUR ] #
  158. if(DT>Res+1 & AT<Res*Res){
  159. PX = AT%Res
  160. PY = floor(AT/Res)
  161. S:drawPixel(PX, PY, g(PX, PY), Res)
  162. AT++
  163. }
  164. #]#
  165. }
  166. }
  167. if(chatClk(owner())){
  168. if(owner():lastSaid()=="/cam" & DT==0){
  169. hideChat(1)
  170. CV = owner():shootPos()
  171. CA = owner():eyeAngles()
  172. Range = CV:distance(owner():aimPos())*8
  173. holoCreate(1, CV)
  174. holoAng(1, CA)
  175. holoModel(1, "models/dav0r/camera.mdl")
  176. #[holoCreate(2, CV-CA:right()*Size/2+CA:up()*Size/2)
  177. holoScale(2, vec(0.2))
  178. holoAng(2, CA)
  179. holoCreate(3, CV+CA:right()*Size/2-CA:up()*Size/2)
  180. holoScale(3, vec(0.2))
  181. holoAng(3, CA)]#
  182. Scanning = 1
  183. print("Range is "+Range)
  184. }
  185. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement