diff --git a/Content.Client/EntryPoint.cs b/Content.Client/EntryPoint.cs index c8ab1376c7..35fb7b7748 100644 --- a/Content.Client/EntryPoint.cs +++ b/Content.Client/EntryPoint.cs @@ -143,6 +143,7 @@ namespace Content.Client "Bucket", "Puddle", "CanSpill", + "Microwave" }; foreach (var ignoreName in registerIgnore) diff --git a/Content.Server/GameObjects/Components/Kitchen/KitchenMicrowaveComponent.cs b/Content.Server/GameObjects/Components/Kitchen/KitchenMicrowaveComponent.cs index a997471845..13f2c36411 100644 --- a/Content.Server/GameObjects/Components/Kitchen/KitchenMicrowaveComponent.cs +++ b/Content.Server/GameObjects/Components/Kitchen/KitchenMicrowaveComponent.cs @@ -1,34 +1,135 @@ +using System.Collections.Generic; using Content.Server.GameObjects.Components.Sound; using Content.Server.GameObjects.EntitySystems; +using Content.Server.GameObjects.Components; using Content.Shared.Audio; using Robust.Server.GameObjects; using Robust.Shared.Audio; using Robust.Shared.GameObjects; -using Robust.Shared.Interfaces.Random; using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Prototypes; -using Robust.Shared.Random; -using Robust.Shared.Serialization; -using Robust.Shared.Utility; using Robust.Shared.ViewVariables; +using Content.Server.GameObjects.Components.Chemistry; +using Content.Shared.Chemistry; +using Robust.Shared.Serialization; +using Robust.Shared.Interfaces.GameObjects; +using Content.Shared.Kitchen; namespace Content.Server.GameObjects.Components.Kitchen { [RegisterComponent] - + [ComponentReference(typeof(IActivate))] public class KitchenMicrowaveComponent : Component, IActivate { #pragma warning disable 649 [Dependency] private readonly IPrototypeManager _prototypeManager; + [Dependency] private readonly IEntityManager _entityManager; #pragma warning restore 649 public override string Name => "Microwave"; - public void Activate(ActivateEventArgs eventArgs) + private AppearanceComponent _appearanceComponent; + + [ViewVariables] + private string _useSound; + [ViewVariables] + private string _outputPrototype; + [ViewVariables] + private SolutionComponent _contents; + + private static List _allRecipes; + + public override void ExposeData(ObjectSerializer serializer) { + base.ExposeData(serializer); + if(_allRecipes == null) + { + _allRecipes = new List(); + foreach (var recipe in _prototypeManager.EnumeratePrototypes()) + { + + _allRecipes.Add(recipe); + + } + _allRecipes.Sort(new RecipeComparer()); + } } + + private class RecipeComparer : IComparer + { + int IComparer.Compare(MicrowaveMealRecipePrototype x, MicrowaveMealRecipePrototype y) + { + if(x == null || y == null) + { + return 0; + } + + if(x.Ingredients.Count < y.Ingredients.Count) + { + return 1; + } + + return 0; + } + } + + public override void Initialize() + { + base.Initialize(); + if (_contents == null) + { + if (Owner.TryGetComponent(out SolutionComponent solutionComponent)) + { + _contents = solutionComponent; + } + else + { + _contents = Owner.AddComponent(); + } + } + } + + void IActivate.Activate(ActivateEventArgs eventArgs) + { + if(_contents.ReagentList.Count > 0) + { + DetermineRecipe(); + } + + } + + private void DetermineRecipe() + { + foreach (var r in _allRecipes) + { + if(CheckReagents(r)) + { + var outputFromRecipe = r.OutPutPrototype; + _entityManager.SpawnEntity(outputFromRecipe, Owner.Transform.GridPosition); + } + } + } + + private bool CheckReagents(MicrowaveMealRecipePrototype recipe) + { + foreach(var ingredient in recipe.Ingredients) + { + var ingName = ingredient.Key.ToString(); + var ingQuantity = ingredient.Value; + if (!_contents.ContainsReagent(ingName, out var amt) && amt != ingQuantity) return false; + _contents.TryRemoveReagent(ingName, ReagentUnit.New(ingQuantity)); + + //This doesnt work. + + } + return true; + + } + + + } } diff --git a/Content.Shared/Kitchen/MicrowaveMealRecipePrototype.cs b/Content.Shared/Kitchen/MicrowaveMealRecipePrototype.cs index d20d63025b..c0804a7530 100644 --- a/Content.Shared/Kitchen/MicrowaveMealRecipePrototype.cs +++ b/Content.Shared/Kitchen/MicrowaveMealRecipePrototype.cs @@ -14,35 +14,25 @@ namespace Content.Shared.Kitchen [Prototype("microwaveMealRecipe")] - public class FoodRecipe : IPrototype, IIndexedPrototype + public class MicrowaveMealRecipePrototype : IPrototype, IIndexedPrototype { public string ID {get; private set;} public string Name {get; private set;} - public string Description {get; private set;} - - public Dictionary Ingredients {get; private set;} - - private const char Seperator = ','; - + public string OutPutPrototype { get; private set; } + public Dictionary Ingredients {get; private set;} public void LoadFrom(YamlMappingNode mapping) { ID = mapping.GetNode("id").ToString(); Name = Loc.GetString(mapping.GetNode("name").ToString()); - Description = Loc.GetString(mapping.GetNode("description").ToString()); - if(mapping.TryGetNode("ingredients", out YamlSequenceNode tempDict)) + OutPutPrototype = mapping.GetNode("output").ToString(); + if(mapping.TryGetNode("ingredients", out YamlMappingNode ingDict)) { Ingredients = new Dictionary(); - foreach (var node in tempDict.Children) + foreach (var kvp in ingDict.Children) { - var pair = node.ToString(); - if (pair == null) continue; - - var split = pair.Split(Seperator); - var ingnName = split[0]; - if (int.TryParse(split[1], out var amt)) Ingredients.Add(ingnName, amt); - + Ingredients.Add(kvp.Key.ToString(), kvp.Value.AsInt()); } } diff --git a/Resources/Prototypes/Entities/kitchen.yml b/Resources/Prototypes/Entities/kitchen.yml new file mode 100644 index 0000000000..a3daf036b4 --- /dev/null +++ b/Resources/Prototypes/Entities/kitchen.yml @@ -0,0 +1,30 @@ +- type: entity + id: KitchenMicrowave + name: Microwave + description: It's magic. + components: + - type: Microwave + - type: Clickable + - type: InteractionOutline + - type: Solution + maxVol: 100 + caps: 1 + + - type: Collidable + shapes: + - !type:PhysShapeAabb + bounds: "-0.5,0,0.5,1" + layer: 15 + IsScrapingFloor: true + - type: Sprite + netsync: false + sprite: Buildings/medical_scanner.rsi + layers: + - state: scanner_open + map: ["enum.MedicalScannerVisualLayers.Machine"] + - state: scanner_terminal_blue + map: ["enum.MedicalScannerVisualLayers.Terminal"] + - type: PowerDevice + - type: Icon + sprite: Buildings/medical_scanner.rsi + state: scanner_open diff --git a/Resources/Prototypes/Kitchen/meal_recipes.yml b/Resources/Prototypes/Kitchen/meal_recipes.yml index 4082dad6eb..2b088ed8be 100644 --- a/Resources/Prototypes/Kitchen/meal_recipes.yml +++ b/Resources/Prototypes/Kitchen/meal_recipes.yml @@ -1,7 +1,17 @@ - type: microwaveMealRecipe - id: RecipeBurger - name: "Burger" - description: "A burger, in space." + id: RecipeCheeseburger + name: "Cheeseburger Recipe" + output: FoodCheeseburger ingredients: - - "Flour,15" - - "Meat,5" + chem.H2O: 15 + chem.Nutriment: 5 + +- type: microwaveMealRecipe + id: RecipeFlashlight + name: "Flashlight Recipe" + output: FlashlightLantern + ingredients: + chem.H2O: 15 + chem.Nutriment: 20 + chem.Glucose: 5 +