- add: interface for interaction
@@ -1,4 +1,5 @@
|
||||
using Content.Client._Amour.Hole;
|
||||
using Content.Shared._Amour.HumanoidAppearanceExtension;
|
||||
using Content.Shared.Humanoid;
|
||||
using Content.Shared.Humanoid.Markings;
|
||||
using Content.Shared.Humanoid.Prototypes;
|
||||
@@ -117,6 +118,11 @@ public sealed class HumanoidAppearanceSystem : SharedHumanoidAppearanceSystem
|
||||
return;
|
||||
}
|
||||
|
||||
// AMOUR START
|
||||
var ev = new HumanoidAppearanceLoadingEvent(new Entity<HumanoidAppearanceComponent>(uid, humanoid), profile);
|
||||
RaiseLocalEvent(uid, ev);
|
||||
// AMOUR END
|
||||
|
||||
var customBaseLayers = new Dictionary<HumanoidVisualLayers, CustomBaseLayerInfo>();
|
||||
|
||||
var speciesPrototype = _prototypeManager.Index<SpeciesPrototype>(profile.Species);
|
||||
@@ -197,12 +203,10 @@ public sealed class HumanoidAppearanceSystem : SharedHumanoidAppearanceSystem
|
||||
humanoid.SkinColor = profile.Appearance.SkinColor;
|
||||
humanoid.EyeColor = profile.Appearance.EyeColor;
|
||||
|
||||
//AMOUR
|
||||
foreach (var genitals in profile.Appearance.Genitals)
|
||||
{
|
||||
Log.Debug("CHLEN! " + genitals.GenitalId);
|
||||
_holeSystem.AddHole(uid,genitals.GenitalId,genitals.Color);
|
||||
}
|
||||
// AMOUR START
|
||||
var ev2 = new HumanoidAppearanceLoadedEvent(new Entity<HumanoidAppearanceComponent>(uid, humanoid), profile);
|
||||
RaiseLocalEvent(uid, ev2);
|
||||
// AMOUR END
|
||||
|
||||
UpdateSprite(humanoid, Comp<SpriteComponent>(uid));
|
||||
}
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
using Content.Client.Eui;
|
||||
using Content.Shared.Eui;
|
||||
|
||||
namespace Content.Client._Amour.InteractionPanel;
|
||||
|
||||
public sealed class InteractionPanelEui : BaseEui
|
||||
{
|
||||
private InteractionPanelWindow _interactionPanelWindow;
|
||||
|
||||
public InteractionPanelEui()
|
||||
{
|
||||
_interactionPanelWindow = new InteractionPanelWindow();
|
||||
_interactionPanelWindow.OnClose += () => SendMessage(new CloseEuiMessage());
|
||||
}
|
||||
|
||||
public override void Closed()
|
||||
{
|
||||
base.Closed();
|
||||
_interactionPanelWindow.Close();
|
||||
}
|
||||
|
||||
public override void Opened()
|
||||
{
|
||||
base.Opened();
|
||||
_interactionPanelWindow.OpenCentered();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
<controls:InteractionPanelWindow
|
||||
xmlns="https://spacestation14.io"
|
||||
xmlns:controls="clr-namespace:Content.Client._Amour.InteractionPanel"
|
||||
xmlns:controls1="clr-namespace:Content.Client.UserInterface.Controls"
|
||||
Title="{Loc 'interaction-panel-title'}"
|
||||
MinSize="300 500">
|
||||
<BoxContainer Orientation="Vertical" Margin="5 5 5 5">
|
||||
<BoxContainer Orientation="Vertical" Margin="5 20 5 20" HorizontalAlignment="Stretch" HorizontalExpand="True">
|
||||
<TextureRect TexturePath="/Textures/Interface/Misc/beakerlarge.png" Margin="5 10 5 15" HorizontalAlignment="Center"/>
|
||||
<BoxContainer HorizontalAlignment="Center" HorizontalExpand="True">
|
||||
<BoxContainer Orientation="Vertical" HorizontalAlignment="Left" Margin="5 5 5 5">
|
||||
<PanelContainer/>
|
||||
<Label Text="- У меня есть ручки"/>
|
||||
<Label Text="- У меня есть ножки"/>
|
||||
</BoxContainer>
|
||||
|
||||
<controls1:HighDivider HorizontalAlignment="Center" Margin="5 5 5 5"/>
|
||||
|
||||
<BoxContainer Orientation="Vertical" HorizontalAlignment="Right" Margin="5 5 5 5">
|
||||
<PanelContainer/>
|
||||
<Label Text="- У него есть дырка"/>
|
||||
<Label Text="- Он няшный"/>
|
||||
</BoxContainer>
|
||||
</BoxContainer>
|
||||
<ProgressBar Name="CummingProgress"
|
||||
HorizontalExpand="True"
|
||||
MinValue="0"
|
||||
MaxValue="1"
|
||||
MinHeight = "25"
|
||||
Page="0"
|
||||
Margin="10 10 0 0"
|
||||
Value="0.5"
|
||||
Modulate="#795695">
|
||||
<Label Text="Смешной прогресс"/>
|
||||
</ProgressBar>
|
||||
</BoxContainer>
|
||||
|
||||
<PanelContainer StyleClasses="LowDivider" />
|
||||
|
||||
<BoxContainer Orientation="Vertical" Margin="5 20 5 20">
|
||||
<Button Modulate="#ffaaaa">
|
||||
<BoxContainer HorizontalAlignment="Left">
|
||||
<TextureRect TexturePath="/Textures/Interface/NavMap/beveled_circle.png" Margin="5 5 5 5"/>
|
||||
<Label Text="Трахать" Margin="10 0 15 0"/>
|
||||
</BoxContainer>
|
||||
<controls1:HighDivider HorizontalAlignment="Center"/>
|
||||
<Label Text=">" Margin="5 0 5 0" HorizontalAlignment="Right"/>
|
||||
</Button>
|
||||
</BoxContainer>
|
||||
</BoxContainer>
|
||||
</controls:InteractionPanelWindow>
|
||||
@@ -0,0 +1,16 @@
|
||||
using Robust.Client.AutoGenerated;
|
||||
using Robust.Client.UserInterface;
|
||||
using Robust.Client.UserInterface.CustomControls;
|
||||
using Robust.Client.UserInterface.XAML;
|
||||
|
||||
namespace Content.Client._Amour.InteractionPanel;
|
||||
|
||||
[GenerateTypedNameReferences]
|
||||
public sealed partial class InteractionPanelWindow : DefaultWindow
|
||||
{
|
||||
public InteractionPanelWindow()
|
||||
{
|
||||
RobustXamlLoader.Load(this);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System.Linq;
|
||||
using Content.Server._Amour.Hole;
|
||||
using Content.Shared._Amour.HumanoidAppearanceExtension;
|
||||
using Content.Shared.Examine;
|
||||
using Content.Shared.Humanoid;
|
||||
using Content.Shared.Humanoid.Markings;
|
||||
@@ -49,17 +50,17 @@ public sealed partial class HumanoidAppearanceSystem : SharedHumanoidAppearanceS
|
||||
return;
|
||||
}
|
||||
|
||||
// AMOUR START
|
||||
var ev = new HumanoidAppearanceLoadingEvent(new Entity<HumanoidAppearanceComponent>(uid, humanoid), profile);
|
||||
RaiseLocalEvent(uid, ev);
|
||||
// AMOUR END
|
||||
|
||||
SetSpecies(uid, profile.Species, false, humanoid);
|
||||
SetSex(uid, profile.Sex, false, humanoid);
|
||||
humanoid.EyeColor = profile.Appearance.EyeColor;
|
||||
|
||||
SetSkinColor(uid, profile.Appearance.SkinColor, false);
|
||||
|
||||
//AMOUR
|
||||
foreach (var genitals in profile.Appearance.Genitals)
|
||||
{
|
||||
_holeSystem.AddHole(uid,genitals.GenitalId,genitals.Color);
|
||||
}
|
||||
|
||||
humanoid.MarkingSet.Clear();
|
||||
|
||||
@@ -124,6 +125,11 @@ public sealed partial class HumanoidAppearanceSystem : SharedHumanoidAppearanceS
|
||||
|
||||
humanoid.Age = profile.Age;
|
||||
|
||||
// AMOUR START
|
||||
var ev2 = new HumanoidAppearanceLoadedEvent(new Entity<HumanoidAppearanceComponent>(uid, humanoid), profile);
|
||||
RaiseLocalEvent(uid, ev2);
|
||||
// AMOUR END
|
||||
|
||||
Dirty(humanoid);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
using Content.Server.Chemistry.Containers.EntitySystems;
|
||||
using Content.Shared._Amour.Arousal;
|
||||
using Content.Shared._Amour.Hole;
|
||||
using Content.Shared.Chemistry.Components;
|
||||
|
||||
namespace Content.Server._Amour.Hole;
|
||||
|
||||
@@ -11,6 +13,7 @@ public sealed partial class HoleSystem
|
||||
{
|
||||
SubscribeLocalEvent<HoleSolutionComponent,ComponentInit>(OnSolutionInit);
|
||||
SubscribeLocalEvent<HoleSolutionComponent,EntityUnpausedEvent>(OnUnpaused);
|
||||
SubscribeLocalEvent<HoleSolutionComponent,ArousalSplash>(OnSplash);
|
||||
}
|
||||
|
||||
private void OnSolutionInit(EntityUid uid, HoleSolutionComponent component, ComponentInit args)
|
||||
@@ -25,6 +28,40 @@ public sealed partial class HoleSystem
|
||||
component.NextGenerationTime += args.PausedTime;
|
||||
}
|
||||
|
||||
public void SplitSolution(Entity<HoleSolutionComponent?> entity, Entity<SolutionComponent?>? to = null)
|
||||
{
|
||||
if(!Resolve(entity,ref entity.Comp))
|
||||
return;
|
||||
|
||||
if (!to.HasValue)
|
||||
{
|
||||
entity.Comp.Solution.SplitSolution(entity.Comp.Solution.Volume);
|
||||
}
|
||||
else
|
||||
{
|
||||
var entityUid = to.Value;
|
||||
if(Resolve(entityUid, ref entityUid.Comp))
|
||||
{
|
||||
_solutionContainer.AddSolution(
|
||||
new Entity<SolutionComponent>(entityUid.Owner,entityUid.Comp)
|
||||
, entity.Comp.Solution);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void OnSplash(EntityUid uid, HoleSolutionComponent component, ref ArousalSplash args)
|
||||
{
|
||||
if(!TryComp<HoleContainerComponent>(uid,out var holeContainer))
|
||||
return;
|
||||
|
||||
var holeUid = GetEntity(holeContainer.MainHole);
|
||||
|
||||
if(!TryComp<HoleComponent>(holeUid,out var holeComponent))
|
||||
return;
|
||||
|
||||
SplitSolution(holeUid.Value);
|
||||
}
|
||||
|
||||
private void UpdateSolution(float frameTime)
|
||||
{
|
||||
return;
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
using Content.Server.EUI;
|
||||
|
||||
namespace Content.Server._Amour.InteractionPanel;
|
||||
|
||||
public sealed class InteractionPanelEui : BaseEui
|
||||
{
|
||||
public InteractionPanelEui()
|
||||
{
|
||||
IoCManager.InjectDependencies(this);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
using Content.Server.EUI;
|
||||
using Content.Shared._Amour.Hole;
|
||||
using Content.Shared.Verbs;
|
||||
using Robust.Server.Player;
|
||||
|
||||
namespace Content.Server._Amour.InteractionPanel;
|
||||
|
||||
public sealed class InteractionPanelSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly EuiManager _eui = default!;
|
||||
[Dependency] private readonly IPlayerManager _playerManager = default!;
|
||||
public override void Initialize()
|
||||
{
|
||||
SubscribeLocalEvent<HoleContainerComponent,GetVerbsEvent<Verb>>(OnVerb);
|
||||
}
|
||||
|
||||
private void OnVerb(EntityUid uid, HoleContainerComponent component, GetVerbsEvent<Verb> args)
|
||||
{
|
||||
if(!_playerManager.TryGetSessionByEntity(uid, out var session))
|
||||
return;
|
||||
args.Verbs.Add(new Verb()
|
||||
{
|
||||
Text = "MEOW",
|
||||
Act = () => _eui.OpenEui(new InteractionPanelEui(), session)
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -11,6 +11,7 @@ public enum AlertCategory
|
||||
Buckled,
|
||||
Health,
|
||||
Mood, //WD-edit
|
||||
Arousal, //AMOUR-edit
|
||||
Internals,
|
||||
Stamina,
|
||||
Piloting,
|
||||
|
||||
@@ -38,6 +38,7 @@ namespace Content.Shared.Alert
|
||||
VeryGood,
|
||||
VeryVeryGood,
|
||||
MoodDead,
|
||||
Arousal, //AMOUR
|
||||
//WD end
|
||||
CultBuffed,
|
||||
PilotingShuttle,
|
||||
|
||||
9
Content.Shared/_Amour/Arousal/ArousalComponent.cs
Normal file
@@ -0,0 +1,9 @@
|
||||
namespace Content.Shared._Amour.Arousal;
|
||||
|
||||
[RegisterComponent]
|
||||
public sealed partial class ArousalComponent : Component
|
||||
{
|
||||
[ViewVariables] public short Arousal;
|
||||
[DataField] public short ArousalExide;
|
||||
}
|
||||
|
||||
5
Content.Shared/_Amour/Arousal/ArousalEvents.cs
Normal file
@@ -0,0 +1,5 @@
|
||||
namespace Content.Shared._Amour.Arousal;
|
||||
|
||||
public record struct ArousalUpdated(Entity<ArousalComponent> Entity);
|
||||
|
||||
public record struct ArousalSplash(Entity<ArousalComponent> Entity);
|
||||
51
Content.Shared/_Amour/Arousal/ArousalSystem.cs
Normal file
@@ -0,0 +1,51 @@
|
||||
using Content.Shared.Alert;
|
||||
|
||||
namespace Content.Shared._Amour.Arousal;
|
||||
|
||||
public sealed class ArousalSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly AlertsSystem _alerts = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
SubscribeLocalEvent<ArousalComponent,ComponentInit>(OnComponentInit);
|
||||
}
|
||||
|
||||
private void OnComponentInit(EntityUid uid, ArousalComponent component, ComponentInit args)
|
||||
{
|
||||
UpdateAlarm(new Entity<ArousalComponent?>(uid,component));
|
||||
}
|
||||
|
||||
private void UpdateAlarm(Entity<ArousalComponent?> entity)
|
||||
{
|
||||
if(!Resolve(entity,ref entity.Comp))
|
||||
return;
|
||||
|
||||
if (entity.Comp.Arousal is > 100 or < 0)
|
||||
{
|
||||
entity.Comp.Arousal = 0;
|
||||
RaiseLocalEvent(entity,new ArousalSplash(new Entity<ArousalComponent>(entity,entity.Comp)));
|
||||
}
|
||||
RaiseLocalEvent(entity,new ArousalUpdated(new Entity<ArousalComponent>(entity,entity.Comp)));
|
||||
|
||||
_alerts.ShowAlert(entity,AlertType.Arousal,(short)(entity.Comp.Arousal/10));
|
||||
}
|
||||
|
||||
public void SetArousal(Entity<ArousalComponent?> entity, short count)
|
||||
{
|
||||
if(!Resolve(entity,ref entity.Comp))
|
||||
return;
|
||||
|
||||
entity.Comp.Arousal = count;
|
||||
UpdateAlarm(entity);
|
||||
}
|
||||
|
||||
public void AddArousal(Entity<ArousalComponent?> entity, short count)
|
||||
{
|
||||
if(!Resolve(entity,ref entity.Comp))
|
||||
return;
|
||||
|
||||
SetArousal(entity,(short) (entity.Comp.Arousal + count));
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,6 @@
|
||||
using Robust.Shared.Containers;
|
||||
using Content.Shared._Amour.Arousal;
|
||||
using Content.Shared._Amour.HumanoidAppearanceExtension;
|
||||
using Robust.Shared.Containers;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Shared._Amour.Hole;
|
||||
@@ -10,6 +12,15 @@ public abstract partial class SharedHoleSystem
|
||||
public void InitializeContainer()
|
||||
{
|
||||
SubscribeLocalEvent<HoleContainerComponent,ComponentInit>(OnContainerInit);
|
||||
SubscribeLocalEvent<HoleContainerComponent,HumanoidAppearanceLoadedEvent>(OnAppearanceLoaded);
|
||||
}
|
||||
|
||||
private void OnAppearanceLoaded(EntityUid uid, HoleContainerComponent component, HumanoidAppearanceLoadedEvent args)
|
||||
{
|
||||
foreach (var genitals in args.Profile.Appearance.Genitals)
|
||||
{
|
||||
AddHole(new Entity<HoleContainerComponent?>(uid,component),genitals.GenitalId,genitals.Color);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnContainerInit(EntityUid uid, HoleContainerComponent component, ComponentInit args)
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using Robust.Shared.Containers;
|
||||
using Content.Shared._Amour.Arousal;
|
||||
using Robust.Shared.Containers;
|
||||
using Robust.Shared.GameStates;
|
||||
|
||||
namespace Content.Shared._Amour.Hole;
|
||||
@@ -24,7 +25,9 @@ public abstract partial class SharedHoleSystem : EntitySystem
|
||||
|
||||
public virtual void Exide(Entity<HoleComponent?> entity, bool value = true)
|
||||
{
|
||||
if(!Resolve(entity.Owner,ref entity.Comp)) return;
|
||||
if(!Resolve(entity.Owner,ref entity.Comp))
|
||||
return;
|
||||
|
||||
entity.Comp.IsExcited = value;
|
||||
Dirty(entity);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
using Content.Shared.Humanoid;
|
||||
using Content.Shared.Preferences;
|
||||
using Robust.Shared.Serialization;
|
||||
|
||||
namespace Content.Shared._Amour.HumanoidAppearanceExtension;
|
||||
|
||||
public record struct HumanoidAppearanceLoadingEvent(
|
||||
Entity<HumanoidAppearanceComponent> Entity,
|
||||
HumanoidCharacterProfile Profile);
|
||||
|
||||
public record struct HumanoidAppearanceLoadedEvent(
|
||||
Entity<HumanoidAppearanceComponent> Entity,
|
||||
HumanoidCharacterProfile Profile);
|
||||
@@ -7,6 +7,7 @@
|
||||
- category: Health
|
||||
- alertType: Bleeding
|
||||
- category: Mood # WD edit
|
||||
- category: Arousal # Amour edit
|
||||
- category: Stamina
|
||||
- alertType: SuitPower
|
||||
- category: Internals
|
||||
|
||||
@@ -264,6 +264,7 @@
|
||||
- type: Penetrated
|
||||
- type: Mood
|
||||
- type: HoleContainer
|
||||
- type: Arousal
|
||||
|
||||
- type: entity
|
||||
save: false
|
||||
|
||||
30
Resources/Prototypes/_Amour/Alerts/arosual.yml
Normal file
@@ -0,0 +1,30 @@
|
||||
- type: alert
|
||||
id: Arousal
|
||||
category: Arousal
|
||||
icons:
|
||||
- sprite: /Textures/_Amour/Alerts/arousal.rsi
|
||||
state: arousal0
|
||||
- sprite: /Textures/_Amour/Alerts/arousal.rsi
|
||||
state: arousal10
|
||||
- sprite: /Textures/_Amour/Alerts/arousal.rsi
|
||||
state: arousal20
|
||||
- sprite: /Textures/_Amour/Alerts/arousal.rsi
|
||||
state: arousal30
|
||||
- sprite: /Textures/_Amour/Alerts/arousal.rsi
|
||||
state: arousal40
|
||||
- sprite: /Textures/_Amour/Alerts/arousal.rsi
|
||||
state: arousal50
|
||||
- sprite: /Textures/_Amour/Alerts/arousal.rsi
|
||||
state: arousal60
|
||||
- sprite: /Textures/_Amour/Alerts/arousal.rsi
|
||||
state: arousal70
|
||||
- sprite: /Textures/_Amour/Alerts/arousal.rsi
|
||||
state: arousal80
|
||||
- sprite: /Textures/_Amour/Alerts/arousal.rsi
|
||||
state: arousal90
|
||||
- sprite: /Textures/_Amour/Alerts/arousal.rsi
|
||||
state: arousal100
|
||||
name: alerts-arousal-name
|
||||
description: alerts-arousal-desc
|
||||
minSeverity: 0
|
||||
maxSeverity: 10
|
||||
|
Before Width: | Height: | Size: 383 B After Width: | Height: | Size: 383 B |
|
Before Width: | Height: | Size: 417 B After Width: | Height: | Size: 417 B |
|
Before Width: | Height: | Size: 417 B After Width: | Height: | Size: 417 B |
|
Before Width: | Height: | Size: 383 B After Width: | Height: | Size: 383 B |
|
Before Width: | Height: | Size: 417 B After Width: | Height: | Size: 417 B |
|
Before Width: | Height: | Size: 417 B After Width: | Height: | Size: 417 B |
|
Before Width: | Height: | Size: 422 B After Width: | Height: | Size: 422 B |
|
Before Width: | Height: | Size: 422 B After Width: | Height: | Size: 422 B |
|
Before Width: | Height: | Size: 422 B After Width: | Height: | Size: 422 B |
|
Before Width: | Height: | Size: 445 B After Width: | Height: | Size: 445 B |
|
Before Width: | Height: | Size: 445 B After Width: | Height: | Size: 445 B |
|
Before Width: | Height: | Size: 383 B After Width: | Height: | Size: 383 B |