154 lines
5.1 KiB
C#
154 lines
5.1 KiB
C#
using System;
|
|
using System.Reflection;
|
|
using System.Collections.Generic;
|
|
using System.Collections.Immutable;
|
|
using System.Linq;
|
|
using System.IO;
|
|
|
|
using Barotrauma;
|
|
using HarmonyLib;
|
|
using Microsoft.Xna.Framework;
|
|
using QICrabUI;
|
|
using QIDependencyInjection;
|
|
|
|
namespace QuickInteractions
|
|
{
|
|
public class QuickTalkButton : CUIHorizontalList
|
|
{
|
|
[Dependency] public static Debugger Debugger { get; set; }
|
|
public static float MotinorScale = 1.0f;
|
|
public static Point IconTextureSize = new Point(139, 75);
|
|
public static float IconProportions = (float)IconTextureSize.X / (float)IconTextureSize.Y;
|
|
public static float ScreenHeightToIconHeight = (float)IconTextureSize.Y / 3072.0f * MotinorScale;
|
|
public static CUINullRect IconSize => new CUINullRect(null, null,
|
|
(float)Math.Round(CUI.GameScreenSize.Y * ScreenHeightToIconHeight * IconProportions),
|
|
(float)Math.Round(CUI.GameScreenSize.Y * ScreenHeightToIconHeight)
|
|
);
|
|
|
|
public static float TextScale => CUI.GameScreenSize.Y / 840.0f * MotinorScale;
|
|
|
|
public static Color GetButtonColor(Character character)
|
|
{
|
|
if (character.IsDead) return new Color(255, 0, 0);
|
|
|
|
Color cl = character.CampaignInteractionType switch
|
|
{
|
|
CampaignMode.InteractionType.Talk => new Color(255, 255, 255),
|
|
CampaignMode.InteractionType.Examine => character.HumanPrefab?.Identifier.Value switch
|
|
{
|
|
"jestmaster" => new Color(255, 64, 255),
|
|
"huskcultecclesiast" => new Color(80, 80, 255),
|
|
_ => new Color(255, 255, 255),
|
|
},
|
|
CampaignMode.InteractionType.Crew => new Color(198, 211, 242),
|
|
CampaignMode.InteractionType.Store => character.HumanPrefab?.Identifier.Value switch
|
|
{
|
|
"merchantnightclub" => new Color(255, 0, 80),
|
|
"merchantmedical" => new Color(255, 130, 130),
|
|
"merchantengineering" => new Color(255, 255, 130),
|
|
"merchantarmory" => new Color(200, 200, 200),
|
|
"merchantclown" => new Color(255, 64, 255),
|
|
"merchanthusk" => new Color(80, 80, 255),
|
|
_ => new Color(255, 200, 170),
|
|
},
|
|
CampaignMode.InteractionType.Upgrade => new Color(106, 250, 115),
|
|
CampaignMode.InteractionType.PurchaseSub => new Color(169, 212, 187),
|
|
CampaignMode.InteractionType.MedicalClinic => new Color(255, 130, 130),
|
|
_ => Color.White,
|
|
};
|
|
|
|
// Ye,ok, doesn't work in multiplayer
|
|
Debugger.Log($"Interaction: {character.CampaignInteractionType} Id:{character.HumanPrefab?.Identifier.Value} Color:{character}", DebugLevel.ButtonColor);
|
|
|
|
return cl;
|
|
}
|
|
|
|
public static CUISprite GetIcon(Character character)
|
|
{
|
|
return character.CampaignInteractionType switch
|
|
{
|
|
CampaignMode.InteractionType.Talk => GetIcon(2),
|
|
CampaignMode.InteractionType.Examine => GetIcon(2),
|
|
CampaignMode.InteractionType.Crew => GetIcon(3),
|
|
CampaignMode.InteractionType.Store => GetIcon(0),
|
|
CampaignMode.InteractionType.Upgrade => GetIcon(4),
|
|
CampaignMode.InteractionType.PurchaseSub => GetIcon(5),
|
|
CampaignMode.InteractionType.MedicalClinic => GetIcon(1),
|
|
_ => GetIcon(2),
|
|
};
|
|
}
|
|
|
|
public static CUISprite GetIcon(int x, int y = 0)
|
|
{
|
|
return new CUISprite("Interaction icons.png", new Rectangle(x * IconTextureSize.X, y * IconTextureSize.Y, IconTextureSize.X, IconTextureSize.Y));
|
|
}
|
|
|
|
public static string GetInteractionText(Character character)
|
|
{
|
|
string InteractionText = TextManager.Get("CampaignInteraction." + character.CampaignInteractionType).ToString().Replace("[[key]]", "");
|
|
|
|
string pname = character.HumanPrefab?.Identifier.Value;
|
|
bool isAManager = pname != null && pname.Contains("outpostmanager");
|
|
|
|
LocalizedString name = character.Info?.DisplayName;
|
|
if (character.Info?.Title != "") name = character.Info?.Title;
|
|
if (isAManager) name = TextManager.Get("npctitle.outpostmanager");
|
|
|
|
return $"{name} - {InteractionText}";
|
|
}
|
|
|
|
public Character character { get; set; }
|
|
|
|
public bool TextVisible
|
|
{
|
|
get => Text.Parent != null;
|
|
set
|
|
{
|
|
if (value)
|
|
{
|
|
if (Text.Parent == null) Append(Text);
|
|
}
|
|
else
|
|
{
|
|
if (Text.Parent != null) RemoveChild(Text);
|
|
}
|
|
}
|
|
}
|
|
|
|
public CUIButton Icon;
|
|
public CUITextBlock Text;
|
|
|
|
public QuickTalkButton(Character character, CUIDirection direction) : base()
|
|
{
|
|
FitContent = new CUIBool2(true, true);
|
|
Direction = direction;
|
|
|
|
this["icon"] = Icon = new CUIButton()
|
|
{
|
|
Text = "",
|
|
Border = new CUIBorder(),
|
|
BackgroundSprite = GetIcon(character),
|
|
MasterColorOpaque = GetButtonColor(character),
|
|
//ResizeToSprite = true,
|
|
Absolute = IconSize,
|
|
};
|
|
|
|
Icon.OnMouseDown += (e) =>
|
|
{
|
|
DispatchUp(new CUICommand("interact", character));
|
|
};
|
|
|
|
Text = new CUITextBlock("")
|
|
{
|
|
TextAlign = CUIAnchor.CenterLeft,
|
|
Text = GetInteractionText(character),
|
|
TextScale = TextScale,
|
|
Ghost = new CUIBool2(false, true),
|
|
};
|
|
|
|
this.character = character;
|
|
|
|
}
|
|
|
|
}
|
|
} |