| 
 | 
 | 
# Cvičenie 8
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
__Note:__
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
To, že ISpellBuilder definuje v každej metóde ako návratovú hodnotu nám umožňuje spraviť nasledovné:
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
```csharp
 | 
| 
 | 
 | 
builder.AddEffect("use cycle").AddEffect("for effects")
 | 
| 
 | 
 | 
  .SetAnimation(animation).SetSpellCost(cost).CreateSpell()
 | 
| 
 | 
 | 
```
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Ako na buildera:
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
1. wizard (nemusí byť player) si vytvorí iba SpellDirector
 | 
| 
 | 
 | 
2. director si vytvorí zodpovedajúcich builderov
 | 
| 
 | 
 | 
3. director si načíta zo súboru kúzla (budúce cviko, zatiaľ si ich tam pridajte ručne
 | 
| 
 | 
 | 
4. director vie, ktorý builder sa má použiť
 | 
| 
 | 
 | 
5. director povie postupne builderovi všetky efekty, ktoré treba pridať do vytváraného kúzla (môže ich byť niekoľko)
 | 
| 
 | 
 | 
6. director povie builderovi, akú animáciu nastaviť (ak je to projectile)
 | 
| 
 | 
 | 
7. director spočíta cenu a povie ju builderovi (selfcast builder si ju zníži o nejaké percento)
 | 
| 
 | 
 | 
8. wizard dostane kúzlo, ktoré môže použiť (nie používať - na ďalšie použitie si treba znovu vytvoriť nové, inak by mohol existovať iba jeden projektil daného typu v hre)
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
__Changelog:__
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
- `IMovable: double GetSpeed(double speed)` fixed definition to properly reflect strategy pattern (originally `double GetSpeed()`)
 | 
| ... | ... |  |