mirror of
https://github.com/Facepunch/sbox-public.git
synced 2026-04-18 05:17:53 -04:00
This commit imports the C# engine code and game files, excluding C++ source code. [Source-Commit: ceb3d758046e50faa6258bc3b658a30c97743268]
138 lines
3.5 KiB
Plaintext
138 lines
3.5 KiB
Plaintext
@using Sandbox;
|
|
@using Sandbox.UI;
|
|
@namespace Sandbox.UI
|
|
@inherits Panel
|
|
|
|
|
|
@{
|
|
var aspect = this.Box.RectOuter.Size.x / this.Box.RectOuter.Size.y;
|
|
var bg = Package.Thumb;
|
|
|
|
if (aspect < 0.8f) bg = Package.ThumbTall;
|
|
if (aspect > 1.2f) bg = Package.ThumbWide;
|
|
|
|
if (this.HasHovered)
|
|
{
|
|
bg = Package.VideoThumb ?? bg;
|
|
}
|
|
}
|
|
|
|
<root class="card card-vertical card-package @FavouriteClass @RatingClass">
|
|
|
|
<div class="card-image" @onrightclick=@OnCardRightClicked onclick=@OnCardClicked style="background-image: url( @bg )">
|
|
|
|
@if ( Decorated )
|
|
{
|
|
if (Package.Public == false)
|
|
{
|
|
<div class="card-decorator-hidden" tooltip="This is hidden from the public">Hidden</div>
|
|
}
|
|
|
|
if ( UsersNow > 0 )
|
|
{
|
|
<div class="card-decorator-users" tooltip="This many users are playing now">
|
|
<i>sports_esports</i>
|
|
<span> @UsersNow.KiloFormat() </span>
|
|
</div>
|
|
}
|
|
else if ( Package.Usage.UsersNow > 0 )
|
|
{
|
|
<div class="card-decorator-users" tooltip="This many users are playing now">
|
|
<i>sports_esports</i>
|
|
<span> @Package.Usage.UsersNow.KiloFormat() </span>
|
|
</div>
|
|
}
|
|
}
|
|
|
|
</div>
|
|
|
|
<div class="package-card-body">
|
|
<label class="title" @onclick=@OnCardClicked>@Package.Title</label>
|
|
<label class="orgname" onclick=@( () => Game.Overlay.ShowOrganizationModal( Package.Org ) )>@Package.Org.Title</label>
|
|
</div>
|
|
|
|
</root>
|
|
|
|
@code
|
|
{
|
|
[Parameter] public Package Package { get; set; }
|
|
|
|
/// <summary>
|
|
/// Called when the icon part of the card is pressed
|
|
/// </summary>
|
|
[Parameter] public System.Action OnLaunch { get; set; }
|
|
|
|
/// <summary>
|
|
/// Called when the icon part of the card is right clicked
|
|
/// </summary>
|
|
[Parameter] public System.Action OnMenu { get; set; }
|
|
|
|
[Parameter] public bool Decorated { get; set; } = true;
|
|
|
|
public int UsersNow { get; set; }
|
|
|
|
protected override int BuildHash() => HashCode.Combine(Package, this.HasHovered, this.Box.RectOuter.Size);
|
|
|
|
string FavouriteClass => Package.Interaction.Favourite ? "is-favourite" : "";
|
|
string RatingClass
|
|
{
|
|
get
|
|
{
|
|
if (Package.Interaction.Rating == null) return "";
|
|
if (Package.Interaction.Rating == 0) return "is-rated-up";
|
|
if (Package.Interaction.Rating == 1) return "is-rated-down";
|
|
|
|
return "";
|
|
}
|
|
}
|
|
|
|
public string FormatHoursPlayed()
|
|
{
|
|
double minutes = Package.Interaction.Seconds / 60.0;
|
|
|
|
if ( minutes < 60 )
|
|
return minutes.ToString("0m");
|
|
|
|
double hours = Package.Interaction.Seconds / 60.0 / 60.0;
|
|
|
|
if (hours > 10)
|
|
return hours.ToString("0h");
|
|
|
|
return hours.ToString("0.#h");
|
|
}
|
|
|
|
public string UpdatedString()
|
|
{
|
|
return Package.Updated.LocalDateTime.ToRelativeTimeString();
|
|
}
|
|
|
|
void OnCardClicked()
|
|
{
|
|
OnLaunch?.Invoke();
|
|
}
|
|
|
|
void OnCardRightClicked()
|
|
{
|
|
OnMenu?.Invoke();
|
|
}
|
|
|
|
[Event("package.update.users")]
|
|
public void UpdateUsers( string ident, long value )
|
|
{
|
|
if (ident != Package.FullIdent) return;
|
|
|
|
var u = Package.Usage;
|
|
u.UsersNow = value;
|
|
Package.Usage = u;
|
|
StateHasChanged();
|
|
}
|
|
|
|
[Event("package.update.favourites")]
|
|
public void UpdateFaves(string ident, long value)
|
|
{
|
|
if (ident != Package.FullIdent) return;
|
|
Package.Favourited = (int) value;
|
|
StateHasChanged();
|
|
}
|
|
}
|