2020-06-08 18:01:10 +02:00
|
|
|
using System;
|
|
|
|
using System.Collections.Generic;
|
|
|
|
using System.Runtime.Serialization;
|
2020-06-29 00:41:49 +02:00
|
|
|
using Microsoft.Xna.Framework;
|
2020-06-08 18:01:10 +02:00
|
|
|
using MLEM.Textures;
|
|
|
|
using Newtonsoft.Json;
|
2020-06-11 01:18:06 +02:00
|
|
|
using static TouchyTickets.Attractions.AttractionFlags;
|
2020-06-08 18:01:10 +02:00
|
|
|
|
|
|
|
namespace TouchyTickets.Attractions {
|
|
|
|
[JsonConverter(typeof(Converter))]
|
|
|
|
public class AttractionModifier {
|
|
|
|
|
|
|
|
public static readonly Dictionary<string, AttractionModifier> Modifiers = new Dictionary<string, AttractionModifier>();
|
|
|
|
|
|
|
|
static AttractionModifier() {
|
2020-06-29 00:41:49 +02:00
|
|
|
Register(new AttractionModifier("Lubricant", 200, Cars | FastCars, 1.02F, new Point(0, 4)));
|
|
|
|
Register(new AttractionModifier("LouderMusic", 500, Relaxed, 1.03F, new Point(2, 4)));
|
2020-07-01 00:56:46 +02:00
|
|
|
Register(new AttractionModifier("SmallAds", 800, Small, 1.35F, new Point(5, 4)));
|
2020-06-29 00:41:49 +02:00
|
|
|
Register(new AttractionModifier("LongerQueue", 1000, All, 1.06F, new Point(1, 4)));
|
|
|
|
Register(new AttractionModifier("Bouncer", 1500, Walking, 1.2F, new Point(3, 4)));
|
|
|
|
Register(new AttractionModifier("OnRideCameras", 2500, FastCars, 1.1F, new Point(4, 4)));
|
2020-06-08 18:01:10 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public readonly string Name;
|
|
|
|
public readonly long InitialPrice;
|
2020-06-29 00:41:49 +02:00
|
|
|
public readonly Point Texture;
|
2020-06-08 18:01:10 +02:00
|
|
|
public readonly float Multiplier;
|
|
|
|
private readonly AttractionFlags affectedFlags;
|
|
|
|
|
2020-06-29 00:41:49 +02:00
|
|
|
public AttractionModifier(string name, long initialPrice, AttractionFlags affectedFlags, float multiplier, Point texture) {
|
2020-06-08 18:01:10 +02:00
|
|
|
this.Name = name;
|
|
|
|
this.InitialPrice = initialPrice;
|
|
|
|
this.affectedFlags = affectedFlags;
|
|
|
|
this.Texture = texture;
|
|
|
|
this.Multiplier = multiplier;
|
|
|
|
}
|
|
|
|
|
|
|
|
public bool IsAffected(Attraction attraction) {
|
|
|
|
return (attraction.Type.Flags & this.affectedFlags) != 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
private static AttractionModifier Register(AttractionModifier type) {
|
|
|
|
Modifiers.Add(type.Name, type);
|
|
|
|
return type;
|
|
|
|
}
|
|
|
|
|
|
|
|
public class Converter : JsonConverter<AttractionModifier> {
|
|
|
|
|
|
|
|
public override void WriteJson(JsonWriter writer, AttractionModifier value, JsonSerializer serializer) {
|
|
|
|
if (value != null)
|
|
|
|
writer.WriteValue(value.Name);
|
|
|
|
}
|
|
|
|
|
|
|
|
public override AttractionModifier ReadJson(JsonReader reader, Type objectType, AttractionModifier existingValue, bool hasExistingValue, JsonSerializer serializer) {
|
|
|
|
return reader.Value != null ? Modifiers[reader.Value.ToString()] : null;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
[DataContract]
|
|
|
|
public class ActiveModifier {
|
|
|
|
|
|
|
|
[DataMember]
|
|
|
|
public readonly AttractionModifier Modifier;
|
|
|
|
[DataMember]
|
|
|
|
public int Amount;
|
|
|
|
|
|
|
|
public ActiveModifier(AttractionModifier modifier, int amount) {
|
|
|
|
this.Modifier = modifier;
|
|
|
|
this.Amount = amount;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|