protected override void UpdateInitialTransforms() { base.UpdateInitialTransforms(); normalAnimation.Show(); hitAnimation.Hide(); }
protected override void UpdateStateTransforms(ArmedState state) { switch (state) { case ArmedState.Idle: UnproxyContent(); break; case ArmedState.Miss: this.FadeOut(300); break; case ArmedState.Hit: ProxyContent(); normalAnimation.Hide(); hitAnimation.Show(); const float gravity_time = 300; float randomness = -0.5f + (float)random.NextDouble(); float rotation = -180 + randomness * 50f; float gravityTravelHeight = randomness * 50f + (HitObject.Lane == LanedHitLane.Air ? 500f : 400f); this.RotateTo(rotation, gravity_time); this.MoveToY(-gravityTravelHeight, gravity_time, Easing.Out) .Then() .MoveToY(gravityTravelHeight * 2, gravity_time * 2, Easing.In); this.FadeOut(300); break; } }
protected override void CheckForResult(bool userTriggered, double timeOffset) { if (userTriggered) { DrawableMiniBossTick nextTick = null; foreach (var t in ticks) { if (!t.IsHit) { nextTick = t; break; } } nextTick?.TriggerResult(HitResult.Great); var numHits = ticks.Count(r => r.IsHit); var completion = (float)numHits / HitObject.RequiredHits; normalAnimation.Hide(); hitAnimation.Show(); hitAnimation.ScaleTo(base_sprite_scale + Math.Min(target_sprite_scale - base_sprite_scale, (target_sprite_scale - base_sprite_scale) * completion), 260, Easing.OutQuint); // TODO: update bonus score somehow? if (HitObject.HitWindows.CanBeHit(timeOffset)) { OnAttacked(this, timeOffset); } } else { if (timeOffset < 0) { return; } int numHits = 0; foreach (var tick in ticks) { if (tick.IsHit) { numHits++; continue; } tick.TriggerResult(HitResult.Miss); } var hitResult = numHits == HitObject.RequiredHits ? HitResult.Great : numHits > HitObject.RequiredHits / 2 ? HitResult.Good : HitResult.Miss; ApplyResult(r => r.Type = hitResult); } }
protected override void CheckForResult(bool userTriggered, double timeOffset) { if (Time.Current < HitObject.StartTime || AllJudged) { return; } if (userTriggered && timeOffset < 0) { var nextTick = ticks.FirstOrDefault(t => !t.IsHit); nextTick?.TriggerResult(HitResult.Perfect); var numHits = ticks.Count(r => r.IsHit); var completion = (float)numHits / HitObject.RequiredHits; normalAnimation.Hide(); hitAnimation.Show(); hitAnimation.ScaleTo(base_sprite_scale + Math.Min(target_sprite_scale - base_sprite_scale, (target_sprite_scale - base_sprite_scale) * completion), 260, Easing.OutQuint); OnAttacked(this, timeOffset); } else if (!userTriggered && timeOffset >= 0) { int numHits = 0; foreach (var tick in ticks) { if (tick.IsHit) { numHits++; continue; } tick.TriggerResult(HitResult.Miss); } var hitResult = numHits == HitObject.RequiredHits ? HitResult.Perfect : numHits > HitObject.RequiredHits / 2 ? HitResult.Great : HitResult.Miss; ApplyResult(r => r.Type = hitResult); } }