public override void Update(float deltaTime) { for (var iterator = _attackPattern.First; iterator != null; iterator = iterator.Next) { PatternNode pattern = iterator.Value; pattern.Update(deltaTime); if (pattern.time < 0f) { pattern.function(); _attackPattern.Remove(pattern); } } Vector2 perlinValue = (new Vector2(Mathf.PerlinNoise(time * 0.2f, 0f), Mathf.PerlinNoise(0f, time * 0.2f)) * 2f - Vector2.one) * 8f; Vector3 targetPosition = _player.worldPosition + new Vector3(perlinValue.x, 8f + Mathf.Sin(time * 5f), perlinValue.y); velocity = Vector3.Lerp(velocity, targetPosition - worldPosition, deltaTime * 24f); int holdRuneCount = GetRunesByState(RuneState.Hold).Count; for (int i = 0; i < holdRuneCount; i++) { GetRunesByState(RuneState.Hold)[i]._targetPosition = worldPosition + CustomMath.HorizontalRotate(Vector3.right * 12f, (i * 360f / holdRuneCount) + (time * 120f)); } foreach (var rune in GetRunesByState(RuneState.ReadyDrop)) { rune._targetPosition = world.player.worldPosition + Vector3.up * 6f; } _entityParts[0].worldPosition = worldPosition; _entityParts[1].worldPosition = Vector3.Lerp(_entityParts[1].worldPosition, worldPosition, deltaTime * 10f); base.Update(deltaTime); }