Arcade fun - Ports over /vg/s SpaceVillain arcade game (#2125)

* arcade fun

* stuff

* removed unused using statements
added sound feedback
win check fix
reworked ui a bit

* description rework

* windowopen bug fixed

* adds rewards, cool!

* for unusualcrow

* fixes

Co-authored-by: Víctor Aguilera Puerto <6766154+Zumorica@users.noreply.github.com>
This commit is contained in:
Paul Ritter
2020-09-23 14:30:31 +02:00
committed by GitHub
parent eb9b83cc29
commit 2a1b90a0eb
13 changed files with 662 additions and 0 deletions

View File

@@ -0,0 +1,112 @@
using Content.Client.GameObjects.Components.Arcade;
using Content.Shared.GameObjects.Components.Arcade;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.CustomControls;
using Vector2 = Robust.Shared.Maths.Vector2;
namespace Content.Client.Arcade
{
public class SpaceVillainArcadeMenu : SS14Window
{
protected override Vector2? CustomSize => (400, 200);
public SpaceVillainArcadeBoundUserInterface Owner { get; set; }
private Label _enemyNameLabel;
private Label _playerInfoLabel;
private Label _enemyInfoLabel;
private Label _playerActionLabel;
private Label _enemyActionLabel;
public SpaceVillainArcadeMenu(SpaceVillainArcadeBoundUserInterface owner)
{
Title = "Space Villain";
Owner = owner;
GridContainer grid = new GridContainer();
grid.Columns = 1;
GridContainer infoGrid = new GridContainer();
infoGrid.Columns = 3;
infoGrid.AddChild(new Label{ Text = "Player", Align = Label.AlignMode.Center });
infoGrid.AddChild(new Label{ Text = "|", Align = Label.AlignMode.Center });
_enemyNameLabel = new Label{ Align = Label.AlignMode.Center};
infoGrid.AddChild(_enemyNameLabel);
_playerInfoLabel = new Label {Align = Label.AlignMode.Center};
infoGrid.AddChild(_playerInfoLabel);
infoGrid.AddChild(new Label{ Text = "|", Align = Label.AlignMode.Center });
_enemyInfoLabel = new Label {Align = Label.AlignMode.Center};
infoGrid.AddChild(_enemyInfoLabel);
CenterContainer centerContainer = new CenterContainer();
centerContainer.AddChild(infoGrid);
grid.AddChild(centerContainer);
_playerActionLabel = new Label();
_playerActionLabel.Align = Label.AlignMode.Center;
grid.AddChild(_playerActionLabel);
_enemyActionLabel = new Label();
_enemyActionLabel.Align = Label.AlignMode.Center;
grid.AddChild(_enemyActionLabel);
GridContainer buttonGrid = new GridContainer();
buttonGrid.Columns = 3;
Button attack = new ActionButton(Owner, SharedSpaceVillainArcadeComponent.PlayerAction.Attack);
attack.Text = "ATTACK";
buttonGrid.AddChild(attack);
Button heal = new ActionButton(Owner, SharedSpaceVillainArcadeComponent.PlayerAction.Heal);
heal.Text = "HEAL";
buttonGrid.AddChild(heal);
Button recharge = new ActionButton(Owner, SharedSpaceVillainArcadeComponent.PlayerAction.Recharge);
recharge.Text = "RECHARGE";
buttonGrid.AddChild(recharge);
centerContainer = new CenterContainer();
centerContainer.AddChild(buttonGrid);
grid.AddChild(centerContainer);
Button newGame = new ActionButton(Owner, SharedSpaceVillainArcadeComponent.PlayerAction.NewGame);
newGame.Text = "New Game";
grid.AddChild(newGame);
centerContainer = new CenterContainer();
centerContainer.AddChild(grid);
Contents.AddChild(centerContainer);
}
private void UpdateMetadata(SharedSpaceVillainArcadeComponent.SpaceVillainArcadeMetaDataUpdateMessage message)
{
Title = message.GameTitle;
_enemyNameLabel.Text = message.EnemyName;
}
public void UpdateInfo(SharedSpaceVillainArcadeComponent.SpaceVillainArcadeDataUpdateMessage message)
{
if(message is SharedSpaceVillainArcadeComponent.SpaceVillainArcadeMetaDataUpdateMessage metaMessage) UpdateMetadata(metaMessage);
_playerInfoLabel.Text = $"HP: {message.PlayerHP} MP: {message.PlayerMP}";
_enemyInfoLabel.Text = $"HP: {message.EnemyHP} MP: {message.EnemyMP}";
_playerActionLabel.Text = message.PlayerActionMessage;
_enemyActionLabel.Text = message.EnemyActionMessage;
}
private class ActionButton : Button
{
private SpaceVillainArcadeBoundUserInterface _owner;
private SharedSpaceVillainArcadeComponent.PlayerAction _playerAction;
public ActionButton(SpaceVillainArcadeBoundUserInterface owner,SharedSpaceVillainArcadeComponent.PlayerAction playerAction)
{
_owner = owner;
_playerAction = playerAction;
OnPressed += Clicked;
}
private void Clicked(ButtonEventArgs e)
{
_owner.SendAction(_playerAction);
}
}
}
}

View File

@@ -0,0 +1,55 @@
using Content.Client.Arcade;
using Content.Shared.GameObjects.Components.Arcade;
using JetBrains.Annotations;
using Robust.Client.GameObjects.Components.UserInterface;
using Robust.Shared.GameObjects.Components.UserInterface;
using Robust.Shared.ViewVariables;
namespace Content.Client.GameObjects.Components.Arcade
{
public class SpaceVillainArcadeBoundUserInterface : BoundUserInterface
{
[ViewVariables] private SpaceVillainArcadeMenu _menu;
//public SharedSpaceVillainArcadeComponent SpaceVillainArcade;
public SpaceVillainArcadeBoundUserInterface([NotNull] ClientUserInterfaceComponent owner, [NotNull] object uiKey) : base(owner, uiKey)
{
SendAction(SharedSpaceVillainArcadeComponent.PlayerAction.RequestData);
}
public void SendAction(SharedSpaceVillainArcadeComponent.PlayerAction action)
{
SendMessage(new SharedSpaceVillainArcadeComponent.SpaceVillainArcadePlayerActionMessage(action));
}
protected override void Open()
{
base.Open();
/*if(!Owner.Owner.TryGetComponent(out SharedSpaceVillainArcadeComponent spaceVillainArcade))
{
return;
}
SpaceVillainArcade = spaceVillainArcade;*/
_menu = new SpaceVillainArcadeMenu(this);
_menu.OnClose += Close;
_menu.OpenCentered();
}
protected override void ReceiveMessage(BoundUserInterfaceMessage message)
{
if(message is SharedSpaceVillainArcadeComponent.SpaceVillainArcadeDataUpdateMessage msg) _menu.UpdateInfo(msg);
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
if(!disposing) { return; }
_menu?.Dispose();
}
}
}

View File

@@ -170,6 +170,7 @@
"Firelock",
"AtmosPlaque",
"Spillable",
"SpaceVillainArcade",
"Flammable",
"CreamPie",
"CreamPied",