Advertisement
Guest User

Untitled

a guest
Apr 1st, 2015
334
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.64 KB | None | 0 0
  1.  
  2. --# Main
  3. -- WaveAfterWave
  4. displayMode(FULLSCREEN)
  5. -- Use this function to perform your initial setup
  6. function setup()
  7. physics.continuous=true
  8. ply = Player(vec2(WIDTH/2,HEIGHT/2))
  9. waves = Waves()
  10. flv = {vec2(0,0)}
  11. for i=2,49 do
  12. flv[i] = vec2((WIDTH/50)*i,math.random(5+i//5,20+i//5))
  13. end
  14. flv[50]=vec2(WIDTH,0)
  15. flm=mesh()
  16. flm:setColors(140,150,145,255)
  17. flm.vertices = triangulate(flv)
  18. floor = physics.body(CHAIN,false,unpack(flv))
  19. floor.mask = {1}
  20. floor.categories = {2}
  21. walls = physics.body(CHAIN,false,vec2(0,0),vec2(0,HEIGHT),vec2(WIDTH,HEIGHT),vec2(WIDTH,0))
  22. fps = 1
  23. tchs = {}
  24. end
  25.  
  26. function touched(t)
  27. if ply:jtoucht(t) and t.state == BEGAN then
  28. table.insert(tchs,{ply,t,"joy"})
  29. elseif ply:btoucht(t) and t.state == BEGAN then
  30. table.insert(tchs,{ply,t,"btn"})
  31. end
  32. for k,v in pairs(tchs) do
  33. tchs[k][2]=t
  34. v[1]:touched(v)
  35. if v[2].state == ENDED then
  36. table.remove(tchs,k)
  37. end
  38. end
  39. end
  40.  
  41. -- This function gets called once every frame
  42. function draw()
  43. -- This sets a dark background color
  44. background(151, 151, 198, 255)
  45.  
  46. -- This sets the line thickness
  47. strokeWidth(5)
  48. fps=fps*0.95+DeltaTime*0.05
  49. -- Do your drawing here
  50. flm:draw()
  51. waves:draw()
  52. waves:waveCollide(ply)
  53. ply:draw()
  54. text(1/fps,100,100)
  55. end
  56.  
  57.  
  58. --# Player
  59. Player = class()
  60.  
  61. function Player:init(pos)
  62. -- you can accept and set parameters here
  63. --Vector table for body points
  64. self.mp = pos
  65. self.alive = true
  66. self.board = physics.body(POLYGON,vec2(-50,-5),vec2(-50,5),vec2(50,5),vec2(50,-5))
  67. self.board.position = pos-vec2(0,200)
  68. self.board.bullet = true
  69. self.board.type = DYNAMIC
  70. self.bones = {}
  71. self.bones[1] = vec2(WIDTH/2,HEIGHT/2)--head
  72. self.bones[2] = vec2(0,-30)--pelvis
  73. self.bones[12] = vec2(0,-30)--pelvisright
  74. self.bones[13] = vec2(0,-30)--pelvisleft
  75. self.bones[3] = vec2(5,-55)--right knee
  76. self.bones[4] = vec2(-5,-55)--left knee
  77. self.bones[5] = vec2(5,-75)--right foot
  78. self.bones[6] = vec2(-5,-75)--left foot
  79. self.bones[7] = vec2(0,-5)--shoulder joint
  80. self.bones[14] = vec2(0,-5)--right shoulder
  81. self.bones[15] = vec2(0,-5)--left shoulder
  82. self.bones[8] = vec2(5,-20)--right elbow
  83. self.bones[9] = vec2(-5,-20)--left elbow
  84. self.bones[10] = vec2(5,-35)--right hand
  85. self.bones[11] = vec2(-5,-35)--left hand
  86. --self.velocity table (if used)
  87. self.vel = {}
  88. --Point table for final positions of joints (table of points that gets drawn)
  89. self.p = {}
  90. --For all the joints create the table of self.velocity for each joint and the point of each joint
  91. for i = 1,#self.bones do
  92. self.vel[i] = vec2(0,0)
  93. self.p[i] = pos+self.bones[i]
  94. end
  95. self.tch=nil
  96. self.joy = Joystick(vec2(120,100))
  97. end
  98.  
  99. function Player:kill()
  100. if self.alive then
  101. for k,v in pairs(self.vel) do
  102. self.vel[k] = self.board.linearVelocity/32
  103. end
  104. end
  105. self.alive=false
  106. end
  107.  
  108. function Player:jtoucht(t)
  109. if vec2(t.x,t.y):dist(vec2(120,100))<80 then
  110. return true
  111. end
  112. return false
  113. end
  114.  
  115. function Player:btoucht(t)
  116. if vec2(t.x,t.y):dist(vec2(WIDTH-120,100))<80 then
  117. return true
  118. end
  119. return false
  120. end
  121.  
  122. function Player:draw()
  123. local grav = vec2(0,-0.1)
  124. --Localise tableself.bones, call it v for the drawing
  125. self.board.angularVelocity = self.board.angularVelocity+(0-self.board.angle)*0.025
  126. local v =self.bones
  127. if td ~= nil then
  128. self.vel[1] = self.vel[1] + (self.mp-v[1]):normalize()*(vec2(td.x,td.y):dist(v[1])/40)
  129. self.vel[1] = self.vel[1] * 0.85
  130. else
  131. if v[1].y < 10 then
  132. v[1].y = 10
  133. self.vel[1] = vec2()
  134. else
  135. self.vel[1] = self.vel[1] + grav*5
  136. end
  137. self.vel[1] = vec2(self.vel[1].x*0.98,self.vel[1].y*0.95)
  138. end
  139. --if self.alive then
  140. --Create spacing between elbows,hands and knees
  141. if self.bones[3]:dist(self.bones[4]) < 15 then
  142. self.bones[3] =self.bones[3]+(self.bones[3]-self.bones[4]):normalize()*1
  143. self.bones[4] =self.bones[4]+(self.bones[3]-self.bones[4]):normalize()*-1
  144. self.vel[3] = self.vel[3]+grav
  145. self.vel[4] = self.vel[4]+grav
  146. end
  147. if self.bones[9]:dist(self.bones[8]) < 15 then
  148. self.bones[8] =self.bones[8]+(self.bones[8]-self.bones[9]):normalize()*1
  149. self.bones[9] =self.bones[9]+(self.bones[8]-self.bones[9]):normalize()*-1
  150. self.vel[8] = self.vel[8]+grav
  151. self.vel[9] = self.vel[9]+grav
  152. end
  153. if self.bones[10]:dist(self.bones[11]) < 20 then
  154. self.bones[10] =self.bones[10]+(self.bones[10]-self.bones[11]):normalize()*1
  155. self.bones[11] =self.bones[11]+(self.bones[10]-self.bones[11]):normalize()*-1
  156. self.vel[10] = self.vel[10]+grav
  157. self.vel[11] = self.vel[11]+grav
  158. end
  159. --end
  160. for i=1,#self.bones do
  161. local vi = v[i]
  162. if i > 1 then
  163. if vi.y < 10 then
  164. self.bones[i].y = 10
  165. self.vel[i] = self.vel[i] + vec2(0,0.1)
  166. else
  167. self.vel[i] = self.vel[i] + grav*5
  168. self.vel[i] = self.vel[i]*0.9
  169. end
  170. end
  171. end
  172. if self.alive then
  173. local pos,ang = self.board.position,math.rad(self.board.angle)
  174. local pdtl,pdtr = pos+vec2(-15,0):rotate(ang),pos+vec2(15,0):rotate(ang)
  175. self.vel[1] = ((pos+vec2(0,80):rotate(ang)-self.bones[1])-self.vel[1]/60)
  176. self.vel[2] = ((pos+vec2(0,50):rotate(ang)-self.bones[2])-self.vel[2]/60)/5
  177. self.vel[5]=(pdtr-self.bones[5]):normalize()
  178. self.vel[6]=(pdtl-self.bones[6]):normalize()
  179. self.vel[3]=(pos+vec2(15,20):rotate(ang)-self.bones[3]):normalize()
  180. self.vel[4]=(pos+vec2(-15,20):rotate(ang)-self.bones[4]):normalize()
  181. self.vel[10]=((pos+vec2(45,60):rotate(ang))-self.bones[10])/10
  182. self.vel[11]=((pos+vec2(-45,60):rotate(ang))-self.bones[11])/10
  183. self.vel[8]=((pos+vec2(20,50):rotate(ang))-self.bones[8])/10
  184. self.vel[9]=((pos+vec2(-20,50):rotate(ang))-self.bones[9])/10
  185. self.bones[5]=pdtr
  186. self.bones[6]=pdtl
  187. self.bones[1] =self.bones[1] + self.vel[1]
  188. self.bones[2] =self.bones[1]+(self.bones[2]-self.bones[1]):normalize()*30 + self.vel[2]
  189. self.bones[3] =self.bones[2]+(self.bones[3]-self.bones[2]):normalize()*25 + self.vel[3]
  190. self.bones[4] =self.bones[2]+(self.bones[4]-self.bones[2]):normalize()*25 + self.vel[4]
  191. self.bones[3] =self.bones[5]+(self.bones[3]-self.bones[5]):normalize()*20 + self.vel[3]
  192. self.bones[4] =self.bones[6]+(self.bones[4]-self.bones[6]):normalize()*20 + self.vel[4]
  193. self.bones[5] =self.bones[3]+(self.bones[5]-self.bones[3]):normalize()*20 + self.vel[5]
  194. self.bones[6] =self.bones[4]+(self.bones[6]-self.bones[4]):normalize()*20 + self.vel[6]
  195. self.bones[7] =self.bones[1]+(self.bones[2]-self.bones[1]):normalize()*5
  196. self.bones[8] =self.bones[7]+(self.bones[8]-self.bones[7]):normalize()*15 + self.vel[8]
  197. self.bones[9] =self.bones[7]+(self.bones[9]-self.bones[7]):normalize()*15 + self.vel[9]
  198. self.bones[10] =self.bones[8]+(self.bones[10]-self.bones[8]):normalize()*15 + self.vel[10]
  199. self.bones[11] =self.bones[9]+(self.bones[11]-self.bones[9]):normalize()*15 + self.vel[11]
  200. else
  201. self.bones[1] =self.bones[1] + self.vel[1]
  202. self.bones[2] = self.bones[1]+(self.bones[2]-self.bones[1]):normalize()*30 +self.vel[2]
  203. self.bones[3] = self.bones[2]+(self.bones[3]-self.bones[2]):normalize()*25 +self.vel[3]
  204. self.bones[4] = self.bones[2]+(self.bones[4]-self.bones[2]):normalize()*25 +self.vel[4]
  205. self.bones[5] = self.bones[3]+(self.bones[5]-self.bones[3]):normalize()*20 +self.vel[5]
  206. self.bones[6] = self.bones[4]+(self.bones[6]-self.bones[4]):normalize()*20 +self.vel[6]
  207. self.bones[7] = self.bones[1]+(self.bones[2]-self.bones[1]):normalize()*5
  208. self.bones[8] = self.bones[7]+(self.bones[8]-self.bones[7]):normalize()*20 +self.vel[8]
  209. self.bones[9] = self.bones[7]+(self.bones[9]-self.bones[7]):normalize()*20 +self.vel[9]
  210. self.bones[10] = self.bones[8]+(self.bones[10]-self.bones[8]):normalize()*15 +self.vel[10]
  211. self.bones[11] = self.bones[9]+(self.bones[11]-self.bones[9]):normalize()*15 +self.vel[11]
  212. end
  213. --Create and update all joint positions and create *bones*
  214.  
  215. --Draw the body
  216. pushStyle()
  217. strokeWidth(5)
  218. stroke(200,200,200,255)
  219. line(v[1].x,v[1].y,v[2].x,v[2].y)
  220. line(v[2].x,v[2].y,v[3].x,v[3].y)
  221. line(v[2].x,v[2].y,v[4].x,v[4].y)
  222. line(v[3].x,v[3].y,v[5].x,v[5].y)
  223. line(v[4].x,v[4].y,v[6].x,v[6].y)
  224. line(v[7].x,v[7].y,v[8].x,v[8].y)
  225. line(v[7].x,v[7].y,v[9].x,v[9].y)
  226. line(v[8].x,v[8].y,v[10].x,v[10].y)
  227. line(v[9].x,v[9].y,v[11].x,v[11].y)
  228. ellipse(v[1].x,v[1].y,20)
  229. strokeWidth(10)
  230. local pos,ang = self.board.position,self.board.angle
  231. local pdtl,pdtr = pos+vec2(-50,0):rotate(math.rad(ang)),pos+vec2(50,0):rotate(math.rad(ang))
  232. line(pdtl.x,pdtl.y,pdtr.x,pdtr.y)
  233. fill(100,100)
  234. ellipse(WIDTH-100,100,160)
  235. self.joy:draw()
  236. if self.tch and self.alive then
  237. self.board:applyForce(vec2(self.joy.dis.x*10):rotate(math.rad(self.board.angle)))
  238. end
  239. popStyle()
  240. end
  241.  
  242. function Player:touched(td)
  243. local typ,t=td[3],td[2]
  244. if typ == "btn" and t.state == BEGAN and self.tch then
  245. ply.board.linearVelocity=(vec2(0,400))
  246. end
  247. if typ=="joy" then
  248. self.joy:touched(t)
  249. end
  250. end
  251.  
  252.  
  253.  
  254. --# Waves
  255. Waves = class()
  256.  
  257. function Waves:init(x)
  258. -- you can accept and set parameters here
  259. self.parts = {}
  260. self.rangers = {}
  261. self.m = mesh()
  262. for i=1,100 do
  263. self.parts[i]={}
  264. self.rangers[i] = nil
  265. self.parts[i].pos = vec2()
  266. --self.parts[i].r = self.m:addRect(1,1,1,1)
  267. end
  268.  
  269. end
  270.  
  271. function Waves:waveCollide(ply)
  272. for k,v in pairs(self.parts) do
  273. if math.abs(ply.board.x-v.pos.x)<120 then
  274. self.rangers[k] = physics.raycast(vec2(v.pos.x,0),v.pos,1)
  275. end
  276. end
  277. end
  278.  
  279. function Waves:draw()
  280. local wh = WIDTH/(#self.parts-1)
  281. local mv = {}
  282. mv[0]=vec2(0,0)
  283. local ptch = false
  284. for k,v in pairs(self.parts) do
  285. v.pos = vec2((k-1)*wh,math.sin(k*0.1+ElapsedTime)*50+(100+k*0.75))
  286. --self.m:setRect(v.r,v.pos.x,v.pos.y/2,wh,v.pos.y)
  287. local rc = self.rangers[k]
  288. if rc then
  289. local bd = rc.body
  290. bd:applyForce(-rc.normal*(1-rc.fraction)*70-vec2(0,bd:getLinearVelocityFromWorldPoint(rc.point).y/20),rc.point)
  291. ptch = true
  292. --self.m:setRect(v.r,v.pos.x,v.pos.y*0.5*rc.fraction,wh,v.pos.y*rc.fraction)
  293. mv[k]=vec2(v.pos.x,v.pos.y*rc.fraction)
  294. --bd:applyForce(vec2(Gravity.x*10,0))
  295. if not self.rangers[k-1] then
  296. for i=k-1,k-10,-1 do
  297. local p = self.parts[i]
  298. if not self.rangers[i] and p and mv[i+1] then
  299. mv[i]=vec2(p.pos.x,(p.pos.y+mv[i+1].y)/2)
  300. end
  301. end
  302. end
  303. if not self.rangers[k+1] then
  304. for i=k+1,k+10 do
  305. local p = self.parts[i]
  306. if not self.rangers[i] and p and mv[i-1] then
  307. mv[i]=vec2(p.pos.x,(p.pos.y+mv[i-1].y)/2)
  308. end
  309. end
  310. end
  311. if ply.alive and ply.board.x<WIDTH*0.3 then
  312. bd.linearVelocity = vec2(bd.linearVelocity.x+(WIDTH*0.5-bd.x)/400,bd.linearVelocity.y)
  313. end
  314. if rc.fraction<0.05 or (bd.angle<-90 or bd.angle>90) then
  315. ply:kill()
  316. end
  317. else
  318. if not mv[k] then
  319. mv[k]=v.pos
  320. end
  321. end
  322. end
  323. table.insert(mv,vec2(WIDTH,0))
  324. table.insert(mv,vec2(0,0))
  325. ply.tch = ptch
  326. self.m.vertices = triangulate(mv)
  327. self.m:setColors(50,50,255,150)
  328. self.m:draw()
  329. end
  330.  
  331. function Waves:touched(touch)
  332. -- Codea does not automatically call this method
  333. end
  334.  
  335. --# JoyStick
  336. Joystick = class()
  337.  
  338. function Joystick:init(pos)
  339. -- you can accept and set parameters here
  340. self.pos = pos
  341. self.tpos = vec2()
  342. self.hpos = nil
  343. self.dis = vec2()
  344. --self.id = random(100000000,999999999)
  345. end
  346.  
  347. function Joystick:draw()
  348. pushStyle()
  349. if not self.hpos then
  350. tint(255,80)
  351. else
  352. tint(255,160)
  353. self.dis = (self.hpos-self.pos)/80
  354. if self.hpos:dist(self.pos)>0 then
  355. self.tpos = self.dis:normalize()*(math.min(self.hpos:dist(self.pos),80))
  356. end
  357. end
  358. sprite("Documents:flatdark",self.pos.x,self.pos.y,160,160)
  359. sprite("Documents:flatjoy",self.pos.x+self.tpos.x,self.pos.y+self.tpos.y,80,80)
  360. popStyle()
  361. end
  362.  
  363. function Joystick:stop()
  364. self.hpos = nil
  365. self.tpos = vec2()
  366. self.dis = vec2()
  367. end
  368.  
  369. function Joystick:getValue()
  370. return self.dis
  371. end
  372.  
  373. function Joystick:holding()
  374. return self.hpos ~= nil
  375. end
  376.  
  377. function Joystick:toucht(t)
  378. if not t then return self.hpos ~= nil end
  379. local p = vec2(t.x,t.y)
  380. if p:dist(self.pos)<86 or self.hpos then
  381. return true
  382. end
  383. return false
  384. end
  385.  
  386. function Joystick:touched(t)
  387. local p = vec2(t.x,t.y)
  388. --print(p:dist(self.pos))
  389. if t.state == BEGAN and p:dist(self.pos)<86 then
  390. self.hpos = p
  391. end
  392. if t.state == MOVING and self.hpos then
  393. self.hpos = p
  394. end
  395. if t.state == ENDED then
  396. self.hpos = nil
  397. self.tpos = vec2()
  398. self.dis = vec2()
  399. end
  400. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement