Merge pull request 'master' (#102) from Alienjack/AxibugEmuOnline:master into master

Reviewed-on: sin365/AxibugEmuOnline#102
This commit is contained in:
sin365 2025-07-15 14:56:44 +08:00
commit 3c04d26c50
51 changed files with 4478 additions and 817 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: b5c1ebe19e88e8840b17582b45643281
guid: 2d28d800dbf30c84da9e5d605a4f9896
folderAsset: yes
DefaultImporter:
externalObjects: {}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -0,0 +1,117 @@
fileFormatVersion: 2
guid: 7becc278ccc2a664d9482f042623c95f
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 128
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

@ -0,0 +1,117 @@
fileFormatVersion: 2
guid: 8e43e435573541c41940d99f99f03582
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 128
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

@ -0,0 +1,117 @@
fileFormatVersion: 2
guid: 3025a046e62dd884b92dde0a71bf62b0
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 128
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@ -0,0 +1,117 @@
fileFormatVersion: 2
guid: 8b18487f95d9f874cb71f073bf85c0ad
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 128
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -0,0 +1,117 @@
fileFormatVersion: 2
guid: d8d5accbc2f9ca84cae3db84ab86ca96
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 128
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

@ -0,0 +1,117 @@
fileFormatVersion: 2
guid: c018ffaba8708f64684883876932c38d
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 128
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -0,0 +1,117 @@
fileFormatVersion: 2
guid: 6157ffb6d56b8a14bbc93ee13d42319e
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 128
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@ -0,0 +1,117 @@
fileFormatVersion: 2
guid: 8cd798b4dcab9ba4880e3189f88679c5
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 128
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@ -0,0 +1,117 @@
fileFormatVersion: 2
guid: ab8d52ee69dbdc54c9a75891603dbc38
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 0
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 128
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@ -677,6 +677,14 @@ PrefabInstance:
propertyPath: m_AnchoredPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6030618878828304669, guid: d3c2508a55398a24db5d68f68d2702ea, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 6030618878828304669, guid: d3c2508a55398a24db5d68f68d2702ea, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 6100013163502236362, guid: d3c2508a55398a24db5d68f68d2702ea, type: 3}
propertyPath: m_AnchorMax.y
value: 0

View File

@ -648,6 +648,84 @@ MonoBehaviour:
m_FlexibleWidth: -1
m_FlexibleHeight: -1
m_LayoutPriority: 1
--- !u!1 &5328855647670170521
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4076923977615567036}
- component: {fileID: 37888837119744512}
- component: {fileID: 5535502572802983660}
m_Layer: 5
m_Name: "\u2196"
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &4076923977615567036
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5328855647670170521}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 2180787260962546873}
m_Father: {fileID: 5353336693430589123}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0, y: 1}
--- !u!114 &37888837119744512
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5328855647670170521}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Padding:
m_Left: 8
m_Right: 2
m_Top: 8
m_Bottom: 0
m_ChildAlignment: 2
m_Spacing: 10
m_ChildForceExpandWidth: 0
m_ChildForceExpandHeight: 0
m_ChildControlWidth: 1
m_ChildControlHeight: 1
m_ChildScaleWidth: 1
m_ChildScaleHeight: 1
m_ReverseArrangement: 0
--- !u!114 &5535502572802983660
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5328855647670170521}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
m_Name:
m_EditorClassIdentifier:
m_HorizontalFit: 2
m_VerticalFit: 2
--- !u!1 &5568161260996910275
GameObject:
m_ObjectHideFlags: 0
@ -678,6 +756,7 @@ RectTransform:
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 5681144522345305637}
- {fileID: 4076923977615567036}
- {fileID: 6362836288749559125}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@ -899,6 +978,77 @@ MonoBehaviour:
m_EffectColor: {r: 0, g: 0, b: 0, a: 0.3137255}
m_EffectDistance: {x: 3, y: -3}
m_UseGraphicAlpha: 1
--- !u!1 &5841225593175283174
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3401503803137628060}
- component: {fileID: 209050608986704394}
- component: {fileID: 7323849352792172416}
m_Layer: 5
m_Name: TEMPLATE
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &3401503803137628060
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5841225593175283174}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 5173410857689853898}
m_Father: {fileID: 2180787260962546873}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &209050608986704394
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5841225593175283174}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
m_Name:
m_EditorClassIdentifier:
m_IgnoreLayout: 0
m_MinWidth: -1
m_MinHeight: -1
m_PreferredWidth: 60
m_PreferredHeight: 60
m_FlexibleWidth: -1
m_FlexibleHeight: -1
m_LayoutPriority: 1
--- !u!114 &7323849352792172416
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5841225593175283174}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b1135cda2fa7d714f9d4b8a2a3130b4d, type: 3}
m_Name:
m_EditorClassIdentifier:
UI_Icon: {fileID: 2750845858210034251}
--- !u!1 &6140890295709974557
GameObject:
m_ObjectHideFlags: 0
@ -974,6 +1124,81 @@ MonoBehaviour:
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &6564643175566609500
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 5173410857689853898}
- component: {fileID: 7508341607458121823}
- component: {fileID: 2750845858210034251}
m_Layer: 5
m_Name: Icon
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &5173410857689853898
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6564643175566609500}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 3401503803137628060}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: -0.000061035156, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &7508341607458121823
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6564643175566609500}
m_CullTransparentMesh: 1
--- !u!114 &2750845858210034251
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6564643175566609500}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 0
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 21300000, guid: 8b18487f95d9f874cb71f073bf85c0ad, type: 3}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &6819636247886330503
GameObject:
m_ObjectHideFlags: 0
@ -1056,6 +1281,83 @@ MonoBehaviour:
m_EditorClassIdentifier:
m_HorizontalFit: 2
m_VerticalFit: 2
--- !u!1 &7293448547499054900
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2180787260962546873}
- component: {fileID: 8293546264338150520}
- component: {fileID: 193311971021743745}
m_Layer: 5
m_Name: DevicesBar
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &2180787260962546873
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7293448547499054900}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 3401503803137628060}
m_Father: {fileID: 4076923977615567036}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0, y: 0.5}
--- !u!114 &8293546264338150520
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7293448547499054900}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: e8b33a9300654744488a5dd3d4810dc2, type: 3}
m_Name:
m_EditorClassIdentifier:
ITEM_TEMPLATE: {fileID: 7323849352792172416}
--- !u!114 &193311971021743745
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7293448547499054900}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Padding:
m_Left: 0
m_Right: 0
m_Top: 0
m_Bottom: 0
m_ChildAlignment: 0
m_Spacing: 0
m_ChildForceExpandWidth: 0
m_ChildForceExpandHeight: 0
m_ChildControlWidth: 1
m_ChildControlHeight: 1
m_ChildScaleWidth: 0
m_ChildScaleHeight: 0
m_ReverseArrangement: 0
--- !u!1 &7520417476292222346
GameObject:
m_ObjectHideFlags: 0

View File

@ -145,7 +145,7 @@ Transform:
m_GameObject: {fileID: 408101310}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 1.5490109, y: -3.056903, z: -0.117817014}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
@ -210,14 +210,18 @@ MonoBehaviour:
m_EditorClassIdentifier:
SHADER:
- {fileID: 4800000, guid: e44382c7b3957134cb4533224ff9eeaa, type: 3}
- {fileID: 4800000, guid: d0063c32001ef9945888b38bb4932cf6, type: 3}
- {fileID: 4800000, guid: e36189d8343a744ff946d70df1adb684, type: 3}
- {fileID: 4800000, guid: 1fed85d45421d45a6ac770579285b756, type: 3}
- {fileID: 4800000, guid: 8e9191ac23b05c14fa2a62f037ce8261, type: 3}
- {fileID: 4800000, guid: d96e49db3173e49a4a0fcf6125cc7f4e, type: 3}
- {fileID: 4800000, guid: 57c38351364c92e45aef2dc17245b3ce, type: 3}
- {fileID: 4800000, guid: bab7d8f2e62367743930d118a37e824a, type: 3}
- {fileID: 4800000, guid: 5dd9160e7dde4dd4db07347ce4780217, type: 3}
- {fileID: 4800000, guid: 8e9191ac23b05c14fa2a62f037ce8261, type: 3}
- {fileID: 4800000, guid: d7b367e99136835468184ea471e79e02, type: 3}
- {fileID: 4800000, guid: f63497435389f8548ab973da8535e1b5, type: 3}
- {fileID: 4800000, guid: bef4d98671a3c524f9bfdba0d25e5991, type: 3}
- {fileID: 4800000, guid: fdf9f1937116ab84c97a58a4cf82fbf8, type: 3}
- {fileID: 4800000, guid: e36189d8343a744ff946d70df1adb684, type: 3}
- {fileID: 4800000, guid: 1fed85d45421d45a6ac770579285b756, type: 3}
- {fileID: 4800000, guid: d96e49db3173e49a4a0fcf6125cc7f4e, type: 3}
IMPORTENT: {fileID: 4747871931704546037, guid: e6f56a07c0ec38946a0257a1e0b8926d, type: 3}
debugger: {fileID: 408101312}
bTestSkipWebApiToConServer: 0

View File

