SummonEnemy¶
This is a coroutine that allows to create an enemy and to add it to enemydata during the battle.
There are 2 overloads:
(1)
private IEnumerator SummonEnemy(SummonType type, int enemyid, Vector3 position)
This one ends end starting (2) with cantmove as false followed by a frame yield.
(2)
private IEnumerator SummonEnemy(SummonType type, int enemyid, Vector3 position, bool cantmove)
Parameters¶
type: The type of summon to use which describes the method the enemy should appearenemyid: The enemy id to summonposition: The position the enemy should appear in battlecantmove: If true, the startingcantmovevalue of the new enemy will be 1 (meaning one actor turn will need to pass for the enemy to act)
SummonType¶
This is an enum that tells the behavior to have when summoning in this method (see the procedure for details):
| Value | Name | Description |
|---|---|---|
| 0 | FromGround | The screen is shook twice followed by the enemy appears from the ground with a final startscale of (1.15, 1.15, 1.15) |
| 1 | Offscreen | The enemy appears by a movetowards call from the right offscreen |
| 2 | OffscreenNoAnim | The same than Offscreen, but the position is lerped instead of a movetowards call |
| 3 | None | No specific summoning logic occurs |
| 4 | FromGroundInstant | An alias of FromGround |
| 5 | Raise | The same than OffscreenNoAnim, but the enemy appears from the bottom of the screen |
| 6 | FromGroundKeepScale | The same than FromGround, but the final startscale is the one from endata |
| 7 | Tablet | The position to summon is overriden to (50.0, 50.0, 0.0) |
Procedure¶
There's 3 sections to this coroutine:
SummonTypepre add logic- Adding the enemy
SummonTypepost add logic- Last adjustements
SummonType pre logic¶
The logic depends on the sent type:
FromGround / FromGroundKeepScale¶
- ShakeScreen is called for 0.5 seconds
- 0.5 seconds are yielded
- ShakeScreen is called again with an ammount of (0.2, 0.2, 0.2) for 0.1 seconds
Offscreen / OffscreenNoAnim¶
- The x/y position is overriden to 20.0 and 0.0 respectively
Raise¶
- The y position is overriden to position.y - 20.0
Tablet¶
- The position is overriden to (50.0, 50.0, 0.0)
Adding the enemy¶
AddNewEnemy is called with the enemyid and the position (or the overriden one if applicable). The EntityControl of the new enemy is tracked locally.
SummonType post add logic¶
The logic depends on the sent type (all position refers to the original sent value, not the overriden one unless stated otherwise. Additionally, the entity reffered to is the new enemy entity stored locally):
Tablet¶
TabletSpawnparticles are played at the position + (0.0, entity.height, 0.0) for 0.5 seconds- 0.5 seconds are yielded
- The
Woosh6sound is played - DeathSmoke particles are played at the position + (0.0, entity.
height, 0.0) - ShakeScreen is called with an ammount of 0.1 for 0.5 seconds with dontreset
- The position is set to the sent position
- SlowSpinStop is called on the entity with a spinammount of (0.0, 30.0, 0.0) for 60.0 frames
- A second is yielded
FromGround / FromGroundInstant¶
- DeathSmoke paricles are played at the entity position
- entity.
startscaleis zeroed out - entity.
spritelocal scale is set to entity.startscale - A frame is yielded
- If the entity has a model, entity.
modellocal scale is set to entity.modelscale - If enemyid isn't a
PitcherFlytrapenemy, entity.animstate is set to 101 - entity.
spinis set to (0.0, 20.0, 0.0) - During the course of 30.0 frames tracked with a local frame counter (incremented by the game's frametime):
- entity.
startscaleis set to a lerp from Vector3.zero to (1.15, 1.15, 1.15) with a factor of the ratio of the amount of frames cumulated over 30.0 frames - entity.
spritelocal scale is set to entity.localscale - The local framecounter is advanced
- A frame is yielded
- entity.
- entity.
startscaleis set to (1.15, 1.15, 1.15) - entity.
spinis zeroed out - 0.5 seconds are yielded
- entity.animstate is set to 0 (
Idle)
FromGroundKeepScale¶
The same than FromGround / FromGroundInstant, but instead of having a final scale of (1.15, 1.15, 1.15) grown smoothly, the target scale is the startscale from endata
Offscreen¶
- A frame is yielded
- entity.
rigidhas its gravity disabled - MoveTowards is called on the entity to the sent position with a 2.0 multiplier
- All frames are yielded while the entity is in a
forcemove - entity.
rigidhas its gravity enabled - entity position is set to the sent position
OffscreenNoAnim / Raise¶
- A frame is yielded
- entity.
rigidhas its gravity disabled - During the course of 101.0 frames tracked with a local frame counter (incremented by the game's frametime):
- entity's position is set to a lerp from the position (or the overriden one if applicable) to the sent position (not the overriden one) with a factor of the ratio of the amount of frames cumulated over 101.0 frames
- The local framecounter is advanced
- A frame is yielded
- entity.
rigidhas its gravity enabled - entity's position is set to the sent position
Last adjustements¶
- If the sent cantmove is true,
enemydata[lastaddedid].cantmoveis set to 1 (one actor turn will need to pass for the enemy party member to act) - If
summonnewenemyis false,checkingdeadis set to null summonnewenemyis set to false