Private
Public Access
1
0
Files
OrekiWoofsBeehives/OrekiWoofsBeehives/Config.cs

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,
};
}
}