@ -3,23 +3,23 @@ Shader "Filter/crt-easymode"
{
Properties
{
BRIGHT_BOOST("BRIGHT_BOOST",Float) = 1.2
DILATION("DILATION",Float) = 1.0
GAMMA_INPUT("GAMMA_INPUT",Float) = 2.0
GAMMA_OUTPUT("GAMMA_OUTPUT",Float) = 1.8
MASK_SIZE("MASK_SIZE",Float) = 1.0
MASK_STAGGER("MASK_STAGGER",Float) = 0.0
MASK_STRENGTH("MASK_STRENGTH",Float) = 0.3
MASK_DOT_HEIGHT("MASK_DOT_HEIGHT",Float) = 1.0
MASK_DOT_WIDTH("MASK_DOT_WIDTH",Float) = 1.0
SCANLINE_CUTOFF("SCANLINE_CUTOFF",Float) = 400.0
SCANLINE_BEAM_WIDTH_MAX("SCANLINE_BEAM_WIDTH_MAX",Float) = 1.5
SCANLINE_BEAM_WIDTH_MIN("SCANLINE_BEAM_WIDTH_MIN",Float) = 1.5
SCANLINE_BRIGHT_MAX("SCANLINE_BRIGHT_MAX",Float) = 0.65
SCANLINE_BRIGHT_MIN("SCANLINE_BRIGHT_MIN",Float) = 0.35
SCANLINE_STRENGTH("SCANLINE_STRENGTH",Float) = 1.0
SHARPNESS_H("SHARPNESS_H",Float) = 0.5
SHARPNESS_V("SHARPNESS_V",Float) = 1.0
BRIGHT_BOOST("BRIGHT_BOOST", Float) = 1.2
DILATION("DILATION", Float) = 1.0
GAMMA_INPUT("GAMMA_INPUT", Float) = 2.0
GAMMA_OUTPUT("GAMMA_OUTPUT", Float) = 1.8
MASK_SIZE("MASK_SIZE", Float) = 1.0
MASK_STAGGER("MASK_STAGGER", Float) = 0.0
MASK_STRENGTH("MASK_STRENGTH", Float) = 0.3
MASK_DOT_HEIGHT("MASK_DOT_HEIGHT", Float) = 1.0
MASK_DOT_WIDTH("MASK_DOT_WIDTH", Float) = 1.0
SCANLINE_CUTOFF("SCANLINE_CUTOFF", Float) = 400.0
SCANLINE_BEAM_WIDTH_MAX("SCANLINE_BEAM_WIDTH_MAX", Float) = 1.5
SCANLINE_BEAM_WIDTH_MIN("SCANLINE_BEAM_WIDTH_MIN", Float) = 1.5
SCANLINE_BRIGHT_MAX("SCANLINE_BRIGHT_MAX", Float) = 0.65
SCANLINE_BRIGHT_MIN("SCANLINE_BRIGHT_MIN", Float) = 0.35
SCANLINE_STRENGTH("SCANLINE_STRENGTH", Float) = 1.0
SHARPNESS_H("SHARPNESS_H", Float) = 0.5
SHARPNESS_V("SHARPNESS_V", Float) = 1.0
}
SubShader
{
@ -29,7 +29,7 @@ Shader "Filter/crt-easymode"
#pragma vertex vert_img
#pragma fragment main
#include "UnityCG.cginc"
#include "../FilterChain.cginc"
#include "../FilterChain.cginc"
float BRIGHT_BOOST;
float DILATION;
@ -47,7 +47,7 @@ Shader "Filter/crt-easymode"
float SCANLINE_BRIGHT_MIN;
float SCANLINE_STRENGTH;
float SHARPNESS_H;
float SHARPNESS_V;
float SHARPNESS_V;
struct v2f
{
@ -60,19 +60,18 @@ Shader "Filter/crt-easymode"
vec4 dilate(vec4 col)
{
vec4 x = mix(vec4(1.0,1.0,1.0,1.0), col, DILATION);
vec4 x = mix(vec4(1.0, 1.0, 1.0, 1.0), col, DILATION);
return col * x;
}
float curve_distance(float x, float sharp)
{
/*
apply half-circle s-curve to distance for sharper (more pixelated) interpolation
single line formula for Graph Toy:
/*
apply half - circle s - curve to distance for sharper (more pixelated) interpolation
single line formula for Graph Toy :
0.5 - sqrt(0.25 - (x - step(0.5, x)) * (x - step(0.5, x))) * sign(0.5 - x)
*/
*/
float x_step = step(0.5, x);
float curve = 0.5 - sqrt(0.25 - (x - x_step) * (x - x_step)) * sign(0.5 - x);
@ -82,12 +81,13 @@ Shader "Filter/crt-easymode"
mat4x4 get_color_matrix(vec2 co, vec2 dx)
{
return mat4x4(TEX2D(co - dx), TEX2D(co), TEX2D(co + dx), TEX2D(co + 2.0 * dx));
}
vec3 filter_lanczos(vec4 coeffs, mat4x4 color_matrix)
{
vec4 col = mul(color_matrix,coeffs);
vec4 col = mul(color_matrix, coeffs);
vec4 sample_min = min(color_matrix[1], color_matrix[2]);
vec4 sample_max = max(color_matrix[1], color_matrix[2]);
@ -107,25 +107,25 @@ Shader "Filter/crt-easymode"
vec3 col, col2;
#if TRUE
curve_x = curve_distance(dist.x, SHARPNESS_H * SHARPNESS_H);
curve_x = curve_distance(dist.x, SHARPNESS_H * SHARPNESS_H);
vec4 coeffs = PI * vec4(1.0 + curve_x, curve_x, 1.0 - curve_x, 2.0 - curve_x);
vec4 coeffs = PI * vec4(1.0 + curve_x, curve_x, 1.0 - curve_x, 2.0 - curve_x);
coeffs = FIX(coeffs);
coeffs = 2.0 * sin(coeffs) * sin(coeffs * 0.5) / (coeffs * coeffs);
coeffs /= dot(coeffs, vec4(1.0));
coeffs = FIX(coeffs);
coeffs = 2.0 * sin(coeffs) * sin(coeffs * 0.5) / (coeffs * coeffs);
coeffs /= dot(coeffs, vec4(1.0));
col = filter_lanczos(coeffs, get_color_matrix(tex_co, dx));
col2 = filter_lanczos(coeffs, get_color_matrix(tex_co + dy, dx));
col = filter_lanczos(coeffs, get_color_matrix(tex_co, dx));
col2 = filter_lanczos(coeffs, get_color_matrix(tex_co + dy, dx));
#else
curve_x = curve_distance(dist.x, SHARPNESS_H);
curve_x = curve_distance(dist.x, SHARPNESS_H);
col = mix(TEX2D(tex_co).rgb, TEX2D(tex_co + dx).rgb, curve_x);
col2 = mix(TEX2D(tex_co + dy).rgb, TEX2D(tex_co + dx + dy).rgb, curve_x);
col = mix(TEX2D(tex_co).rgb, TEX2D(tex_co + dx).rgb, curve_x);
col2 = mix(TEX2D(tex_co + dy).rgb, TEX2D(tex_co + dx + dy).rgb, curve_x);
#endif
col = mix(col, col2, curve_distance(dist.y, SHARPNESS_V));
col = pow(col, vec3(GAMMA_INPUT / (DILATION + 1.0),GAMMA_INPUT / (DILATION + 1.0),GAMMA_INPUT / (DILATION + 1.0)));
col = pow(col, vec3(GAMMA_INPUT / (DILATION + 1.0), GAMMA_INPUT / (DILATION + 1.0), GAMMA_INPUT / (DILATION + 1.0)));
float luma = dot(vec3(0.2126, 0.7152, 0.0722), col);
float bright = (max(col.r, max(col.g, col.b)) + luma) * 0.5;
@ -139,19 +139,19 @@ Shader "Filter/crt-easymode"
vec3 mask_weight;
if (dot_no == 0) mask_weight = vec3(1.0, mask, mask);
else if (dot_no == 1) mask_weight = vec3(mask, 1.0, mask);
else mask_weight = vec3(mask, mask, 1.0);
else if (dot_no == 1) mask_weight = vec3(mask, 1.0, mask);
else mask_weight = vec3(mask, mask, 1.0);
if (SourceSize.y >= SCANLINE_CUTOFF)
scan_weight = 1.0;
scan_weight = 1.0;
col2 = col.rgb;
col *= vec3(scan_weight,scan_weight,scan_weight);
col *= vec3(scan_weight, scan_weight, scan_weight);
col = mix(col, col2, scan_bright);
col *= mask_weight;
col = pow(col, vec3(1.0 / GAMMA_OUTPUT,1.0 / GAMMA_OUTPUT,1.0 / GAMMA_OUTPUT));
col = pow(col, vec3(1.0 / GAMMA_OUTPUT, 1.0 / GAMMA_OUTPUT, 1.0 / GAMMA_OUTPUT));
col = col* BRIGHT_BOOST;
col = col * BRIGHT_BOOST;
vec4 FragColor = vec4(col, 1.0);
@ -161,6 +161,3 @@ Shader "Filter/crt-easymode"
}
}
}

View File

@ -1,162 +0,0 @@
using Assets.Script.AppMain.Filter;
using UnityEngine;
namespace AxibugEmuOnline.Client.Filters
{
[Strip(RuntimePlatform.PSP2)]
public class RLPRO_CRT : FilterEffect
{
public override string Name => nameof(RLPRO_CRT);
protected override string ShaderName => null;
#region BleedPass_Param
public FilterParameter<EnumBleedMode> BleedMode = EnumBleedMode.NTSCOld3Phase;
[Range(0, 15)]
public FloatParameter BleedAmount = 1f;
#endregion
#region CRTAperture_Param
[Range(0, 5)]
public FloatParameter GlowHalation = 0.1f;
[Range(0, 2)]
public FloatParameter GlowDifusion = 0.05f;
[Range(0, 2)]
public FloatParameter MaskColors = 2.0f;
[Range(0, 1)]
public FloatParameter MaskStrength = 0.3f;
[Range(0, 5)]
public FloatParameter GammaInput = 2.4f;
[Range(0, 5)]
public FloatParameter GammaOutput = 2.4f;
[Range(0, 2.5f)]
public FloatParameter Brightness = 1.5f;
#endregion
#region TV_Effect_Param
public FilterParameter<EnumWrapMode> WrapMode = EnumWrapMode.SimpleWrap;
[Range(0f, 2f)]
public FloatParameter maskDark = 0.5f;
[Range(0f, 2f)]
public FloatParameter maskLight = 1.5f;
[Range(-8f, -16f)]
public FloatParameter hardScan = -8.0f;
[Range(-3f, 1f)]
public FloatParameter hardPix = -3.0f;
public FloatParameter warpX = 0.03125f;
public FloatParameter warpY = 0.04166f;
[Range(1f, 16f)]
public FloatParameter resScale = 4f;
[Range(0.5f, 5f)]
public FloatParameter scale = 1f;
[Range(0f, 1f)]
public FloatParameter fade = 1f;
#endregion
Material m_bleedMat;
Material m_crtApertureMat;
Material m_tvEffectMat;
protected override void OnInit(Material renderMat)
{
m_bleedMat = new Material(Shader.Find("Filter/RLPro_Bleed"));
m_crtApertureMat = new Material(Shader.Find("Filter/RLPro_CRT_Aperture"));
m_tvEffectMat = new Material(Shader.Find("Filter/RLPro_TV_Effect"));
}
protected override void OnRenderer(Material renderMat, Texture src, RenderTexture result)
{
var rt1 = BleedPass(src);
var rt2 = CRT_AperturePass(rt1);
var rt3 = TV_Effect_Pass(rt2);
Graphics.Blit(rt3, result);
RenderTexture.ReleaseTemporary(rt1);
RenderTexture.ReleaseTemporary(rt2);
RenderTexture.ReleaseTemporary(rt3);
}
private RenderTexture BleedPass(Texture src)
{
var rt = RenderTexture.GetTemporary(src.width, src.height);
m_bleedMat.DisableKeyword("_NTSCOld3Phase");
m_bleedMat.DisableKeyword("_NTSC3Phase");
m_bleedMat.DisableKeyword("_NTSC2Phase");
switch (BleedMode.GetValue())
{
case EnumBleedMode.NTSCOld3Phase:
m_bleedMat.EnableKeyword("_NTSCOld3Phase");
break;
case EnumBleedMode.NTSC3Phase:
m_bleedMat.EnableKeyword("_NTSC3Phase");
break;
case EnumBleedMode.NTSC2Phase:
m_bleedMat.EnableKeyword("_NTSC2Phase");
break;
}
m_bleedMat.SetFloat("bleedAmount", BleedAmount.GetValue());
Graphics.Blit(src, rt, m_bleedMat);
return rt;
}
private RenderTexture CRT_AperturePass(Texture src)
{
var rt = RenderTexture.GetTemporary(src.width, src.height);
m_crtApertureMat.SetFloat("GLOW_HALATION", GlowHalation.GetValue());
m_crtApertureMat.SetFloat("GLOW_DIFFUSION", GlowDifusion.GetValue());
m_crtApertureMat.SetFloat("MASK_COLORS", MaskColors.GetValue());
m_crtApertureMat.SetFloat("MASK_STRENGTH", MaskStrength.GetValue());
m_crtApertureMat.SetFloat("GAMMA_INPUT", GammaInput.GetValue());
m_crtApertureMat.SetFloat("GAMMA_OUTPUT", GammaOutput.GetValue());
m_crtApertureMat.SetFloat("BRIGHTNESS", Brightness.GetValue());
Graphics.Blit(src, rt, m_crtApertureMat);
return rt;
}
private RenderTexture TV_Effect_Pass(Texture src)
{
var rt = RenderTexture.GetTemporary(src.width, src.height);
m_tvEffectMat.DisableKeyword("_SimpleWrap");
m_tvEffectMat.DisableKeyword("_CubicDistortion");
switch (WrapMode.GetValue())
{
case EnumWrapMode.SimpleWrap:
m_tvEffectMat.EnableKeyword("_SimpleWrap"); break;
case EnumWrapMode.CubicDistortion:
m_tvEffectMat.EnableKeyword("_CubicDistortion"); break;
}
m_tvEffectMat.SetFloat("maskDark", maskDark);
m_tvEffectMat.SetFloat("maskLight", maskLight);
m_tvEffectMat.SetFloat("hardScan", hardScan);
m_tvEffectMat.SetFloat("hardPix", hardPix);
m_tvEffectMat.SetVector("warp", new Vector4(warpX, warpY));
m_tvEffectMat.SetFloat("resScale", resScale);
m_tvEffectMat.SetFloat("scale", scale);
m_tvEffectMat.SetFloat("fade", fade);
Graphics.Blit(src, rt, m_tvEffectMat);
return rt;
}
public enum EnumBleedMode
{
NTSCOld3Phase,
NTSC3Phase,
NTSC2Phase,
}
public enum EnumWrapMode
{
SimpleWrap,
CubicDistortion
}
}
}

View File

@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: fcc83c5bfa946f748811247794560a56

View File

@ -1,175 +0,0 @@
Shader "Filter/RLPro_Bleed"
{
Properties
{
_MainTex ("Base (RGB)", 2D) = "white" {}
}
SubShader
{
Pass
{
CGPROGRAM
#pragma shader_feature_local _NTSCOld3Phase _NTSC3Phase _NTSC2Phase
#pragma vertex vert_img
#pragma fragment frag
#include "UnityCG.cginc"
sampler2D _MainTex;
float4 _MainTex_TexelSize;
float2 _iResolution;
float bleedAmount = 1.0;
int bleedLength = 21;
struct v2f
{
float4 pos : POSITION;
float2 uv : TEXCOORD0;
};
half3 rgb2yiq(half3 c)
{
return half3(
(0.2989 * c.x + 0.5959 * c.y + 0.2115 * c.z),
(0.5870 * c.x - 0.2744 * c.y - 0.5229 * c.z),
(0.1140 * c.x - 0.3216 * c.y + 0.3114 * c.z)
);
}
half3 yiq2rgb(half3 c)
{
return half3(
(1.0 * c.x + 1.0 * c.y + 1.0 * c.z),
(0.956 * c.x - 0.2720 * c.y - 1.1060 * c.z),
(0.6210 * c.x - 0.6474 * c.y + 1.7046 * c.z)
);
}
half3 t2d(float2 p)
{
half3 col = tex2D(_MainTex, p).rgb;
return rgb2yiq(col);
}
#define fixCoord (p - float2( 0.5 * ONE_X, 0.0))
#define fetch_offset(offset, one_x) t2d(fixCoord + float2( (offset) * (ONE_X), 0.0));
#define get_t2d(offset, one_x) tex2D(_MainTex, p + (offset)*(one_x)).rgb;
float4 FragNTSCOld3Phase(v2f i) : COLOR
{
float2 uv = i.uv;
float2 p = uv;
float ONE_X = 1.0 / _ScreenParams.x;
ONE_X *= bleedAmount;
bleedLength = 25;
float maxTexLength = 50.0;
float luma_filter[25]; luma_filter[0] = -0.000071070; luma_filter[1] = -0.000032816; luma_filter[2] = 0.000128784; luma_filter[3] = 0.000134711; luma_filter[4] = -0.000226705; luma_filter[5] = -0.000777988; luma_filter[6] = -0.000997809; luma_filter[7] = -0.000522802; luma_filter[8] = 0.000344691; luma_filter[9] = 0.000768930; luma_filter[10] = 0.000275591; luma_filter[11] = -0.000373434; luma_filter[12] = 0.000522796; luma_filter[13] = 0.003813817; luma_filter[14] = 0.007502825; luma_filter[15] = 0.006786001; luma_filter[16] = -0.002636726; luma_filter[17] = -0.019461182; luma_filter[18] = -0.033792479; luma_filter[19] = -0.029921972; luma_filter[20] = 0.005032552; luma_filter[21] = 0.071226466; luma_filter[22] = 0.151755921; luma_filter[23] = 0.218166470; luma_filter[24] = 0.243902439;
float chroma_filter[24 + 1]; chroma_filter[0] = 0.001845562; chroma_filter[1] = 0.002381606; chroma_filter[2] = 0.003040177; chroma_filter[3] = 0.003838976; chroma_filter[4] = 0.004795341; chroma_filter[5] = 0.005925312; chroma_filter[6] = 0.007242534; chroma_filter[7] = 0.008757043; chroma_filter[8] = 0.010473987; chroma_filter[9] = 0.012392365; chroma_filter[10] = 0.014503872; chroma_filter[11] = 0.016791957; chroma_filter[12] = 0.019231195; chroma_filter[13] = 0.021787070; chroma_filter[14] = 0.024416251; chroma_filter[15] = 0.027067414; chroma_filter[16] = 0.029682613; chroma_filter[17] = 0.032199202; chroma_filter[18] = 0.034552198; chroma_filter[19] = 0.036677005; chroma_filter[20] = 0.038512317; chroma_filter[21] = 0.040003044; chroma_filter[22] = 0.041103048; chroma_filter[23] = 0.041777517; chroma_filter[24] = 0.042004791;
half3 signal = half3(0.0,0.0,0.0);
half3 norm = half3(0.0,0.0,0.0);
half3 adj = half3(0.0,0.0,0.0);
int taps = bleedLength - 4;
for (int ii = 0; ii < taps % 1023; ii++)
{
float offset = float(ii);
half3 sums = fetch_offset(offset - float(taps), ONE_X) + fetch_offset(float(taps) - offset, ONE_X);
adj = half3(luma_filter[ii + 3], chroma_filter[ii], chroma_filter[ii]);
signal += sums * adj;
norm += adj;
}
adj = half3(luma_filter[taps], chroma_filter[taps], chroma_filter[taps]);
half4 col23 = tex2D(_MainTex, fixCoord);
signal += rgb2yiq(col23.rgb) * adj;
norm += adj;
signal = signal / norm;
float3 rgb = yiq2rgb(signal);
float alpha = col23.a + (rgb.r + rgb.g + rgb.b) / 3;
return half4(rgb, alpha);
}
float4 FragNTSC3Phase(v2f i) : COLOR
{
float2 uv = i.uv;
float2 p = uv;
float ONE_X = 1.0 / _iResolution.x;
ONE_X *= bleedAmount;
bleedLength = 25;
float maxTexLength = 50.0;
float luma_filter[25]; luma_filter[0] = -0.000012020; luma_filter[1] = -0.000022146; luma_filter[2] = -0.000013155; luma_filter[3] = -0.000012020; luma_filter[4] = -0.000049979; luma_filter[5] = -0.000113940; luma_filter[6] = -0.000122150; luma_filter[7] = -0.000005612; luma_filter[8] = 0.000170516; luma_filter[9] = 0.000237199; luma_filter[10] = 0.000169640; luma_filter[11] = 0.000285688; luma_filter[12] = 0.000984574; luma_filter[13] = 0.002018683; luma_filter[14] = 0.002002275; luma_filter[15] = -0.000909882; luma_filter[16] = -0.007049081; luma_filter[17] = -0.013222860; luma_filter[18] = -0.012606931; luma_filter[19] = 0.002460860; luma_filter[20] = 0.035868225; luma_filter[21] = 0.084016453; luma_filter[22] = 0.135563500; luma_filter[23] = 0.175261268; luma_filter[24] = 0.190176552;
float chroma_filter[25]; chroma_filter[0] = -0.000118847; chroma_filter[1] = -0.000271306; chroma_filter[2] = -0.000502642; chroma_filter[3] = -0.000930833; chroma_filter[4] = -0.001451013; chroma_filter[5] = -0.002064744; chroma_filter[6] = -0.002700432; chroma_filter[7] = -0.003241276; chroma_filter[8] = -0.003524948; chroma_filter[9] = -0.003350284; chroma_filter[10] = -0.002491729; chroma_filter[11] = -0.000721149; chroma_filter[12] = 0.002164659; chroma_filter[13] = 0.006313635; chroma_filter[14] = 0.011789103; chroma_filter[15] = 0.018545660; chroma_filter[16] = 0.026414396; chroma_filter[17] = 0.035100710; chroma_filter[18] = 0.044196567; chroma_filter[19] = 0.053207202; chroma_filter[20] = 0.061590275; chroma_filter[21] = 0.068803602; chroma_filter[22] = 0.074356193; chroma_filter[23] = 0.077856564; chroma_filter[24] = 0.079052396;
half3 signal = half3(0.0,0.0,0.0);
half3 norm = half3(0.0,0.0,0.0);
half3 adj = half3(0.0,0.0,0.0);
int taps = bleedLength - 4;
for (int ii = 0; ii < taps % 1023; ii++)
{
float offset = float(ii);
half3 sums = fetch_offset(offset - float(taps), ONE_X) + fetch_offset(float(taps) - offset, ONE_X);
adj = half3(luma_filter[ii + 3], chroma_filter[ii], chroma_filter[ii]);
signal += sums * adj;
norm += adj;
}
adj = half3(luma_filter[taps], chroma_filter[taps], chroma_filter[taps]);
half4 col23 = tex2D(_MainTex, fixCoord);
signal += rgb2yiq(col23.rgb) * adj;
norm += adj;
signal = signal / norm;
float3 rgb = yiq2rgb(signal);
float alpha = col23.a + (rgb.r + rgb.g + rgb.b) / 3;
return half4(rgb, alpha);
}
float4 FragNTSC2Phase(v2f i) : COLOR
{
float2 uv = i.uv;
float2 p = uv;
float ONE_X = 1.0 / _ScreenParams.x;
ONE_X *= bleedAmount;
bleedLength = 33;
float maxTexLength = 50.0;
float luma_filter[33]; luma_filter[0] = -0.000174844; luma_filter[1] = -0.000205844; luma_filter[2] = -0.000149453; luma_filter[3] = -0.000051693; luma_filter[4] = 0.000000000; luma_filter[5] = -0.000066171; luma_filter[6] = -0.000245058; luma_filter[7] = -0.000432928; luma_filter[8] = -0.000472644; luma_filter[9] = -0.000252236; luma_filter[10] = 0.000198929; luma_filter[11] = 0.000687058; luma_filter[12] = 0.000944112; luma_filter[13] = 0.000803467; luma_filter[14] = 0.000363199; luma_filter[15] = 0.000013422; luma_filter[16] = 0.000253402; luma_filter[17] = 0.001339461; luma_filter[18] = 0.002932972; luma_filter[19] = 0.003983485; luma_filter[20] = 0.003026683; luma_filter[21] = -0.001102056; luma_filter[22] = -0.008373026; luma_filter[23] = -0.016897700; luma_filter[24] = -0.022914480; luma_filter[25] = -0.021642347; luma_filter[26] = -0.008863273; luma_filter[27] = 0.017271957; luma_filter[28] = 0.054921920; luma_filter[29] = 0.098342579; luma_filter[30] = 0.139044281; luma_filter[31] = 0.168055832; luma_filter[32] = 0.178571429;
float chroma_filter[33]; chroma_filter[0] = 0.001384762; chroma_filter[1] = 0.001678312; chroma_filter[2] = 0.002021715; chroma_filter[3] = 0.002420562; chroma_filter[4] = 0.002880460; chroma_filter[5] = 0.003406879; chroma_filter[6] = 0.004004985; chroma_filter[7] = 0.004679445; chroma_filter[8] = 0.005434218; chroma_filter[9] = 0.006272332; chroma_filter[10] = 0.007195654; chroma_filter[11] = 0.008204665; chroma_filter[12] = 0.009298238; chroma_filter[13] = 0.010473450; chroma_filter[14] = 0.011725413; chroma_filter[15] = 0.013047155; chroma_filter[16] = 0.014429548; chroma_filter[17] = 0.015861306; chroma_filter[18] = 0.017329037; chroma_filter[19] = 0.018817382; chroma_filter[20] = 0.020309220; chroma_filter[21] = 0.021785952; chroma_filter[22] = 0.023227857; chroma_filter[23] = 0.024614500; chroma_filter[24] = 0.025925203; chroma_filter[25] = 0.027139546; chroma_filter[26] = 0.028237893; chroma_filter[27] = 0.029201910; chroma_filter[28] = 0.030015081; chroma_filter[29] = 0.030663170; chroma_filter[30] = 0.031134640; chroma_filter[31] = 0.031420995; chroma_filter[32] = 0.031517031;
half3 signal = half3(0.0,0.0,0.0);
half3 norm = half3(0.0,0.0,0.0);
half3 adj = half3(0.0,0.0,0.0);
int taps = bleedLength - 4;
for (int ii = 0; ii < taps % 1023; ii++)
{
float offset = float(ii);
half3 sums = fetch_offset(offset - float(taps), ONE_X) + fetch_offset(float(taps) - offset, ONE_X);
adj = half3(luma_filter[ii + 3], chroma_filter[ii], chroma_filter[ii]);
signal += sums * adj;
norm += adj;
}
adj = half3(luma_filter[taps], chroma_filter[taps], chroma_filter[taps]);
half4 col23 = tex2D(_MainTex, fixCoord);
signal += rgb2yiq(col23.rgb) * adj;
norm += adj;
signal = signal / norm;
float3 rgb = yiq2rgb(signal);
float alpha = col23.a + (rgb.r + rgb.g + rgb.b) / 3;
return half4(rgb, alpha);
}
fixed4 frag (v2f i) : SV_Target
{
#if _NTSCOld3Phase
return FragNTSCOld3Phase(i);
#elif _NTSC3Phase
return FragNTSC3Phase(i);
#else
return FragNTSC2Phase(i);
#endif
}
ENDCG
}
}
}

View File

@ -1,144 +0,0 @@
Shader "Filter/RLPro_CRT_Aperture"
{
Properties
{
_MainTex ("Base (RGB)", 2D) = "white" {}
}
SubShader
{
Pass
{
CGPROGRAM
#pragma shader_feature_local _NTSCOld3Phase _NTSC3Phase _NTSC2Phase
#pragma vertex vert_img
#pragma fragment Frag0
#include "UnityCG.cginc"
#define FIX(c) max(abs(c), 1e-5)
#define saturate(c) clamp(c, 0.0, 1.0)
#define PI 3.14159265359
sampler2D _MainTex;
float4 _MainTex_TexelSize;
float2 _iResolution;
float GLOW_HALATION = 0.1;
float GLOW_DIFFUSION = 0.05;
float MASK_COLORS = 2.0;
float MASK_STRENGTH = 0.3;
float GAMMA_INPUT = 2.4;
float GAMMA_OUTPUT = 2.4;
float BRIGHTNESS = 1.5;
struct v2f
{
float4 pos : POSITION;
float2 uv : TEXCOORD0;
};
float mod(float x, float y)
{
return x - y * floor(x / y);
}
float fract(float x)
{
return x - floor(x);
}
float2 fract(float2 x)
{
return x - floor(x);
}
float4 fract(float4 x)
{
return x - floor(x);
}
float3 TEX2D(float2 c)
{
return pow(abs(tex2D(_MainTex, c).rgb), float3(GAMMA_INPUT, GAMMA_INPUT, GAMMA_INPUT)).xyz;
}
float3x3 get_color_matrix(float2 co, float2 dx)
{
return float3x3(TEX2D(co - dx), TEX2D(co), TEX2D(co + dx));
}
float3 blur(float3x3 m, float dist, float rad)
{
float3 x = float3(dist - 1.0, dist, dist + 1.0) / rad;
float3 w = exp2(x * x * -1.0);
return (m[0] * w.x + m[1] * w.y + m[2] * w.z) / (w.x + w.y + w.z);
}
float3 filter_gaussian(float2 co, float2 tex_size)
{
float2 dx = float2(1.0 / tex_size.x, 0.0);
float2 dy = float2(0.0, 1.0 / tex_size.y);
float2 pix_co = co * tex_size;
float2 tex_co = (floor(pix_co) + 0.5) / tex_size;
float2 dist = (fract(pix_co) - 0.5) * -1.0;
float3x3 line0 = get_color_matrix(tex_co - dy, dx);
float3x3 line1 = get_color_matrix(tex_co, dx);
float3x3 line2 = get_color_matrix(tex_co + dy, dx);
float3x3 column = float3x3(blur(line0, dist.x, 0.5), blur(line1, dist.x, 0.5), blur(line2, dist.x, 0.5));
return blur(column, dist.y, 0.5);
}
float3 filter_lanczos(float2 co, float2 tex_size, float sharp)
{
tex_size.x *= sharp;
float2 dx = float2(1.0 / tex_size.x, 0.0);
float2 pix_co = co * tex_size - float2(0.5, 0.0);
float2 tex_co = (floor(pix_co) + float2(0.5, 0.001)) / tex_size;
float2 dist = fract(pix_co);
float4 coef = PI * float4(dist.x + 1.0, dist.x, dist.x - 1.0, dist.x - 2.0);
coef = FIX(coef);
coef = 2.0 * sin(coef) * sin(coef / 2.0) / (coef * coef);
coef /= dot(coef, float4(1.0, 1.0, 1.0, 1.0));
float4 col1 = float4(TEX2D(tex_co), 1.0);
float4 col2 = float4(TEX2D(tex_co + dx), 1.0);
float4x4 fkfk = mul(coef.x, float4x4(col1, col1, col2, col2));
float4x4 fkfks = mul(coef.y, float4x4(col1, col1, col2, col2));
float4x4 fkfkb = mul(coef.z, float4x4(col1, col1, col2, col2));
return float3(fkfk[0].x, fkfk[0].y, fkfk[0].z);
}
float3 mix(float3 x, float3 y, float3 a) {
return float3(x * (1 - a) + y * a);
}
float3 get_mask_weight(float x)
{
float i = mod(floor(x), MASK_COLORS);
if (i == 0.0) return mix(float3(1.0, 0.0, 1.0), float3(1.0, 0.0, 0.0), MASK_COLORS - 2.0);
else if (i == 1.0) return float3(0.0, 1.0, 0.0);
else return float3(0.0, 0.0, 1.0);
}
float4 Frag0(v2f i) : SV_Target
{
float2 pos = i.uv;
float3 col_glow = filter_gaussian(pos, _ScreenParams.xy);
float3 col_soft = filter_lanczos(pos, _ScreenParams.xy, 1);
float3 col_sharp = filter_lanczos(pos, _ScreenParams.xy, 3);
float3 col = sqrt(col_sharp * col_soft);
col_glow = saturate(col_glow - col);
col += col_glow * col_glow * GLOW_HALATION;
col = mix(col, col * get_mask_weight(pos.x) * MASK_COLORS, MASK_STRENGTH);
col += col_glow * GLOW_DIFFUSION;
col = pow(abs(col * BRIGHTNESS), float3(1.0 / GAMMA_OUTPUT, 1.0 / GAMMA_OUTPUT, 1.0 / GAMMA_OUTPUT));
half4 col1 = tex2D(_MainTex, pos);
float fade = 1;
return lerp(col1,float4(col, col1.a+(col.r+col.g+col.b)/3),fade);
}
ENDCG
}
}
}

View File

@ -1,9 +0,0 @@
fileFormatVersion: 2
guid: f63497435389f8548ab973da8535e1b5
ShaderImporter:
externalObjects: {}
defaultTextures: []
nonModifiableTextures: []
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,162 +0,0 @@
Shader "Filter/RLPro_TV_Effect"
{
Properties
{
_MainTex ("Base (RGB)", 2D) = "white" {}
}
SubShader
{
Pass
{
CGPROGRAM
#pragma shader_feature_local _SimpleWrap _CubicDistortion
#pragma vertex vert_img
#pragma fragment Frag
#include "UnityCG.cginc"
sampler2D _MainTex;
float4 _MainTex_TexelSize;
float2 _iResolution;
float maskDark = 0.5;
float maskLight = 1.5;
float hardScan = -8.0;
float hardPix = -3.0;
float2 warp = float2(1.0 / 32.0, 1.0 / 24.0);
float2 res;
float resScale;
float scale;
float fade;
struct v2f
{
float4 pos : POSITION;
float2 uv : TEXCOORD0;
};
float3 Fetch(float2 pos, float2 off)
{
pos = floor(pos * res + off) / res;
return tex2Dlod(_MainTex, float4(pos.xy, 0, -16.0)).rgb;
}
float2 Dist(float2 pos) { pos = pos * res; return -((pos - floor(pos)) - float2(0.5, 0.5)); }
float Gaus(float pos, float scale) { return exp2(scale * pos * pos); }
float3 Horz3(float2 pos, float off)
{
float3 b = Fetch(pos, float2(-1.0, off));
float3 c = Fetch(pos, float2(0.0, off));
float3 d = Fetch(pos, float2(1.0, off));
float dst = Dist(pos).x;
float scale = hardPix;
float wb = Gaus(dst - 1.0, scale);
float wc = Gaus(dst + 0.0, scale);
float wd = Gaus(dst + 1.0, scale);
return (b * wb + c * wc + d * wd) / (wb + wc + wd);
}
float3 Horz5(float2 pos, float off)
{
float3 a = Fetch(pos, float2(-2.0, off));
float3 b = Fetch(pos, float2(-1.0, off));
float3 c = Fetch(pos, float2(0.0, off));
float3 d = Fetch(pos, float2(1.0, off));
float3 e = Fetch(pos, float2(2.0, off));
float dst = Dist(pos).x;
float scale = hardPix;
float wa = Gaus(dst - 2.0, scale);
float wb = Gaus(dst - 1.0, scale);
float wc = Gaus(dst + 0.0, scale);
float wd = Gaus(dst + 1.0, scale);
float we = Gaus(dst + 2.0, scale);
return (a * wa + b * wb + c * wc + d * wd + e * we) / (wa + wb + wc + wd + we);
}
float Scan(float2 pos, float off)
{
float dst = Dist(pos).y;
return Gaus(dst + off, hardScan);
}
float3 Tri(float2 pos)
{
float3 a = Horz3(pos, -1.0);
float3 b = Horz5(pos, 0.0);
float3 c = Horz3(pos, 1.0);
float wa = Scan(pos, -1.0);
float wb = Scan(pos, 0.0);
float wc = Scan(pos, 1.0);
return a * wa + b * wb + c * wc;
}
float2 Warp(float2 pos)
{
float2 h = pos - float2(0.5, 0.5);
float r2 = dot(h, h);
float f = 1.0 + r2 * (warp.x + warp.y * sqrt(r2));
return f * scale * h + 0.5;
}
float2 Warp1(float2 pos)
{
pos = pos * 2.0 - 1.0;
pos *= float2(1.0 + (pos.y * pos.y) * warp.x, 1.0 + (pos.x * pos.x) * warp.y);
return pos * scale + 0.5;
}
float3 Mask(float2 pos)
{
pos.x += pos.y * 3.0;
float3 mask = float3(maskDark, maskDark, maskDark);
pos.x = frac(pos.x / 6.0);
if (pos.x < 0.333)mask.r = maskLight;
else if (pos.x < 0.666)mask.g = maskLight;
else mask.b = maskLight;
return mask;
}
float4 SimpleWrapFrag(v2f i)
{
float2 uv = i.uv;
float4 col = tex2D(_MainTex,uv);
res = _ScreenParams.xy / resScale;
float2 fragCoord = uv * _ScreenParams.xy;
float4 fragColor = 0;
float2 pos = Warp1(fragCoord.xy / _ScreenParams.xy);
fragColor.rgb = Tri(pos) * Mask(fragCoord);
fragColor.a = tex2D(_MainTex,pos).a;
return lerp(col,fragColor,fade);
}
float4 CubicDistortionFrag(v2f i)
{
float2 uv = i.uv;
float4 col = tex2D(_MainTex,uv);
res = _iResolution.xy / resScale;
float2 fragCoord = uv * _ScreenParams.xy;
float4 fragColor = 0;
float2 pos = Warp(fragCoord.xy / _ScreenParams.xy);
fragColor.rgb = Tri(pos) * Mask(fragCoord);
fragColor.a = tex2D(_MainTex,pos).a;
return lerp(col,fragColor,fade);
}
float4 Frag(v2f i) : SV_Target
{
#if _SimpleWrap
return SimpleWrapFrag(i);
#else
return CubicDistortionFrag(i);
#endif
}
ENDCG
}
}
}

View File

@ -1,9 +0,0 @@
fileFormatVersion: 2
guid: bef4d98671a3c524f9bfdba0d25e5991
ShaderImporter:
externalObjects: {}
defaultTextures: []
nonModifiableTextures: []
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: c26c21362c8e6874e817b6f32d58fcd6
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,60 @@
using Assets.Script.AppMain.Filter;
using UnityEngine;
namespace AxibugEmuOnline.Client.Filters
{
public class RealisticCRT : FilterEffect
{
public override string Name => nameof(RealisticCRT);
protected override string ShaderName => "Filter/RealisticCRT";
[Range(0, 1)] public FloatParameter scan_line_amount = 1.0f;
[Range(0, 5)] public FloatParameter warp_amount = 0.1f;
[Range(0.0f, 0.3f)] public FloatParameter noise_amount = 0.03f;
[Range(0.0f, 1.0f)] public FloatParameter interference_amount = 0.2f;
[Range(0.0f, 1.0f)] public FloatParameter grille_amount = 0.1f;
[Range(1.0f, 5.0f)] public FloatParameter grille_size = 1.0f;
[Range(0.0f, 2.0f)] public FloatParameter vignette_amount = 0.6f;
[Range(0.0f, 1.0f)] public FloatParameter vignette_intensity = 0.4f;
[Range(0.0f, 1.0f)] public FloatParameter aberation_amount = 0.5f;
[Range(0.0f, 1.0f)] public FloatParameter roll_line_amount = 0.3f;
[Range(-8.0f, 8.0f)] public FloatParameter roll_speed = 1.0f;
[Range(-12.0f, -1.0f)] public FloatParameter scan_line_strength = -8.0f;
[Range(-4.0f, 0.0f)] public FloatParameter pixel_strength = 2.0f;
int scan_line_amount_p = Shader.PropertyToID("scan_line_amount");
int warp_amount_p = Shader.PropertyToID("warp_amount");
int noise_amount_p = Shader.PropertyToID("noise_amount");
int interference_amount_p = Shader.PropertyToID("interference_amount");
int grille_amount_p = Shader.PropertyToID("grille_amount");
int grille_size_p = Shader.PropertyToID("grille_size");
int vignette_amount_p = Shader.PropertyToID("vignette_amount");
int vignette_intensity_p = Shader.PropertyToID("vignette_intensity");
int aberation_amount_p = Shader.PropertyToID("aberation_amount");
int roll_line_amount_p = Shader.PropertyToID("roll_line_amount");
int roll_speed_p = Shader.PropertyToID("roll_speed");
int scan_line_strength_p = Shader.PropertyToID("scan_line_strength");
int pixel_strength_p = Shader.PropertyToID("pixel_strength");
protected override void OnRenderer(Material renderMat, Texture src, RenderTexture result)
{
renderMat.SetFloat(scan_line_amount_p, scan_line_amount);
renderMat.SetFloat(warp_amount_p, warp_amount);
renderMat.SetFloat(noise_amount_p, noise_amount);
renderMat.SetFloat(interference_amount_p, interference_amount);
renderMat.SetFloat(grille_amount_p, grille_amount);
renderMat.SetFloat(grille_size_p, grille_size);
renderMat.SetFloat(vignette_amount_p, vignette_amount);
renderMat.SetFloat(vignette_intensity_p, vignette_intensity);
renderMat.SetFloat(aberation_amount_p, aberation_amount);
renderMat.SetFloat(roll_line_amount_p, roll_line_amount);
renderMat.SetFloat(roll_speed_p, roll_speed);
renderMat.SetFloat(scan_line_strength_p, scan_line_strength);
renderMat.SetFloat(pixel_strength_p, pixel_strength);
Graphics.Blit(src, result, renderMat);
}
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: c976303d1b991604184e1220f40ebb31

View File

@ -0,0 +1,202 @@
Shader "Filter/RealisticCRT"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
scan_line_amount ("scan_line_amount",Range(0,1)) = 1.0
warp_amount ("warp_amount",Range(0,5)) = 0.1
noise_amount ("noise_amount",Range(0.0, 0.3)) = 0.03
interference_amount ("interference_amount",Range(0.0, 1.0)) = 0.2
grille_amount ("grille_amount",Range(0.0, 1.0)) = 0.1
grille_size ("grille_size",Range(1.0, 5.0)) = 1.0
vignette_amount ("vignette_amount",Range(0.0, 2.0)) = 0.6
vignette_intensity ("vignette_intensity",Range (0.0, 1.0)) = 0.4
aberation_amount ("aberation_amount",Range(0.0, 1.0)) = 0.5
roll_line_amount ("roll_line_amount",Range(0.0, 1.0)) = 0.3
roll_speed ("roll_speed",Range(-8.0, 8.0)) = 1.0
scan_line_strength ("scan_line_strength",Range(-12.0, -1.0))= -8.0
pixel_strength ("pixel_strength",Range(-4.0, 0.0))= -2.0
}
SubShader
{
Pass
{
CGPROGRAM
#pragma vertex vert_img
#pragma fragment frag
#include "UnityCG.cginc"
struct v2f
{
float4 pos : POSITION;
float2 uv : TEXCOORD0;
};
sampler2D _MainTex;
float2 _iResolution;
#define resolution float2(320.0,180.0)
#define PI 3.14159268
float scan_line_amount;
float warp_amount;
float noise_amount;
float interference_amount;
float grille_amount;
float grille_size;
float vignette_amount;
float vignette_intensity;
float aberation_amount;
float roll_line_amount;
float roll_speed;
float scan_line_strength;
float pixel_strength;
float random(float2 uv){
return frac(cos(uv.x * 83.4827 + uv.y * 92.2842) * 43758.5453123);
}
float3 fetch_pixel(float2 uv, float2 off)
{
float2 pos = floor(uv * resolution + off) / resolution + float2(0.5,0.5) / resolution;
float noise = 0.0;
if(noise_amount > 0.0){
noise = random(pos + frac(_Time.x)) * noise_amount;
}
if(max(abs(pos.x - 0.5), abs(pos.y - 0.5)) > 0.5){
return float3(0.0, 0.0, 0.0);
}
float3 clr = tex2D(_MainTex,pos).rgb + noise;
return clr;
}
// Distance in emulated pixels to nearest texel.
float2 Dist(float2 pos){
pos = pos * resolution;
return - ((pos - floor(pos)) - float2(0.5,0.5));
}
// 1D Gaussian.
float Gaus(float pos, float scale){ return exp2(scale * pos * pos); }
// 3-tap Gaussian filter along horz line.
float3 Horz3(float2 pos, float off){
float3 b = fetch_pixel(pos, float2(-1.0, off));
float3 c = fetch_pixel(pos, float2( 0.0, off));
float3 d = fetch_pixel(pos, float2( 1.0, off));
float dst = Dist(pos).x;
// Convert distance to weight.
float scale = pixel_strength;
float wb = Gaus(dst - 1.0, scale);
float wc = Gaus(dst + 0.0, scale);
float wd = Gaus(dst + 1.0, scale);
// Return filtered sample.
return (b * wb + c * wc + d * wd) / (wb + wc + wd);
}
// Return scanline weight.
float Scan(float2 pos, float off){
float dst = Dist(pos).y;
return Gaus(dst + off, scan_line_strength);
}
// Allow nearest three lines to effect pixel.
float3 Tri(float2 pos){
float3 clr = fetch_pixel(pos, float2(0.0,0.0));
if(scan_line_amount > 0.0){
float3 a = Horz3(pos,-1.0);
float3 b = Horz3(pos, 0.0);
float3 c = Horz3(pos, 1.0);
float wa = Scan(pos,-1.0);
float wb = Scan(pos, 0.0);
float wc = Scan(pos, 1.0);
float3 scanlines = a * wa + b * wb + c * wc;
clr = lerp(clr, scanlines, scan_line_amount);
}
return clr;
}
// Takes in the UV and warps the edges, creating the spherized effect
float2 warp(float2 uv){
float2 delta = uv - 0.5;
float delta2 = dot(delta.xy, delta.xy);
float delta4 = delta2 * delta2;
float delta_offset = delta4 * warp_amount;
float2 warped = uv + delta * delta_offset;
return (warped - 0.5) / lerp(1.0,1.2,warp_amount/5.0) + 0.5;
}
float vignette(float2 uv){
uv *= 1.0 - uv.xy;
float vignette = uv.x * uv.y * 15.0;
return pow(vignette, vignette_intensity * vignette_amount);
}
float floating_mod(float a, float b){
return a - b * floor(a/b);
}
float3 grille(float2 uv){
float unit = PI / 3.0;
float scale = 2.0*unit/grille_size;
float r = smoothstep(0.5, 0.8, cos(uv.x*scale - unit));
float g = smoothstep(0.5, 0.8, cos(uv.x*scale + unit));
float b = smoothstep(0.5, 0.8, cos(uv.x*scale + 3.0*unit));
return lerp(float3(1.0,1.0,1.0), float3(r,g,b), grille_amount);
}
float roll_line(float2 uv){
float x = uv.y * 3.0 - _Time.x * roll_speed;
float f = cos(x) * cos(x * 2.35 + 1.1) * cos(x * 4.45 + 2.3);
float roll_line = smoothstep(0.5, 0.9, f);
return roll_line * roll_line_amount;
}
fixed4 frag (v2f i) : SV_Target
{
float2 pix = _iResolution.xy*i.uv;
float2 pos = warp(i.uv);
float tLine = 0.0;
if(roll_line_amount > 0.0){
tLine = roll_line(pos);
}
float2 sq_pix = floor(pos * resolution) / resolution + float2(0.5,0.5) / resolution;
if(interference_amount + roll_line_amount > 0.0){
float interference = random(sq_pix.yy + frac(_Time.x));
pos.x += (interference * (interference_amount + tLine * 6.0)) / resolution.x;
}
float3 clr = Tri(pos);
if(aberation_amount > 0.0){
float chromatic = aberation_amount + tLine * 2.0;
float2 chromatic_x = float2(chromatic,0.0) / resolution.x;
float2 chromatic_y = float2(0.0, chromatic/2.0) / resolution.y;
float r = Tri(pos - chromatic_x).r;
float g = Tri(pos + chromatic_y).g;
float b = Tri(pos + chromatic_x).b;
clr = float3(r,g,b);
}
if(grille_amount > 0.0)clr *= grille(pix);
clr *= 1.0 + scan_line_amount * 0.6 + tLine * 3.0 + grille_amount * 2.0;
if(vignette_amount > 0.0)clr *= vignette(pos);
return fixed4(clr,1.0);
}
ENDCG
}
}
}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: d7b367e99136835468184ea471e79e02
guid: 467a95e560665c641ad8a0925e03a93c
ShaderImporter:
externalObjects: {}
defaultTextures: []

View File

@ -48,11 +48,10 @@ public abstract class EmuCoreBinder<T> : InternalEmuCoreBinder,
/// <summary> 获取指定设备的注册Binder对象 </summary>
/// <param name="device"></param>
/// <returns>返回首个匹配对象</returns>
public ControllerBinder GetRegistedBinder(InputDevice_D device)
ControllerBinder GetRegistedBinder(InputDevice_D device)
{
foreach (var binding in m_controllerBinders)
{
if (device.Exclusive && GetRegistedBinder(device) != null) continue;
if (binding.IsRegisted(device)) return binding;
}
@ -63,6 +62,7 @@ public abstract class EmuCoreBinder<T> : InternalEmuCoreBinder,
{
foreach (var binding in m_controllerBinders)
{
if (connectDevice.Exclusive && GetRegistedBinder(connectDevice) != null) continue;
binding.RegistInputDevice(connectDevice);
}
}

View File

@ -1,8 +1,13 @@
namespace AxibugEmuOnline.Client.InputDevices
using AxibugProtobuf;
namespace AxibugEmuOnline.Client.InputDevices
{
/// <summary> PS3,PS4控制器 </summary>
public class DualShockController_D : InputDevice_D
{
GamePadType m_gamePadType;
public override GamePadType PadType => m_gamePadType;
public Button_C Circle;
public Button_C Triangle;
public Button_C Cross;
@ -23,6 +28,12 @@
public Stick_C LeftStick;
public Stick_C RightStick;
public DualShockController_D(InputResolver resolver) : base(resolver) { }
public DualShockController_D(InputResolver resolver, bool ps3 = false, bool ps4 = false, bool ps5 = false) : base(resolver)
{
if (ps3) m_gamePadType = GamePadType.Ds3Control;
else if (ps4) m_gamePadType = GamePadType.Ds4Control;
else if (ps5) m_gamePadType = GamePadType.Ds5Control;
else m_gamePadType = GamePadType.GlobalGamePad;
}
}
}

View File

@ -1,10 +1,14 @@
namespace AxibugEmuOnline.Client.InputDevices
using AxibugProtobuf;
namespace AxibugEmuOnline.Client.InputDevices
{
/// <summary>
/// 通用游戏控制器
/// </summary>
public class GamePad_D : InputDevice_D
{
public override GamePadType PadType => GamePadType.GlobalGamePad;
public Button_C Up;
public Button_C Down;
public Button_C Left;

View File

@ -1,4 +1,5 @@
using System;
using AxibugProtobuf;
using System;
using System.Collections.Generic;
using System.Reflection;
@ -9,7 +10,8 @@ namespace AxibugEmuOnline.Client.InputDevices
/// <summary> 指示该设备是否只能由一个Binder独占 </summary>
public virtual bool Exclusive => true;
public string UniqueName => m_resolver.GetDeviceName(this);
/// <summary> 指示该设备类型,这个类型将与服务器类型对齐 </summary>
public abstract GamePadType PadType { get; }
/// <summary> 指示该设备是否在线 </summary>
public bool Online => m_resolver.CheckOnline(this);
/// <summary> 指示该设备当前帧是否有任意控件被激发 </summary>

View File

@ -1,4 +1,5 @@
using System.Collections.Generic;
using AxibugProtobuf;
using System.Collections.Generic;
namespace AxibugEmuOnline.Client.InputDevices
{
@ -7,6 +8,8 @@ namespace AxibugEmuOnline.Client.InputDevices
/// </summary>
public class Keyboard_D : InputDevice_D
{
public override GamePadType PadType => GamePadType.Keyboard;
public Button_C A;
public Button_C B;
public Button_C C;

View File

@ -1,7 +1,11 @@
namespace AxibugEmuOnline.Client.InputDevices
using AxibugProtobuf;
namespace AxibugEmuOnline.Client.InputDevices
{
public class PSVController_D : InputDevice_D
{
public override GamePadType PadType => GamePadType.PsvitaControl;
public Button_C Cross;
public Button_C Circle;
public Button_C Square;

View File

@ -1,4 +1,5 @@
using AxiInputSP;
using AxibugProtobuf;
using AxiInputSP;
using AxiInputSP.UGUI;
using System.Collections.Generic;
using UnityEngine;
@ -7,6 +8,8 @@ namespace AxibugEmuOnline.Client.InputDevices
{
public class ScreenGamepad_D : InputDevice_D
{
public override GamePadType PadType => GamePadType.TouchPanel;
public Button_C UP;
public Button_C DOWN;
public Button_C LEFT;

View File

@ -1,7 +1,11 @@
namespace AxibugEmuOnline.Client.InputDevices
using AxibugProtobuf;
namespace AxibugEmuOnline.Client.InputDevices
{
public class XboxController_D : InputDevice_D
{
public override GamePadType PadType => GamePadType.Xboxonecontrol;
public Button_C X;
public Button_C Y;
public Button_C A;

View File

@ -2,6 +2,7 @@
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.InputSystem.Android;
using UnityEngine.InputSystem.DualShock;
using UnityEngine.InputSystem.XInput;
@ -23,8 +24,18 @@ namespace AxibugEmuOnline.Client.InputDevices.ForInputSystem
{
InputDevice_D newDevice = null;
if (ipdev is Keyboard) newDevice = new Keyboard_D(this);
else if (ipdev is DualShockGamepad) newDevice = new DualShockController_D(this);
else if (ipdev is XInputController) newDevice = new XboxController_D(this);
else if (ipdev is DualShockGamepad)
{
if (ipdev is DualShock3GamepadHID) newDevice = new DualShockController_D(this, ps3: true);
else if (ipdev is DualShock4GamepadHID) newDevice = new DualShockController_D(this, ps4: true);
else if (ipdev is DualSenseGamepadHID) newDevice = new DualShockController_D(this, ps5: true);
else newDevice = new DualShockController_D(this);
}
else if (ipdev is XInputController)
{
newDevice = new XboxController_D(this);
}
else if (ipdev is Gamepad) newDevice = new GamePad_D(this); //注意Gamepad的优先级,因为任何手柄,Inputsystem中的基类都是GamePad
if (newDevice != null)
@ -39,9 +50,9 @@ namespace AxibugEmuOnline.Client.InputDevices.ForInputSystem
{
if (m_devices.TryGetValue(ipdev, out var device))
{
m_devices.Remove(ipdev);
RemoveDeviceMapper(device);
RaiseDeviceLost(device);
m_devices.Remove(ipdev);
}
}
@ -56,7 +67,7 @@ namespace AxibugEmuOnline.Client.InputDevices.ForInputSystem
var ipdev = GetInputSystemDevice<InputDevice>(inputDevice);
Debug.Assert(ipdev != null, "不能对已离线的设备获取名称");
return $"{ipdev.description.deviceClass}_{ipdev.description.interfaceName}_{ipdev.deviceId}";
return $"{ipdev.description}_{ipdev.deviceId}";
}
protected override bool OnCheckOnline(InputDevice_D device)

View File

@ -1,105 +1,105 @@
using DG.Tweening;
using DG.Tweening.Core;
using DG.Tweening.Plugins.Options;
using UnityEngine;
namespace AxibugEmuOnline.Client
{
using DG.Tweening;
using DG.Tweening.Core;
using DG.Tweening.Plugins.Options;
using UnityEngine;
namespace AxibugEmuOnline.Client
{
/// <summary>
/// 选择指示器,用于控制RectTransform在屏幕坐标上的高宽和位置同步,同时带有过度动画
/// </summary>
public class Selector : MonoBehaviour
{
[SerializeField]
private Animator animator;
private RectTransform m_rect => transform as RectTransform;
private RectTransform m_target;
public RectTransform Target
{
get => m_target;
set
{
if (m_target == value) return;
m_target = value;
if (m_target == null)
{
if (m_trackTween != null)
{
m_trackTween.Kill();
m_trackTween = null;
}
return;
}
var itemUIRect = m_target.transform as RectTransform;
m_rect.pivot = itemUIRect.pivot;
m_rect.SetAsLastSibling();
animator.SetTrigger("reactive");
if (m_trackTween != null)
{
m_trackTween.Kill();
m_trackTween = null;
}
var startSize = m_rect.sizeDelta;
var startPos = m_rect.position;
m_trackTween = DOTween.To(
() => 0f,
/// </summary>
public class Selector : MonoBehaviour
{
[SerializeField]
private Animator animator;
private RectTransform m_rect => transform as RectTransform;
private RectTransform m_target;
public RectTransform Target
{
get => m_target;
set
{
if (m_target == value) return;
m_target = value;
if (m_target == null)
{
if (m_trackTween != null)
{
m_trackTween.Kill();
m_trackTween = null;
}
return;
}
var itemUIRect = m_target.transform as RectTransform;
m_rect.pivot = itemUIRect.pivot;
m_rect.SetAsLastSibling();
animator.SetTrigger("reactive");
if (m_trackTween != null)
{
m_trackTween.Kill();
m_trackTween = null;
}
var startSize = m_rect.sizeDelta;
var startPos = m_rect.position;
m_trackTween = DOTween.To(
() => 0f,
(_value) =>
{
var progress = _value;
m_rect.position = Vector3.Lerp(startPos, itemUIRect.position, progress);
m_rect.sizeDelta = Vector2.Lerp(startSize, itemUIRect.rect.size, progress);
},
1f,
0.125f);
1f,
0.125f);
m_trackTween.onComplete = () =>
{
m_trackTween = null;
};
}
}
};
}
}
private bool m_active;
private TweenerCore<float, float, FloatOptions> m_trackTween;
public bool Active
{
get => m_active;
set
{
if (m_active == value) return;
m_active = value;
animator.SetBool("active", value);
}
}
public void RefreshPosition()
{
if (Target != null)
{
m_rect.position = Target.position;
}
}
public bool Active
{
get => m_active;
set
{
if (m_active == value) return;
m_active = value;
animator.SetBool("active", value);
}
}
public void RefreshPosition()
{
if (Target != null)
{
m_rect.position = Target.position;
}
}
struct TrackTarget
{
Vector3 pos;
Vector2 size;
}
Vector3 pos;
Vector2 size;
}
struct TrackTargetOption : IPlugOptions
{
public void Reset()
{
}
}
}
}
}
}
}

View File

@ -0,0 +1,64 @@
using AxibugEmuOnline.Client.ClientCore;
using AxibugEmuOnline.Client.InputDevices;
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
namespace AxibugEmuOnline.Client.UI
{
/// <summary>
/// xmbÐÅÏ¢Ìõ,É豸ÐÅÏ¢ÌõUI
/// </summary>
public class DevicesBar : MonoBehaviour
{
[SerializeField]
DevicesInfoItem ITEM_TEMPLATE;
List<DevicesInfoItem> m_runtimeItemUI = new List<DevicesInfoItem>();
private void Awake()
{
ITEM_TEMPLATE.gameObject.SetActiveEx(false);
}
void OnEnable()
{
App.input.OnDeviceConnected += Input_OnDeviceConnected;
App.input.OnDeviceLost += Input_OnDeviceLost;
foreach (var device in App.input.GetDevices())
{
AddDeviceItemUI(device);
}
}
private void OnDisable()
{
App.input.OnDeviceConnected -= Input_OnDeviceConnected;
App.input.OnDeviceLost -= Input_OnDeviceLost;
foreach (var itemUI in m_runtimeItemUI)
{
Destroy(itemUI.gameObject);
}
m_runtimeItemUI.Clear();
}
private void AddDeviceItemUI(InputDevice_D device)
{
var newItemUI = GameObject.Instantiate(ITEM_TEMPLATE.gameObject, ITEM_TEMPLATE.transform.parent).GetComponent<DevicesInfoItem>();
newItemUI.gameObject.SetActiveEx(true);
newItemUI.SetData(device);
m_runtimeItemUI.Add(newItemUI);
}
void Input_OnDeviceConnected(InputDevice_D connectDevice)
{
AddDeviceItemUI(connectDevice);
}
private void Input_OnDeviceLost(InputDevice_D lostDevice)
{
var targetUI = m_runtimeItemUI.FirstOrDefault(itemUI => itemUI.Datacontext == lostDevice);
Destroy(targetUI.gameObject);
m_runtimeItemUI.Remove(targetUI);
}
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: e8b33a9300654744488a5dd3d4810dc2

View File

@ -0,0 +1,25 @@
using AxibugEmuOnline.Client.InputDevices;
using UnityEngine;
using UnityEngine.UI;
namespace AxibugEmuOnline.Client.UI
{
/// <summary>
/// 设备信息条 ItemUI
/// </summary>
public class DevicesInfoItem : MonoBehaviour
{
[SerializeField]
Image UI_Icon;
public InputDevice_D Datacontext { get; private set; }
internal void SetData(InputDevice_D device)
{
Datacontext = device;
string resourcePath = $"Icons/DevicesIcons/{device.PadType}";
UI_Icon.sprite = Resources.Load<Sprite>(resourcePath);
}
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: b1135cda2fa7d714f9d4b8a2a3130b4d

View File

@ -389,6 +389,9 @@ PlayerSettings:
- m_BuildTarget: AndroidPlayer
m_APIs: 0b000000
m_Automatic: 0
- m_BuildTarget: WindowsStandaloneSupport
m_APIs: 0200000012000000
m_Automatic: 0
m_BuildTargetVRSettings: []
m_DefaultShaderChunkSizeInMB: 16
m_DefaultShaderChunkCount: 0
@ -401,6 +404,7 @@ PlayerSettings:
iPhone: 1
tvOS: 1
m_BuildTargetGroupLightmapEncodingQuality: []
m_BuildTargetGroupHDRCubemapEncodingQuality: []
m_BuildTargetGroupLightmapSettings: []
m_BuildTargetGroupLoadStoreDebugModeSettings: []
m_BuildTargetNormalMapEncoding: []
@ -664,12 +668,12 @@ PlayerSettings:
webGLMemoryLinearGrowthStep: 16
webGLMemoryGeometricGrowthStep: 0.2
webGLMemoryGeometricGrowthCap: 96
webGLEnableWebGPU: 0
webGLPowerPreference: 2
webGLWebAssemblyTable: 0
webGLWebAssemblyBigInt: 0
webGLCloseOnQuit: 0
webWasm2023: 0
webEnableSubmoduleStrippingCompatibility: 0
scriptingDefineSymbols:
Android: DOTWEEN;ODIN_INSPECTOR;ODIN_INSPECTOR_3;ODIN_INSPECTOR_3_1;ODIN_INSPECTOR_EDITOR_ONLY;UNITY_POST_PROCESSING_STACK_V2
EmbeddedLinux: UNITY_POST_PROCESSING_STACK_V2
@ -816,3 +820,4 @@ PlayerSettings:
insecureHttpOption: 2
androidVulkanDenyFilterList: []
androidVulkanAllowFilterList: []
androidVulkanDeviceFilterListAsset: {fileID: 0}