//----------------------------------------------------------------------------- // Constructors //----------------------------------------------------------------------------- public EffectUsedItem(Sprite sprite) : base() { // Create an animation of the sprite rising with two key-frames. Sprite spr1 = new Sprite(sprite); spr1.DrawOffset += new Point2I(-sprite.SourceRect.Width / 2, -12); Sprite spr2 = new Sprite(sprite); spr2.DrawOffset += new Point2I(-sprite.SourceRect.Width / 2, -20); Animation animation = new Animation(LoopMode.Reset); animation.AddFrame(0, 8, spr1); animation.AddFrame(8, 20, spr2); // Play the animation. destroyTimer = -1; destroyOnAnimationComplete = true; Graphics.PlayAnimation(animation); Graphics.DepthLayer = DepthLayer.EffectCling; // TODO: proper depth layer for EffectUsedItem }
public AnimationBuilder MakeFlicker(int alternateDelayTicks, bool startOn = true) { Animation newAnimation = new Animation(); for (int i = 0; i < animation.Frames.Count; i++) { AnimationFrame frame = animation.Frames[i]; int beginSection = frame.StartTime / (alternateDelayTicks * 2); int endSection = frame.EndTime / (alternateDelayTicks * 2); if (frame.EndTime % (alternateDelayTicks * 2) == 0) endSection--; for (int section = beginSection; section <= endSection; section++) { int t = section * alternateDelayTicks * 2; if (frame.StartTime < t + alternateDelayTicks && frame.EndTime > t) { AnimationFrame newFrame = new AnimationFrame(); newFrame.Sprite = frame.Sprite; newFrame.StartTime = Math.Max(frame.StartTime, t); newFrame.Duration = Math.Min(frame.EndTime, t + alternateDelayTicks) - newFrame.StartTime; newAnimation.AddFrame(newFrame); } } } animation.Frames = newAnimation.Frames; return this; }
//----------------------------------------------------------------------------- // Animations Loading //----------------------------------------------------------------------------- private static void LoadAnimations() { Resources.LoadAnimations("Animations/animations.conscript"); // Create gale effect animation. SpriteSheet sheet = Resources.GetSpriteSheet("color_effects"); ANIM_EFFECT_SEED_GALE = new Animation(); for (int i = 0; i < 12; i++) { int y = 1 + (((5 - (i % 4)) % 4) * 4); ANIM_EFFECT_SEED_GALE.AddFrame(i, 1, new Sprite( GameData.SHEET_COLOR_EFFECTS, ((i % 6) < 3 ? 4 : 5), y, -8, -8)); } Resources.SetResource("effect_seed_gale", ANIM_EFFECT_SEED_GALE); ANIM_COLOR_CUBE_ROLLING_ORIENTATIONS = new Animation[6, 4]; string[] orientations = { "blue_yellow", "blue_red", "yellow_red", "yellow_blue", "red_blue", "red_yellow" }; string[] directions = { "right", "up", "left", "down" }; for (int i = 0; i < 6; i++) { for (int j = 0; j < 4; j++) { ANIM_COLOR_CUBE_ROLLING_ORIENTATIONS[i, j] = Resources.GetResource<Animation>("color_cube_" + orientations[i] + "_" + directions[j]); } } IntegrateResources<Animation>("ANIM_"); ANIM_EFFECT_SEEDS = new Animation[5]; ANIM_EFFECT_SEEDS[(int) SeedType.Ember] = ANIM_EFFECT_SEED_EMBER; ANIM_EFFECT_SEEDS[(int) SeedType.Scent] = ANIM_EFFECT_SEED_SCENT; ANIM_EFFECT_SEEDS[(int) SeedType.Gale] = ANIM_EFFECT_SEED_GALE; ANIM_EFFECT_SEEDS[(int) SeedType.Pegasus] = ANIM_EFFECT_SEED_PEGASUS; ANIM_EFFECT_SEEDS[(int) SeedType.Mystery] = ANIM_EFFECT_SEED_MYSTERY; }