Advertisement
Guest User

twinstick

a guest
Jan 24th, 2018
1,289
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.58 KB | None | 0 0
  1. extends Node2D
  2.  
  3. var player1 = preload("res://Player1.tscn")
  4. var player2 = preload("res://Player2.tscn")
  5.  
  6. var maceweapon = preload("res://weapon1.tscn")
  7. var rigidweapon = preload("res://weapon2.tscn")
  8. var p1weapontype = "mace"
  9. var p2weapontype = "mace"
  10.  
  11. var menumusic = preload("res://sounds/sparrows.ogg")
  12. var duelmusic = preload("res://sounds/abracadabra.ogg")
  13.  
  14. var explosionparticles = preload("res://Explosionparticles.tscn")
  15. var explosion
  16.  
  17. var maceskins = {1:preload("res://mace1.png"), 2:preload("res://mace2.png"), 3:preload("res://mace3.png"), 4:preload("res://mace4.png")}
  18. var ships = {1:preload("res://ship1.png"), 2:preload("res://ship2.png"), 3:preload("res://ship3.png"), 4:preload("res://ship4.png")}
  19.  
  20. var backgrounds = {1:preload("res://bgforest.png"), 2:preload("res://bgforest2.png")}
  21.  
  22. var p1movespeed
  23. var p2movespeed
  24. var kineticenergy = 0
  25.  
  26. var posarray = [Vector2(0,0),Vector2(0,0)]
  27.  
  28. var p1
  29. var p2
  30. var p1weapon
  31. var p2weapon
  32. var p1beam
  33. var p2beam
  34. var joy1pos # just the position of the middle of the joystick
  35. var joy2pos
  36. var p1move = false
  37. var p2move = false
  38.  
  39. var p1hp = 100
  40. var p2hp = 100
  41. var p1score = 0
  42. var p2score = 0
  43. var p1skin = 1 #skin refers to weapon, ship to ship skin
  44. var p2skin = 2
  45. var p1ship = 1
  46. var p2ship = 2
  47.  
  48. func _ready():
  49. set_fixed_process(true)
  50. set_process_input(true)
  51. get_tree().set_pause(true)
  52.  
  53. p1 = player1.instance()
  54. add_child(p1)
  55. p1.set_pos(Vector2(250,150))
  56. p2 = player2.instance()
  57. add_child(p2)
  58. p2.set_pos(Vector2(1050,150))
  59. p1.set_mode(2)
  60. p2.set_mode(2)
  61.  
  62. joy1pos = Vector2(get_node("Joystick1").get_pos().x+(128),get_node("Joystick1").get_pos().y+(128)) #Here we find the center of the joystick
  63. joy2pos = Vector2(get_node("Joystick2").get_pos().x+(128),get_node("Joystick2").get_pos().y+(128))
  64.  
  65. p1.connect("body_enter", self, "_on_Player1_body_enter")
  66. p2.connect("body_enter", self, "_on_Player2_body_enter")
  67.  
  68. _setupp1()
  69. _setupp2()
  70.  
  71. func _fixed_process(delta):
  72. get_node("score").set_text(str(p1score)+" - "+str(p2score))
  73. if p1move == true:
  74. if (posarray[0].distance_to(joy1pos) < 150): # Only touches actually touching the joystick should move player
  75. p1movespeed = posarray[0].distance_to(joy1pos*3) # Movespeed depends on how far touch happens from the middle of joystick
  76. if (p1movespeed > 300): p1movespeed = 300 # Movespeed has maximum, just to be sure, maybe not needed
  77. p1.set_linear_velocity((posarray[0]-joy1pos).normalized()*p1movespeed) # Direction from middle of joystick to position of touch, multiplied by speed
  78. get_node("Player1/Particles2D").set_emitting(true)
  79. get_node("Player1/Particles2D").set_param(0, (-posarray[0]+joy1pos).angle()*180/PI)
  80. if p1move == false:
  81. get_node("Player1/Particles2D").set_emitting(false)
  82. if p2move == true:
  83. if (posarray[1].distance_to(joy2pos) < 150):
  84. p2movespeed = posarray[1].distance_to(joy2pos*3)
  85. if (p2movespeed > 300): p2movespeed = 300
  86. p2.set_linear_velocity((posarray[1]-joy2pos).normalized()*p2movespeed)
  87. get_node("Player2/Particles2D").set_emitting(true)
  88. get_node("Player2/Particles2D").set_param(0, (-posarray[1]+joy2pos).angle()*180/PI)
  89. if p2move == false:
  90. get_node("Player2/Particles2D").set_emitting(false)
  91. if Input.is_action_pressed("leftplayer_up"):
  92. p1.set_linear_velocity(Vector2(p1.get_linear_velocity().x,-300).normalized()*300)
  93. if Input.is_action_pressed("leftplayer_down"):
  94. p1.set_linear_velocity(Vector2(p1.get_linear_velocity().x,300).normalized()*300)
  95. if Input.is_action_pressed("leftplayer_left"):
  96. p1.set_linear_velocity(Vector2(-300,p1.get_linear_velocity().y).normalized()*300)
  97. if Input.is_action_pressed("leftplayer_right"):
  98. p1.set_linear_velocity(Vector2(300,p1.get_linear_velocity().y).normalized()*300)
  99. if Input.is_action_pressed("rightplayer_up"):
  100. p2.set_linear_velocity(Vector2(p2.get_linear_velocity().x,-300).normalized()*300)
  101. if Input.is_action_pressed("rightplayer_down"):
  102. p2.set_linear_velocity(Vector2(p2.get_linear_velocity().x,300).normalized()*300)
  103. if Input.is_action_pressed("rightplayer_left"):
  104. p2.set_linear_velocity(Vector2(-300,p2.get_linear_velocity().y).normalized()*300)
  105. if Input.is_action_pressed("rightplayer_right"):
  106. p2.set_linear_velocity(Vector2(300,p2.get_linear_velocity().y).normalized()*300)
  107.  
  108. ##if(p1weapontype == "mace"):
  109. get_node("Player1/Beam").look_at(get_node("Player1/Joint1/Link1").get_global_pos()) #Lets make beam target weapon and be correct length
  110. get_node("Player1/Beam").set_region_rect(Rect2(0,0,32,get_node("Player1").get_global_pos().distance_to(get_node("Player1/Joint1/Link1").get_global_pos())*2))
  111. ##if(p2weapontype == "mace"):
  112. get_node("Player2/Beam").look_at(get_node("Player2/Joint1/Link1").get_global_pos()) #Lets make beam target weapon and be correct length
  113. get_node("Player2/Beam").set_region_rect(Rect2(0,0,32,get_node("Player2").get_global_pos().distance_to(get_node("Player2/Joint1/Link1").get_global_pos())*2))
  114.  
  115. #if p1.get_rot() != 0: #Maybe AI could use this as attack? :p
  116. # p1.set_rot(0)
  117.  
  118. func _input(event):
  119. if event.type == InputEvent.SCREEN_TOUCH:
  120. if event.pos.x < 512:
  121. posarray[0] = event.pos
  122. if event.is_pressed():
  123. p1move = true
  124. if !event.is_pressed():
  125. p1move = false
  126. if event.pos.x > 512:
  127. posarray[1] = event.pos
  128. p2move = true
  129. if event.is_pressed():
  130. p2move = true
  131. if !event.is_pressed():
  132. p2move = false
  133.  
  134. if event.type == InputEvent.SCREEN_DRAG: # SCREEN_DRAG DOESN'T PLAY WELL WITH SCREEN_TOUCH is_pressed()! Separately it works...
  135. if event.pos.x < 512:
  136. posarray[0] = event.pos
  137. p1move = true
  138. if event.pos.x > 512:
  139. posarray[1] = event.pos
  140. p2move = true
  141.  
  142. func _on_Player1_body_enter( body ):
  143. if body.is_in_group("weapon"):
  144. kineticenergy = pow(p1.get_linear_velocity().dot(body.get_linear_velocity()),2)*body.get_mass()
  145. kineticenergy = sqrt(kineticenergy)/3000
  146. print(str(p1.get_name())+" was hit")
  147. p1hp = p1hp-kineticenergy
  148. print("p1hp: "+str(p1hp))
  149. get_node("Player1/Sprite").set_modulate(Color(1,0.01*p1hp,0.01*p1hp))
  150. if p1hp <= 0:
  151. get_node("SamplePlayer").play("death")
  152. explosion = explosionparticles.instance()
  153. get_node("Background").add_child(explosion)
  154. explosion.set_global_pos(p1.get_global_pos())
  155. _setupp1()
  156. p2score += 1
  157.  
  158. func _on_Player2_body_enter( body ):
  159. if body.is_in_group("weapon"):
  160. kineticenergy = pow(p2.get_linear_velocity().dot(body.get_linear_velocity()),2)*body.get_mass()
  161. kineticenergy = sqrt(kineticenergy)/3000
  162. print(str(p2.get_name())+" was hit")
  163. p2hp = p2hp-kineticenergy
  164. print("p2hp: "+str(p2hp))
  165. get_node("Player2/Sprite").set_modulate(Color(1,0.01*p2hp,0.01*p2hp))
  166. if p2hp <= 0:
  167. get_node("SamplePlayer").play("death")
  168. explosion = explosionparticles.instance()
  169. get_node("Background").add_child(explosion)
  170. explosion.set_global_pos(p2.get_global_pos())
  171. _setupp2()
  172. p1score += 1
  173.  
  174. func _changep1tex(dir):
  175. print(get_node("Player1/Joint1/Link1/Weaponsprite").get_texture())
  176. if p1skin+dir > maceskins.size():
  177. p1skin = 1
  178. elif p1skin+dir < 1:
  179. p1skin = maceskins.size()
  180. else:
  181. p1skin += dir
  182. if p1skin == p2skin:
  183. _changep1tex(dir)
  184.  
  185. get_node("Player1/Joint1/Link1/Weaponsprite").set_texture(maceskins[p1skin])
  186. get_node("Menu/Panel/p1container/p1tex").set_texture(maceskins[p1skin])
  187. get_node("Joystick1/p1marker").set_texture(maceskins[p1skin])
  188.  
  189. func _changep2tex(dir):
  190. print(get_node("Player2/Joint1/Link1/Weaponsprite").get_texture())
  191. if p2skin+dir > maceskins.size():
  192. p2skin = 1
  193. elif p2skin+dir < 1:
  194. p2skin = maceskins.size()
  195. else:
  196. p2skin += dir
  197. if p2skin == p1skin:
  198. _changep2tex(dir)
  199.  
  200. get_node("Player2/Joint1/Link1/Weaponsprite").set_texture(maceskins[p2skin])
  201. get_node("Menu/Panel/p2container/p2tex").set_texture(maceskins[p2skin])
  202. get_node("Joystick2/p2marker").set_texture(maceskins[p2skin])
  203.  
  204. func _changep1ship(dir):
  205. print(get_node("Player1/Sprite").get_texture())
  206. if p1ship+dir > ships.size():
  207. p1ship = 1
  208. elif p1ship+dir < 1:
  209. p1ship = ships.size()
  210. else:
  211. p1ship += dir
  212. if p1ship == p2ship:
  213. _changep1ship(dir)
  214.  
  215. get_node("Player1/Sprite").set_texture(ships[p1ship])
  216. get_node("Menu/Panel/p1shipcontainer/p1tex").set_texture(ships[p1ship])
  217.  
  218. func _changep2ship(dir):
  219. print(get_node("Player2/Sprite").get_texture())
  220. if p2ship+dir > ships.size():
  221. p2ship = 1
  222. elif p2ship+dir < 1:
  223. p2ship = ships.size()
  224. else:
  225. p2ship += dir
  226. if p2ship == p1ship:
  227. _changep2ship(dir)
  228.  
  229. get_node("Player2/Sprite").set_texture(ships[p2ship])
  230. get_node("Menu/Panel/p2shipcontainer/p2tex").set_texture(ships[p2ship])
  231.  
  232. func _on_p1texleftbutton_pressed():
  233. _changep1tex(-1)
  234.  
  235. func _on_p1texrightbutton_pressed():
  236. _changep1tex(1)
  237.  
  238. func _on_p2texleftbutton_pressed():
  239. _changep2tex(-1)
  240.  
  241. func _on_p2texrightbutton_pressed():
  242. _changep2tex(1)
  243.  
  244. func _on_Button_pressed(): # fightbutton
  245. get_tree().set_pause(false)
  246. get_node("Menu").queue_free()
  247. _setupp1()
  248. _setupp2()
  249. p1score = 0
  250. p2score = 0
  251. print(str(get_node("StreamPlayer").get_stream()))
  252. get_node("StreamPlayer").set_stream(duelmusic)
  253. get_node("StreamPlayer").play()
  254. print(str(get_node("StreamPlayer").get_stream()))
  255.  
  256. func _on_menubutton_pressed():
  257. get_tree().reload_current_scene()
  258.  
  259.  
  260. func _on_p1shipleftbutton_pressed():
  261. _changep1ship(-1)
  262.  
  263. func _on_p1shiprightbutton_pressed():
  264. _changep1ship(1)
  265.  
  266. func _on_p2shipleftbutton_pressed():
  267. _changep2ship(-1)
  268.  
  269. func _on_p2shiprightbutton_pressed():
  270. _changep2ship(1)
  271.  
  272. func _setupp1():
  273. p1.queue_free()
  274. p1.set_name("deadPlayer1")
  275. p1 = player1.instance()
  276. add_child(p1)
  277. if p1weapontype == "mace":
  278. p1weapon = maceweapon.instance()
  279. get_node("Player1/Joint1").add_child(p1weapon)
  280. get_node("Player1/Joint1").set_softness(10)
  281. if p1weapon != null:
  282. get_node("Player1/Joint1/Link1/Weaponsprite").set_texture(maceskins[p1skin])
  283. elif p1weapontype == "rigid":
  284. #p1weapon.queue_free()
  285. #p1weapon.set_name("notweapon1")
  286. p1weapon = rigidweapon.instance()
  287. get_node("Player1/Joint1").add_child(p1weapon)
  288. get_node("Player1/Joint1").set_softness(0)
  289. get_node("Player1/Joint1").set_node_b("../Joint1/Link1")
  290. get_node("Player1/Sprite").set_texture(ships[p1ship])
  291. p1weapon.add_collision_exception_with(p1)
  292. p1.set_pos(Vector2(150,150))
  293. p1.connect("body_enter", self, "_on_Player1_body_enter")
  294. p1hp = 100
  295. pass
  296.  
  297. func _setupp2():
  298. p2.queue_free()
  299. p2.set_name("deadPlayer2")
  300. p2 = player2.instance()
  301. add_child(p2)
  302. if p2weapontype == "mace":
  303. p2weapon = maceweapon.instance()
  304. get_node("Player2/Joint1").add_child(p2weapon)
  305. get_node("Player2/Joint1").set_softness(10)
  306. elif p2weapontype == "rigid":
  307. p2weapon.queue_free()
  308. p2weapon.set_name("notweapon2")
  309. p2weapon = rigidweapon.instance()
  310. p2.get_node("Player2/Joint1").add_child(p1weapon)
  311. get_node("Player2/Joint1").set_softness(0)
  312. get_node("Player2/Joint1").set_node_b("../Joint1/Link1")
  313. if p2weapon != null:
  314. get_node("Player2/Joint1/Link1/Weaponsprite").set_texture(maceskins[p2skin])
  315. get_node("Player2/Sprite").set_texture(ships[p2ship])
  316. p2weapon.add_collision_exception_with(p2)
  317. p2.set_pos(Vector2(1000,150))
  318. p2.connect("body_enter", self, "_on_Player2_body_enter")
  319. p2hp = 100
  320. pass
  321.  
  322. func _on_p1macebutton_pressed():
  323. p1weapontype = "mace"
  324. print("weapontype = mace")
  325.  
  326. func _on_p1rigidbutton_pressed():
  327. p1weapontype = "rigid"
  328. print("weapontype = rigid")
  329. p1weapon = rigidweapon.instance()
  330. get_node("Player1/Joint1").add_child(p1weapon)
  331.  
  332. func _on_bgbackbutton_pressed():
  333. get_node("Background").set_texture(backgrounds[1])
  334. pass # replace with function body
  335.  
  336. func _on_bgfwdbutton_pressed():
  337. get_node("Background").set_texture(backgrounds[2])
  338. pass # replace with function body
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement