Aetheria/Assets/Scripts/ServerShared/BlueprintData.cs
hyperion51 35fb4381ed Production/Demand Profiles and Blueprint Resource Requirements
Added the ability to associate blueprints and compound commodities with personality attributes
Added the ability to restrict blueprints according to the presence of resources, for resource harvesting infrastructure
Improved the properties panel UI for Sector and Tech tabs
2020-05-03 00:36:47 +01:00

85 lines
2.9 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using MessagePack;
using Newtonsoft.Json;
using Unity.Mathematics;
using static Unity.Mathematics.math;
[RethinkTable("Items"), Inspectable, MessagePackObject, JsonObject(MemberSerialization.OptIn)]
public class BlueprintData : DatabaseEntry, INamedEntry
{
[InspectableField, JsonProperty("name"), Key(1)]
public string Name;
[InspectableDatabaseLink(typeof(ItemData)), JsonProperty("ingredients"), Key(2)]
public Dictionary<Guid, int> Ingredients = new Dictionary<Guid, int>();
[InspectableDatabaseLink(typeof(ItemData)), JsonProperty("item"), Key(3)]
public Guid Item;
[InspectableField, JsonProperty("quantity"), Key(4)]
public int Quantity;
[InspectableField, JsonProperty("productionTime"), Key(5)]
public float ProductionTime;
[InspectableField, JsonProperty("quality"), Key(6)]
public float Quality;
[InspectableField, JsonProperty("qualityExponent"), Key(7)]
public float QualityExponent = 1;
[InspectableField, JsonProperty("productionExponent"), Key(8)]
public float ProductionExponent = 1;
[InspectableField, JsonProperty("randomExponent"), Key(9)]
public float RandomExponent = 1;
[InspectableField, JsonProperty("qualityFloor"), Key(10)]
public float QualityFloor = .25f;
[InspectableField, JsonProperty("statEffects"), Key(11)]
public List<BlueprintStatEffect> StatEffects = new List<BlueprintStatEffect>();
[InspectableField, JsonProperty("researchTime"), Key(12)]
public float ResearchTime;
[InspectableDatabaseLink(typeof(BlueprintData)), JsonProperty("researchDependencies"), Key(13)]
public List<Guid> Dependencies = new List<Guid>();
[InspectableDatabaseLink(typeof(CraftedItemData)), JsonProperty("factoryItem"), Key(14)]
public Guid FactoryItem;
[InspectableDatabaseLink(typeof(SimpleCommodityData)), JsonProperty("resourceRequirements"), Key(15)]
public Dictionary<Guid, int> ResourceRequirements = new Dictionary<Guid, int>();
[InspectableDatabaseLink(typeof(PersonalityAttribute)), JsonProperty("productionProfile"), Key(16)]
public Dictionary<Guid, float> ProductionProfile = new Dictionary<Guid, float>();
[IgnoreMember] public string EntryName
{
get => Name;
set => Name = value;
}
}
[InspectableField, MessagePackObject, JsonObject(MemberSerialization.OptIn)]
public class BlueprintStatEffect
{
[InspectableField, JsonProperty("ingredient"), Key(1)]
public Guid Ingredient;
[InspectableField, JsonProperty("stat"), Key(2)]
public StatReference StatReference = new StatReference();
}
[InspectableField, MessagePackObject, JsonObject(MemberSerialization.OptIn)]
public class StatReference
{
[InspectableType(typeof(IBehaviorData)), JsonProperty("behavior"), Key(1)]
public string Behavior;
[InspectableField, JsonProperty("stat"), Key(2)]
public string Stat;
}