Compare commits

...

7 Commits

Author SHA1 Message Date
Dan Balasescu
bc451a4856 Add GHA deploy workflow 2025-06-05 14:44:35 +09:00
Dean Herbert
3c0184059b Merge pull request #367 from minetoblend/feature/ghost-shader
Add animated ghost shader
2025-06-05 13:51:07 +09:00
marvin
94c42a9cc9 Use more descriptive parameter names 2025-06-04 21:45:37 +02:00
marvin
91fe0794f9 Rename falloff_radius to corner_radius 2025-06-04 20:31:09 +02:00
marvin
a20237478c Add highp 2025-06-04 20:30:50 +02:00
marvin
0d23c81b43 Extract strength variable 2025-06-04 20:26:56 +02:00
marvin
21f0e584b6 Add ghost shader 2025-06-04 20:05:57 +02:00
2 changed files with 149 additions and 0 deletions

70
.github/workflows/deploy.yml vendored Normal file
View File

@@ -0,0 +1,70 @@
name: Pack and nuget
on:
push:
tags:
- '*'
jobs:
notify_pending_production_deploy:
runs-on: ubuntu-latest
steps:
-
name: Submit pending deployment notification
run: |
export TITLE="Pending osu-resources Production Deployment: $GITHUB_REF_NAME"
export URL="https://github.com/ppy/osu-resources/actions/runs/$GITHUB_RUN_ID"
export DESCRIPTION="Awaiting approval for building NuGet packages for tag $GITHUB_REF_NAME:
[View Workflow Run]($URL)"
export ACTOR_ICON="https://avatars.githubusercontent.com/u/$GITHUB_ACTOR_ID"
BODY="$(jq --null-input '{
"embeds": [
{
"title": env.TITLE,
"color": 15098112,
"description": env.DESCRIPTION,
"url": env.URL,
"author": {
"name": env.GITHUB_ACTOR,
"icon_url": env.ACTOR_ICON
}
}
]
}')"
curl \
-H "Content-Type: application/json" \
-d "$BODY" \
"${{ secrets.DISCORD_INFRA_WEBHOOK_URL }}"
pack:
name: Pack
runs-on: ubuntu-latest
environment: production
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set artifacts directory
id: artifactsPath
run: echo "::set-output name=nuget_artifacts::${{github.workspace}}/artifacts"
- name: Install .NET 8.0.x
uses: actions/setup-dotnet@v4
with:
dotnet-version: "8.0.x"
- name: Pack
run: dotnet pack -c Release osu.Game.Resources /p:Version=${{ github.ref_name }} /p:GenerateDocumentationFile=true /p:IncludeSymbols=true /p:SymbolPackageFormat=snupkg -o ${{steps.artifactsPath.outputs.nuget_artifacts}}
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: osu-resources
path: |
${{steps.artifactsPath.outputs.nuget_artifacts}}/*.nupkg
${{steps.artifactsPath.outputs.nuget_artifacts}}/*.snupkg
- name: Publish packages to nuget.org
run: dotnet nuget push ${{steps.artifactsPath.outputs.nuget_artifacts}}/*.nupkg --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json

View File

@@ -0,0 +1,79 @@
#ifndef GHOST_FS
#define GHOST_FS
#undef HIGH_PRECISION_VERTEX
#define HIGH_PRECISION_VERTEX
#include "sh_Utils.h"
#include "sh_Masking.h"
layout(location = 2) in highp vec2 v_TexCoord;
layout(std140, set = 0, binding = 0) uniform m_GhostParameters
{
highp float g_Time;
};
layout(location = 0) out vec4 o_Colour;
const float pi = 3.14159265359;
highp float distanceToBox(in vec2 pos, in vec2 size)
{
vec2 d = abs(pos) - size;
return length(max(d, 0.0)) + min(max(d.x, d.y), 0.0);
}
highp float easeInCirc(in float x) {
return 1.0 - sqrt(1.0 - x * x);
}
highp float mainBody(in vec2 pos) {
highp float topCircle = distance(pos, vec2(0.5, 0.375)) - 0.375;
highp float box = distanceToBox(pos - vec2(0.5, 0.75), vec2(0.375, 0.375));
return min(topCircle, box);
}
highp float eyes(in vec2 pos) {
const vec2 eye_position = vec2(0.125, 0.375);
return distance(vec2(abs(pos.x - 0.5), pos.y), eye_position) - 0.0625;
}
highp float zigzag(in vec2 pos) {
const int num_spikes = 4;
const float scale = pi * 2 * num_spikes;
const float corner_radius = 0.0625;
highp float strength = sin(pos.x * pi);
highp float threshold = 0.875 + (cos((pos.x - g_Time) * scale) * 0.5 + 0.5) * 0.125 * strength;
highp float distanceToEdge = 0.375 - abs(pos.x - 0.5);
if (distanceToEdge < corner_radius) {
threshold -= easeInCirc(1.0 - distanceToEdge / corner_radius) * corner_radius;
}
return pos.y - threshold;
}
void main(void)
{
highp float blendRange = v_BlendRange.x / v_TexRect.z;
vec2 pos = v_TexCoord;
highp float dst = mainBody(pos);
dst = max(dst, -eyes(pos));
dst = max(dst, zigzag(pos));
highp float alpha = blendRange.x == 0.0 ? float(dst < 0.0) : (clamp(-dst, 0.0, blendRange.x) / blendRange.x);
o_Colour = getRoundedColor(vec4(vec3(1.0), alpha), vec2(0.0));
}
#endif