235 lines
8.2 KiB
C#
235 lines
8.2 KiB
C#
using OrekiWoofsBees.Common.Configs;
|
|
using ProtoBuf;
|
|
|
|
namespace OrekiWoofsBeehives;
|
|
|
|
[ProtoContract(SkipConstructor = true)]
|
|
public class Config
|
|
{
|
|
public static Config Instance { get; internal set; } = new();
|
|
|
|
[ProtoMember(1)]
|
|
[ConfigCommand(serverSide: true, Min = 5, Max = 70)]
|
|
public int BeehiveRadius { get; set; } = 35;
|
|
|
|
[ProtoMember(41)]
|
|
[ConfigCommand(serverSide: true)]
|
|
public bool YieldBoost { get; set; } = true;
|
|
|
|
[ProtoMember(42)]
|
|
[ConfigCommand(serverSide: true)]
|
|
public bool SpeedBoost { get; set; } = false;
|
|
|
|
[ProtoMember(2)]
|
|
[ConfigCommand(serverSide: true, Min = 0, Max = 1)]
|
|
public float GrowthSpeedBonus { get; set; } = 0.2f;
|
|
|
|
[ProtoMember(37)]
|
|
[ConfigCommand(serverSide: true, Min = 0.1, Max = 3)]
|
|
public float YieldMultiplier { get; set; } = 1.2f;
|
|
|
|
[ProtoMember(31)]
|
|
[ConfigCommand(serverSide: true, Min = 5, Max = 50)]
|
|
public int PlantsFullBoostDistanceToHive { get; set; } = 20;
|
|
|
|
[ProtoMember(32)]
|
|
[ConfigCommand(serverSide: true, Min = 100, Max = 5000)]
|
|
public int MinBeesForPlantBoost { get; set; } = 1000;
|
|
|
|
[ProtoMember(46)]
|
|
[ConfigCommand(serverSide: true, AllowedValues = new[] { "Full", "LinearPopulation", "NormalizedLogk10Population" })]
|
|
public string BoostCalculation { get; set; } = "NormalizedLogk10Population";
|
|
|
|
[ProtoMember(47)]
|
|
[ConfigCommand(serverSide: true, Min = 0, Max = 100)]
|
|
public float PopulationPercentForMaxBoost { get; set; } = 100f;
|
|
|
|
[ProtoMember(48)]
|
|
[ConfigCommand(serverSide: true, AllowedValues = new[] { "Additive", "Max" })]
|
|
public string MultipleBeehivesBoostCombination { get; set; } = "Max";
|
|
|
|
// bee population
|
|
[ProtoMember(3)]
|
|
[ConfigCommand(serverSide: true, Min = 1000, Max = 200000)]
|
|
public int MaxBeePopulation { get; set; } = 50000;
|
|
|
|
[ProtoMember(4)]
|
|
[ConfigCommand(serverSide: true, Min = 100, Max = 50000)]
|
|
public int InitialBeePopulation { get; set; } = 5000;
|
|
|
|
[ProtoMember(49)]
|
|
[ConfigCommand(serverSide: true, Min = 0, Max = 200000)]
|
|
public int BeehiveConsideredEmptyBelowPopulation { get; set; } = 500;
|
|
|
|
[ProtoMember(50)]
|
|
[ConfigCommand(serverSide: true, Min = 40, Max = 100)]
|
|
public int PopulationPercentRequirementForSwarm { get; set; } = 80;
|
|
|
|
[ProtoMember(51)]
|
|
[ConfigCommand(serverSide: true, Min = 1, Max = 70)]
|
|
public int SwarmPopulationPercentage { get; set; } = 40;
|
|
|
|
[ProtoMember(54)]
|
|
[ConfigCommand(serverSide: true, Min = 0, Max = 70)]
|
|
public int SwarmPopulationPercentageWhenNoBeehivesAvailable { get; set; } = 0;
|
|
|
|
[ProtoMember(52)]
|
|
[ConfigCommand(serverSide: true, Min = 1, Max = 30)]
|
|
public int SwarmCooldownDays { get; set; } = 8;
|
|
|
|
[ProtoMember(53)]
|
|
[ConfigCommand(serverSide: true, Min = 0, Max = 100)]
|
|
public int SwarmReturnToOriginOnFailedMigrationPercent { get; set; } = 20;
|
|
|
|
[ProtoMember(56)]
|
|
[ConfigCommand(serverSide: true, Min = 1, Max = 1000)]
|
|
public int PreSwarmDurationHours { get; set; } = 40;
|
|
|
|
[ProtoMember(55)]
|
|
[ConfigCommand(serverSide: true)]
|
|
public bool EnableSwarms { get; set; } = true;
|
|
|
|
[ProtoMember(57)]
|
|
[ConfigCommand(serverSide: true)]
|
|
public bool SwarmSettingAfterPlacing { get; set; } = true;
|
|
|
|
[ProtoMember(5)]
|
|
[ConfigCommand(serverSide: true, Min = 0, Max = 1000)]
|
|
public int BaseDeathsPerDay { get; set; } = 100;
|
|
|
|
[ProtoMember(6)]
|
|
[ConfigCommand(serverSide: true, Min = 0, Max = 50)]
|
|
public int FlowerThreshold { get; set; } = 10;
|
|
|
|
[ProtoMember(7)]
|
|
[ConfigCommand(serverSide: true, Min = 0, Max = 500)]
|
|
public int DeathPerMissingFlower { get; set; } = 100;
|
|
|
|
[ProtoMember(8)]
|
|
[ConfigCommand(serverSide: true, Min = 1, Max = 30)]
|
|
public float DoublingTimeDays { get; set; } = 9.0f;
|
|
|
|
[ProtoMember(9)]
|
|
[ConfigCommand(serverSide: true, Min = 0, Max = 2000)]
|
|
public int BonusGrowthPerFilledFrame { get; set; } = 100;
|
|
|
|
// honey production
|
|
[ProtoMember(10)]
|
|
[ConfigCommand(serverSide: true, Min = 1, Max = 50)]
|
|
public float ReferenceFlowers { get; set; } = 10.0f;
|
|
|
|
[ProtoMember(11)]
|
|
[ConfigCommand(serverSide: true, Min = 1000, Max = 50000)]
|
|
public float ReferenceBees { get; set; } = 25000.0f;
|
|
|
|
[ProtoMember(12)]
|
|
[ConfigCommand(serverSide: true, Min = 1, Max = 100)]
|
|
public int MaxFlowersForHoneyProduction { get; set; } = 25;
|
|
|
|
// winter
|
|
[ProtoMember(38)]
|
|
[ConfigCommand(serverSide: true)]
|
|
public bool WinterHardMode { get; set; } = false;
|
|
|
|
[ProtoMember(39)]
|
|
[ConfigCommand(serverSide: true, Min = 0, Max = 50000)]
|
|
public int WinterDailyBeeDeathsWithoutFood { get; set; } = 500;
|
|
|
|
[ProtoMember(40)]
|
|
[ConfigCommand(serverSide: true, Min = 0, Max = 1)]
|
|
public float WinterFoodConsumptionMultiplier { get; set; } = 0.1f;
|
|
|
|
// weather effects
|
|
[ProtoMember(15)]
|
|
[ConfigCommand(serverSide: true, Min = -20, Max = 20)]
|
|
public float TemperatureMinimum { get; set; } = 0f;
|
|
|
|
[ProtoMember(16)]
|
|
[ConfigCommand(serverSide: true, Min = 0, Max = 40)]
|
|
public float TemperatureOptimal { get; set; } = 10f;
|
|
|
|
[ProtoMember(35)]
|
|
[ConfigCommand(serverSide: true)]
|
|
public bool GreenhouseAffectsBeehive { get; set; } = true;
|
|
|
|
// particles
|
|
[ProtoMember(28)]
|
|
[ConfigCommand(serverSide: true, Min = 100, Max = 5000)]
|
|
public int BeesPerParticle { get; set; } = 1000;
|
|
|
|
[ProtoMember(34)]
|
|
[ConfigCommand(serverSide: true, Min = 0, Max = 50)]
|
|
public int BeehiveAlwaysSpawnNumberOfBees { get; set; } = 0;
|
|
|
|
// client-side
|
|
[ProtoMember(29)]
|
|
[ConfigCommand(serverSide: false, Min = 0, Max = 4)]
|
|
public int InformationVerbosity { get; set; } = 2;
|
|
|
|
[ProtoMember(44)]
|
|
[ConfigCommand(serverSide: false)]
|
|
public bool DisableServerRecommended { get; set; } = false;
|
|
|
|
[ProtoMember(33)]
|
|
[ConfigCommand(serverSide: false, Min = 0, Max = 1)]
|
|
public float BeehiveAmbientVolume { get; set; } = 0.5f;
|
|
|
|
// server-side
|
|
[ProtoMember(43)]
|
|
[ConfigCommand(serverSide: true, AllowedValues = new[] { "ClientSide", "ServerRecommended", "ServerForced" })]
|
|
public string InformationVerbosityServerSideType { get; set; } = "ClientSide";
|
|
|
|
[ProtoMember(45)]
|
|
[ConfigCommand(serverSide: true, Min = 0, Max = 4)]
|
|
public int InformationVerbosityServer { get; set; } = 1;
|
|
|
|
public InformationVerbosityServerSideType GetInformationVerbosityServerSideType()
|
|
{
|
|
return InformationVerbosityServerSideType switch
|
|
{
|
|
"ClientSide" => OrekiWoofsBeehives.InformationVerbosityServerSideType.ClientSide,
|
|
"ServerRecommended" => OrekiWoofsBeehives.InformationVerbosityServerSideType.ServerRecommended,
|
|
"ServerForced" => OrekiWoofsBeehives.InformationVerbosityServerSideType.ServerForced,
|
|
_ => OrekiWoofsBeehives.InformationVerbosityServerSideType.ClientSide,
|
|
};
|
|
}
|
|
|
|
public int GetEffectiveInformationVerbosity()
|
|
{
|
|
switch (GetInformationVerbosityServerSideType())
|
|
{
|
|
case OrekiWoofsBeehives.InformationVerbosityServerSideType.ClientSide:
|
|
return InformationVerbosity;
|
|
case OrekiWoofsBeehives.InformationVerbosityServerSideType.ServerRecommended:
|
|
if (DisableServerRecommended)
|
|
return InformationVerbosity;
|
|
return InformationVerbosityServer;
|
|
case OrekiWoofsBeehives.InformationVerbosityServerSideType.ServerForced:
|
|
return InformationVerbosityServer;
|
|
default:
|
|
return InformationVerbosity;
|
|
}
|
|
}
|
|
|
|
public BoostCalculationType GetBoostCalculationType()
|
|
{
|
|
return BoostCalculation switch
|
|
{
|
|
"Full" => BoostCalculationType.Full,
|
|
"LinearPopulation" => BoostCalculationType.LinearPopulation,
|
|
"NormalizedLogk10Population" => BoostCalculationType.NormalizedLogk10Population,
|
|
_ => BoostCalculationType.Full,
|
|
};
|
|
}
|
|
|
|
public MultipleBeehivesBoostCombinationType GetMultipleBeehivesBoostCombinationType()
|
|
{
|
|
return MultipleBeehivesBoostCombination switch
|
|
{
|
|
"Additive" => MultipleBeehivesBoostCombinationType.Additive,
|
|
"Max" => MultipleBeehivesBoostCombinationType.Max,
|
|
_ => MultipleBeehivesBoostCombinationType.Max,
|
|
};
|
|
}
|
|
}
|