Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- func check_spell(caster, targets, spell): #Checks ranges and requirements on targets, then executes spell/begins ritual
- if SpellDB.get_spell(spell)["target_types"][0] == "Self" and SpellDB.get_spell(spell)["target_types"].size() == 1 :
- if SpellDB.get_spell(spell)["cast_time"][0] == 0 :
- execute_spell_effects(caster,targets,spell)
- print ("Executing spell effects")
- return
- else :
- caster.change_task(null,spell)
- caster.ritual_targets = targets.duplicate()
- print ("Ritual started")
- return
- print ("Spell is not self cast, checking targets n such")
- var ranges = SpellDB.get_spell(spell)["range"]
- var anchors = SpellDB.get_spell(spell)["range_anchor"]
- var requirements = SpellDB.get_spell(spell)["target_restrictions"]
- var anchor
- var x = 0
- var y = 0
- while x < targets.size() : #Check distance between caster and target
- if x >= ranges.size() :
- y = ranges.size()-1
- else :
- y = x
- if anchors[y] == 0 :
- if targets[x] is Vector2:
- #if not pythagoras_range(caster.local_tile,targets[x],ranges[y]) :
- if calculate_distance(caster.local_tile,targets[x]) > ranges[y] :
- print("Actor-tile unanchored range check failed")
- return false
- anchor = targets[x]
- else:
- #if not pythagoras_range(caster.local_tile,targets[x].local_tile,ranges[y]) :
- if calculate_distance(caster.local_tile,targets[x].local_tile) > ranges[y] :
- print("Actor-Actor unanchored range check failed")
- return false
- anchor = targets[x].local_tile
- else :
- if targets[x] is Vector2:
- #if not pythagoras_range(anchor,targets[x],ranges[y]) :
- if calculate_distance(anchor,targets[x]) > ranges[y] :
- print (anchor)
- print (targets[x])
- print (ranges[y])
- print (calculate_distance(anchor,targets[x]))
- print("Anchor-tile anchored range check failed")
- return false
- anchor = targets[x]
- else:
- #if not pythagoras_range(anchor,targets[x].local_tile,ranges[y]) :
- if calculate_distance(anchor,targets[x].local_tile) > ranges[y] :
- print("Anchor-Actor range check failed")
- return false
- anchor = targets[x].local_tile
- x = x + 1
- print("Range check passed")
- x = 0
- while x < targets.size() :
- if not check_visibility(caster, targets[x]) >= SpellDB.get_spell(spell)["visible_only"]: return false
- if typeof(targets[x]) == TYPE_VECTOR2 :
- if x >= requirements.size() :
- if not check_tile_requirements(targets[x],requirements[requirements.size()-1]):
- print ("Extended tile requirements invalid")
- return false
- elif not check_tile_requirements(targets[x],requirements[x]):
- print("Tile requirements invalid")
- return false
- else :
- if not targets[x].check_requirements(SpellDB.get_spell(spell)["target_restrictions"][x],null): #Can't properly support target_requirements yet
- print ("Actor requirements invalid")
- return false
- x = x + 1
- print("Target requirements passed")
- if SpellDB.get_spell(spell)["cast_time"] == 0 :
- execute_spell_effects(caster,targets,spell)
- print ("Executing spell effects")
- else :
- caster.change_task(null,spell)
- caster.ritual_targets = targets.duplicate()
- print ("Ritual started")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement