Compare commits
7 Commits
2025.530.0
...
2025.605.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bc451a4856 | ||
|
|
3c0184059b | ||
|
|
94c42a9cc9 | ||
|
|
91fe0794f9 | ||
|
|
a20237478c | ||
|
|
0d23c81b43 | ||
|
|
21f0e584b6 |
70
.github/workflows/deploy.yml
vendored
Normal file
70
.github/workflows/deploy.yml
vendored
Normal 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
|
||||||
79
osu.Game.Resources/Shaders/sh_Ghost.fs
Normal file
79
osu.Game.Resources/Shaders/sh_Ghost.fs
Normal 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
|
||||||
Reference in New Issue
Block a user