//========= CONSTRUCTORS ========= #region Constructors /**<summary>Constructs the default object header.</summary>*/ public AttractionHeader() { Reserved0x00 = 0; Flags = AttractionFlags.None; TrackTypeList = new TrackTypes[3]; for (int i = 0; i < TrackTypeList.Length; i++) { TrackTypeList[i] = TrackTypes.None; } MinCarsPerTrain = 0; MaxCarsPerTrain = 0; CarsPerFlatRide = 0; ZeroCars = 0; CarTabIndex = 0; DefaultCarType = CarTypes.CarType0; FrontCarType = CarTypes.None; SecondCarType = CarTypes.None; RearCarType = CarTypes.None; ThirdCarType = CarTypes.None; Padding0x19 = 0; CarTypeList = new CarHeader[4]; for (int i = 0; i < CarTypeList.Length; i++) { CarTypeList[i] = new CarHeader(); } Excitement = 0; Intensity = 0; Nausea = 0; MaxHeight = 0; AvailableTrackSections = TrackSections.None; RideCategory = RideCategories.None; RideCategoryAlternate = RideCategories.None; SoldItem1 = ItemTypes.None; SoldItem2 = ItemTypes.None; }
//=========== DRAWING ============ #region Drawing /**<summary>Constructs the default object.</summary>*/ public override bool Draw(PaletteImage p, Point position, DrawSettings drawSettings) { try { if (Header.RideCategory == RideCategories.Stall) { graphicsData.paletteImages[3 + drawSettings.Rotation].DrawWithOffset(p, position, drawSettings.Darkness, false, drawSettings.Remap1, RemapColors.None, RemapColors.None ); if ((drawSettings.Rotation == 0 || drawSettings.Rotation == 3) && (Header.TrackType == TrackTypes.Restroom || Header.TrackType == TrackTypes.FirstAid)) { graphicsData.paletteImages[3 + 4 + drawSettings.Rotation / 3].DrawWithOffset(p, position, drawSettings.Darkness, false, drawSettings.Remap1, RemapColors.None, RemapColors.None ); } } else { int nextCarOffset = 0; for (int i = 0; i <= (int)drawSettings.CurrentCar; i++) { CarHeader car = Header.CarTypeList[i]; int C = 0; // Offset for this car int R = car.LastRotationFrame + 1; // number of rotation frames int F = 1; // Number of frames per rotation int P = car.RiderSprites; // number of rider sprites int A = 1; // number of animation frames if (car.IsAnimated) { A = 4; } if (car.Flags.HasFlag(CarFlags.Spinning)) { if (car.Flags.HasFlag(CarFlags.SpinningIndependantWheels)) { F *= (car.LastRotationFrame + 1); } } if (car.Flags.HasFlag(CarFlags.Swinging)) { int swingingFrames = 5; if (car.Flags.HasFlag(CarFlags.SwingingMoreFrames)) { swingingFrames += 2; } if (car.Flags.HasFlag(CarFlags.SwingingSlide)) { swingingFrames += 2; } if (car.Flags.HasFlag(CarFlags.SwingingTilting)) { swingingFrames -= 2; } F *= swingingFrames; } if (car.SpecialFrames != 0) { F *= car.SpecialFrames; } if (i == (int)drawSettings.CurrentCar) { graphicsData.paletteImages[3 + nextCarOffset + drawSettings.Rotation * F * A + drawSettings.Frame].DrawWithOffset(p, position, drawSettings.Darkness, false, drawSettings.Remap1, (car.Flags.HasFlag(CarFlags.Remap2) ? drawSettings.Remap2 : RemapColors.None), (!car.Flags.HasFlag(CarFlags.NoRemap3) ? drawSettings.Remap3 : RemapColors.None)); } else { if (car.SpriteFlags.HasFlag(CarSpriteFlags.Flat)) { C += (R * F); } if (car.SpriteFlags.HasFlag(CarSpriteFlags.GentleSlopes)) { C += ((4 * F) * 2) + ((R * F) * 2); } if (car.SpriteFlags.HasFlag(CarSpriteFlags.SteepSlopes)) { C += ((8 * F) * 2) + ((R * F) * 2); } if (car.SpriteFlags.HasFlag(CarSpriteFlags.VerticalSlopes)) { C += ((4 * F) * 2) + ((R * F) * 2) + (((4 * F) * 2) * 5) + (4 * F); } if (car.SpriteFlags.HasFlag(CarSpriteFlags.DiagonalSlopes)) { C += ((4 * F) * 2) + ((4 * F) * 2) + ((4 * F) * 2); } if (car.SpriteFlags.HasFlag(CarSpriteFlags.FlatBanked)) { C += ((8 * F) * 2) + ((R * F) * 2); } if (car.SpriteFlags.HasFlag(CarSpriteFlags.InlineTwists)) { C += ((4 * F) * 10); } if (car.SpriteFlags.HasFlag(CarSpriteFlags.FlatToGentleSlopeBankedTransitions)) { C += ((R * F) * 4); } if (car.SpriteFlags.HasFlag(CarSpriteFlags.DiagonalGentleSlopeBankedTransitions)) { C += ((4 * F) * 4); } if (car.SpriteFlags.HasFlag(CarSpriteFlags.GentleSlopeBankedTransitions)) { C += ((4 * F) * 4); } if (car.SpriteFlags.HasFlag(CarSpriteFlags.GentleSlopeBankedTurns)) { C += ((R * F) * 4); } if (car.SpriteFlags.HasFlag(CarSpriteFlags.FlatToGentleSlopeWhileBankedTransitions)) { C += ((4 * F) * 4); } if (car.SpriteFlags.HasFlag(CarSpriteFlags.Corkscrews)) { C += ((4 * F) * 20); } if (car.SpriteFlags.HasFlag(CarSpriteFlags.RestraintAnimation)) { C += ((4 * F) * 3); } C *= (P + 1 * A); nextCarOffset += C; } } } } catch (IndexOutOfRangeException) { return(false); } catch (ArgumentOutOfRangeException) { return(false); } return(true); }