-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathSpellModifierApplier.gd
More file actions
80 lines (70 loc) · 2.25 KB
/
SpellModifierApplier.gd
File metadata and controls
80 lines (70 loc) · 2.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
extends Reference
class_name SpellModifierApplier
var modifiers := []
var applied_to :Node
var collision_manager :Node
var spellcastinfo: SpellCastInfo
var max_bounces :int
var max_distance: float
var max_requests :int
var speed_multiplier :float
var limit_movement_to_collision :float
var velocity :Vector2
var gravity :float
var collision_mask := 91
var ortho: bool
func apply_mods():
for mod in modifiers:
match mod:
"limited":
velocity = Vector2.ZERO
max_requests = 1
"acceleration":
speed_multiplier *= 1.1
if velocity.length() < 0.01:
velocity = (spellcastinfo.goal - applied_to.position).normalized() * 10
"impulse":
if velocity.length() < 0.01:
velocity = (spellcastinfo.goal - applied_to.position).normalized() * 200
"orthogonal":
ortho = true
"soul_wave_collider":
if not collision_manager:
continue
var spell_spawner := SpellSpawner.new()
spell_spawner.spell = preload("res://Spells/SoulWave.tscn")
spell_spawner.amount = 1
spell_spawner.use_spell_as_caster = true
collision_manager.connect("collision_happened", spell_spawner, "_on_collision_happened")
applied_to.add_child(spell_spawner)
"explosion_collider":
if not collision_manager:
continue
var spell_spawner := ExplodeOnCollide.new()
collision_manager.connect("collision_happened", spell_spawner, "_on_collision_happened")
applied_to.add_child(spell_spawner)
"bouncy":
max_bounces = 25
max_requests = -1
if spellcastinfo.modifiers.has("up_gravity") or spellcastinfo.modifiers.has("down_gravity") and max_distance > 0:
velocity = velocity.normalized() * max_distance * 10
max_distance = -1
"down_gravity":
if velocity.length() > 800:
gravity = velocity.length() * 20
else:
gravity = 500
"up_gravity":
if velocity.length() > 800:
gravity = -velocity.length() * 20
else:
gravity = -500
"ghost":
collision_mask = 25
["cast_collider", var spell]:
var spell_spawner := SpellSpawner.new()
spell_spawner.spell_object = spell
spell_spawner.amount = 1
spell_spawner.use_spell_as_caster = true
collision_manager.connect("collision_happened_vel", spell_spawner, "_on_collision_vel_happened")
applied_to.add_child(spell_spawner)