Advertisement
Guest User

Untitled

a guest
Aug 21st, 2019
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.15 KB | None | 0 0
  1. func check_spell(caster, targets, spell): #Checks ranges and requirements on targets, then executes spell/begins ritual
  2. if SpellDB.get_spell(spell)["target_types"][0] == "Self" and SpellDB.get_spell(spell)["target_types"].size() == 1 :
  3. if SpellDB.get_spell(spell)["cast_time"][0] == 0 :
  4. execute_spell_effects(caster,targets,spell)
  5. print ("Executing spell effects")
  6. return
  7. else :
  8. caster.change_task(null,spell)
  9. caster.ritual_targets = targets.duplicate()
  10. print ("Ritual started")
  11. return
  12.  
  13. print ("Spell is not self cast, checking targets n such")
  14.  
  15. var ranges = SpellDB.get_spell(spell)["range"]
  16. var anchors = SpellDB.get_spell(spell)["range_anchor"]
  17. var requirements = SpellDB.get_spell(spell)["target_restrictions"]
  18.  
  19. var anchor
  20. var x = 0
  21. var y = 0
  22. while x < targets.size() : #Check distance between caster and target
  23. if x >= ranges.size() :
  24. y = ranges.size()-1
  25. else :
  26. y = x
  27. if anchors[y] == 0 :
  28. if targets[x] is Vector2:
  29. #if not pythagoras_range(caster.local_tile,targets[x],ranges[y]) :
  30. if calculate_distance(caster.local_tile,targets[x]) > ranges[y] :
  31. print("Actor-tile unanchored range check failed")
  32. return false
  33. anchor = targets[x]
  34. else:
  35. #if not pythagoras_range(caster.local_tile,targets[x].local_tile,ranges[y]) :
  36. if calculate_distance(caster.local_tile,targets[x].local_tile) > ranges[y] :
  37. print("Actor-Actor unanchored range check failed")
  38. return false
  39. anchor = targets[x].local_tile
  40. else :
  41. if targets[x] is Vector2:
  42. #if not pythagoras_range(anchor,targets[x],ranges[y]) :
  43. if calculate_distance(anchor,targets[x]) > ranges[y] :
  44. print (anchor)
  45. print (targets[x])
  46. print (ranges[y])
  47. print (calculate_distance(anchor,targets[x]))
  48. print("Anchor-tile anchored range check failed")
  49. return false
  50. anchor = targets[x]
  51. else:
  52. #if not pythagoras_range(anchor,targets[x].local_tile,ranges[y]) :
  53. if calculate_distance(anchor,targets[x].local_tile) > ranges[y] :
  54. print("Anchor-Actor range check failed")
  55. return false
  56. anchor = targets[x].local_tile
  57. x = x + 1
  58. print("Range check passed")
  59. x = 0
  60. while x < targets.size() :
  61. if not check_visibility(caster, targets[x]) >= SpellDB.get_spell(spell)["visible_only"]: return false
  62. if typeof(targets[x]) == TYPE_VECTOR2 :
  63. if x >= requirements.size() :
  64. if not check_tile_requirements(targets[x],requirements[requirements.size()-1]):
  65. print ("Extended tile requirements invalid")
  66. return false
  67. elif not check_tile_requirements(targets[x],requirements[x]):
  68. print("Tile requirements invalid")
  69. return false
  70. else :
  71. if not targets[x].check_requirements(SpellDB.get_spell(spell)["target_restrictions"][x],null): #Can't properly support target_requirements yet
  72. print ("Actor requirements invalid")
  73. return false
  74. x = x + 1
  75. print("Target requirements passed")
  76.  
  77. if SpellDB.get_spell(spell)["cast_time"] == 0 :
  78. execute_spell_effects(caster,targets,spell)
  79. print ("Executing spell effects")
  80. else :
  81. caster.change_task(null,spell)
  82. caster.ritual_targets = targets.duplicate()
  83. print ("Ritual started")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement