summaryrefslogtreecommitdiff
path: root/src/SMAPI.Mods.ConsoleCommands/Framework/Commands/Player/SetStyleCommand.cs
blob: 8193ff27cd0f3cfcae62f4d9c824c522b9950ec1 (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
using System.Diagnostics.CodeAnalysis;
using StardewValley;

namespace StardewModdingAPI.Mods.ConsoleCommands.Framework.Commands.Player
{
    /// <summary>A command which edits a player style.</summary>
    [SuppressMessage("ReSharper", "UnusedMember.Global", Justification = "Loaded using reflection")]
    internal class SetStyleCommand : ConsoleCommand
    {
        /*********
        ** Public methods
        *********/
        /// <summary>Construct an instance.</summary>
        public SetStyleCommand()
            : base("player_changestyle", "Sets the style of a player feature.\n\nUsage: player_changestyle <target> <value>.\n- target: what to change (one of 'hair', 'shirt', 'skin', 'acc', 'shoe', 'swim', or 'gender').\n- value: the integer style ID.") { }

        /// <summary>Handle the command.</summary>
        /// <param name="monitor">Writes messages to the console and log file.</param>
        /// <param name="command">The command name.</param>
        /// <param name="args">The command arguments.</param>
        public override void Handle(IMonitor monitor, string command, ArgumentParser args)
        {
            // parse arguments
            if (!args.TryGet(0, "target", out string? target, oneOf: new[] { "hair", "shirt", "acc", "skin", "shoe", "swim", "gender" }))
                return;
            if (!args.TryGetInt(1, "style ID", out int styleID))
                return;

            // handle
            switch (target)
            {
                case "hair":
                    Game1.player.changeHairStyle(styleID);
                    monitor.Log("OK, your hair style is updated.", LogLevel.Info);
                    break;

                case "shirt":
                    Game1.player.changeShirt(styleID);
                    monitor.Log("OK, your shirt style is updated.", LogLevel.Info);
                    break;

                case "acc":
                    Game1.player.changeAccessory(styleID);
                    monitor.Log("OK, your accessory style is updated.", LogLevel.Info);
                    break;

                case "skin":
                    Game1.player.changeSkinColor(styleID);
                    monitor.Log("OK, your skin color is updated.", LogLevel.Info);
                    break;

                case "shoe":
                    Game1.player.changeShoeColor(styleID);
                    monitor.Log("OK, your shoe style is updated.", LogLevel.Info);
                    break;

                case "swim":
                    switch (styleID)
                    {
                        case 0:
                            Game1.player.changeOutOfSwimSuit();
                            monitor.Log("OK, you're no longer in your swimming suit.", LogLevel.Info);
                            break;
                        case 1:
                            Game1.player.changeIntoSwimsuit();
                            monitor.Log("OK, you're now in your swimming suit.", LogLevel.Info);
                            break;
                        default:
                            this.LogUsageError(monitor, "The swim value should be 0 (no swimming suit) or 1 (swimming suit).");
                            break;
                    }
                    break;

                case "gender":
                    switch (styleID)
                    {
                        case 0:
                            Game1.player.changeGender(true);
                            monitor.Log("OK, you're now male.", LogLevel.Info);
                            break;
                        case 1:
                            Game1.player.changeGender(false);
                            monitor.Log("OK, you're now female.", LogLevel.Info);
                            break;
                        default:
                            this.LogUsageError(monitor, "The gender value should be 0 (male) or 1 (female).");
                            break;
                    }
                    break;
            }
        }
    }
}