summaryrefslogtreecommitdiff
path: root/source/ui/elements/game/tooltips/CraftingTooltipDisplay.cs
blob: a7c6e2f4278e56c6c6b08acce99ea194aa93a6d7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
using Celesteia.Resources.Types;
using Celesteia.UI.Properties;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

namespace Celesteia.UI.Elements.Game.Tooltips {
    public class CraftingTooltipDisplay : TooltipDisplay
    {
        private const float OUTER_SPACING = 16f;
        private const float INNER_SPACING = 8f;
        public readonly Container Content;
        public readonly Label Title;
        public readonly ItemDisplay Item;
        public Container Recipe;

        public CraftingTooltipDisplay(Rect rect, Texture2D background) : base(rect) {
            AddChild(new Image(Rect.RelativeFull(new Rect(
                AbsoluteUnit.WithValue(0f),
                AbsoluteUnit.WithValue(0f),
                AbsoluteUnit.WithValue(256f + (2 * OUTER_SPACING)),
                AbsoluteUnit.WithValue(64f + (1 * INNER_SPACING) + (2 * OUTER_SPACING))
            ))).SetTexture(background).MakePatches(4).SetColor(Color.White));

            Content = new Container(new Rect(
                AbsoluteUnit.WithValue(OUTER_SPACING),
                AbsoluteUnit.WithValue(OUTER_SPACING),
                AbsoluteUnit.WithValue(256f),
                AbsoluteUnit.WithValue(64f + (1 * INNER_SPACING))
            ));

            Container titleCard = new Container(new Rect(
                AbsoluteUnit.WithValue(0f),
                AbsoluteUnit.WithValue(0f),
                new RelativeUnit(1f, Content.GetRect(), RelativeUnit.Orientation.Horizontal),
                AbsoluteUnit.WithValue(32f)
            ));
            titleCard.AddChild(Item = new ItemDisplay(new Rect(
                AbsoluteUnit.WithValue(0f),
                AbsoluteUnit.WithValue(0f),
                AbsoluteUnit.WithValue(32f),
                AbsoluteUnit.WithValue(32f)
            )) {
                Text = new TextProperties().Standard().SetTextAlignment(TextAlignment.Bottom | TextAlignment.Right)
            });
            titleCard.AddChild(Title = new Label(new Rect(
                AbsoluteUnit.WithValue(72f),
                AbsoluteUnit.WithValue(0f),
                AbsoluteUnit.WithValue(150f),
                AbsoluteUnit.WithValue(32f)
            )).SetTextProperties(new Properties.TextProperties().Standard().SetTextAlignment(TextAlignment.Left)).SetPivotPoint(new Vector2(0f, 0f)));
            Content.AddChild(titleCard);

            Recipe = new Container(new Rect(
                new RelativeUnit(.5f, Content.GetRect(), RelativeUnit.Orientation.Horizontal),
                AbsoluteUnit.WithValue(32f + INNER_SPACING),
                new RelativeUnit(1f, Content.GetRect(), RelativeUnit.Orientation.Horizontal),
                AbsoluteUnit.WithValue(32f)
            ));
            Content.AddChild(Recipe);

            AddChild(Content);

            SetEnabled(false);
        }

        public void SetRecipe(Recipe recipe) {
            Item.Item = recipe.Result.GetItemType();
            Title.SetText(recipe.Result.GetItemType().Name);

            if (Recipe != null) Recipe.Dispose();
            Recipe = new Container(new Rect(
                new RelativeUnit(0f, Content.GetRect(), RelativeUnit.Orientation.Horizontal),
                AbsoluteUnit.WithValue(32f + INNER_SPACING),
                new RelativeUnit(1f, Content.GetRect(), RelativeUnit.Orientation.Horizontal),
                AbsoluteUnit.WithValue(32f)
            ));
            Recipe.SetPivot(new Vector2(0f, 0f));

            for (int i = 0; i < recipe.Ingredients.Count; i++)
                Recipe.AddChild(new ItemDisplay(new Rect(
                    AbsoluteUnit.WithValue((i * INNER_SPACING) + (i * 32)),
                    AbsoluteUnit.WithValue(0f),
                    AbsoluteUnit.WithValue(32f),
                    AbsoluteUnit.WithValue(32f)
                )) {
                    Item = recipe.Ingredients[i].GetItemType(),
                    Amount = recipe.Ingredients[i].Amount,
                    Text = new TextProperties().Standard()
                        .SetTextAlignment(TextAlignment.Bottom | TextAlignment.Right)
                        .SetFontSize(12f)
                        .SetText(recipe.Ingredients[i].Amount.ToString())
                });
            
            Content.AddChild(Recipe);
        }
    }
}