Merge branch 'develop' into feature/npc-shop

This commit is contained in:
HungDK
2025-12-04 14:46:08 +07:00
74 changed files with 3656 additions and 1466 deletions
@@ -45,6 +45,11 @@ MonoBehaviour:
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: a81dab17b00ef4b4494a71ee88b10cc0
m_Address: "\u7A0B\u5E8F\u8054\u5165/\u89D2\u8272\u5347\u7EA7\u4EBA\u7C7B.gfx"
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
m_ReadOnly: 0
m_Settings: {fileID: 11400000, guid: 070edb522e6e54c14a99055900003890, type: 2}
m_SchemaSet:
+41 -9
View File
@@ -6,9 +6,9 @@ using UnityEngine.EventSystems;
public class Joystick : MonoBehaviour, IPointerDownHandler, IDragHandler, IPointerUpHandler
{
public float Horizontal { get { return SnapToDiscrete(input.x); } }
public float Vertical { get { return SnapToDiscrete(input.y); } }
public Vector2 Direction { get { return new Vector2(Horizontal, Vertical); } }
public float Horizontal { get { return input.x; } }
public float Vertical { get { return input.y; } }
public Vector2 Direction { get { return input; } }
public float HandleRange
{
@@ -78,8 +78,8 @@ public class Joystick : MonoBehaviour, IPointerDownHandler, IDragHandler, IPoint
HandleInput(input.magnitude, input.normalized, radius, cam);
handle.anchoredPosition = input * radius * handleRange;
// Send event when value changes to -1 or 1
Vector2 currentSnapped = new Vector2(Horizontal, Vertical);
// Send event when value changes significantly (for 360-degree smooth movement)
Vector2 currentSnapped = new Vector2(SnapToDiscrete(input.x), SnapToDiscrete(input.y));
if ((currentSnapped.x == -1 || currentSnapped.x == 1 || currentSnapped.y == -1 || currentSnapped.y == 1) &&
currentSnapped != previousSnappedInput)
{
@@ -95,8 +95,9 @@ public class Joystick : MonoBehaviour, IPointerDownHandler, IDragHandler, IPoint
{
if (magnitude > deadZone)
{
if (magnitude > 1)
input = normalised;
// Normalize to ensure speed is always 1 (full speed) or 0 (no movement)
// This keeps 360-degree direction but binary speed
input = normalised;
}
else
input = Vector2.zero;
@@ -110,10 +111,41 @@ public class Joystick : MonoBehaviour, IPointerDownHandler, IDragHandler, IPoint
input = new Vector2(0f, input.y);
}
private Vector2 SnapTo8Directions(Vector2 input)
{
// Snap to 8 directions: N, NE, E, SE, S, SW, W, NW
// Returns values of -1, 0, or 1 for each axis
if (input.magnitude < 0.4f)
return Vector2.zero;
// Calculate angle in degrees (0 = up/North, 90 = right/East)
float angle = Mathf.Atan2(input.x, input.y) * Mathf.Rad2Deg;
// Normalize angle to 0-360
if (angle < 0) angle += 360f;
// Snap to 8 directions (every 45 degrees)
// 0° = N, 45° = NE, 90° = E, 135° = SE, 180° = S, 225° = SW, 270° = W, 315° = NW
float snappedAngle = Mathf.Round(angle / 45f) * 45f;
// Convert back to direction vector
float rad = snappedAngle * Mathf.Deg2Rad;
Vector2 snapped = new Vector2(Mathf.Sin(rad), Mathf.Cos(rad));
// Ensure values are exactly -1, 0, or 1
snapped.x = Mathf.Round(snapped.x);
snapped.y = Mathf.Round(snapped.y);
return snapped;
}
private float SnapToDiscrete(float value)
{
// Snap to -1, 1, or 0
if (value == 0)
// Snap to -1, 1, or 0 for 8-directional movement
// Use a small threshold to ensure diagonal movement works
const float threshold = 0.1f;
if (Mathf.Abs(value) < threshold)
return 0;
return value > 0 ? 1 : -1;
}
@@ -2,7 +2,14 @@ Shader "BrewMonster/UnlitVertexColorUnlit"
{
Properties
{
_Texture_1 ("Texture", 2D) = "white" {}
_Texture_1 ("Layer 1 Texture", 2D) = "black" {}
_Texture_2 ("Layer 2 Texture", 2D) = "black" {}
_Texture_3 ("Layer 3 Texture", 2D) = "black" {}
_Texture_4 ("Layer 4 Texture", 2D) = "black" {}
_Texture_5 ("Layer 5 Texture", 2D) = "black" {}
_Texture_6 ("Layer 6 Texture", 2D) = "black" {}
_MaskTexture ("Mask Texture", 2D) = "black" {}
_MaskTexture2 ("Mask Texture 2", 2D) = "black" {}
_ShadowStrength ("Shadow Strength", Range(0, 1)) = 0.5
_Brightness ("Brightness", Range(0, 10)) = 5.0
}
@@ -34,8 +41,36 @@ Shader "BrewMonster/UnlitVertexColorUnlit"
TEXTURE2D(_Texture_1);
SAMPLER(sampler_Texture_1);
TEXTURE2D(_Texture_2);
SAMPLER(sampler_Texture_2);
TEXTURE2D(_Texture_3);
SAMPLER(sampler_Texture_3);
TEXTURE2D(_MaskTexture);
SAMPLER(sampler_MaskTexture);
TEXTURE2D(_Texture_4);
SAMPLER(sampler_Texture_4);
TEXTURE2D(_Texture_5);
SAMPLER(sampler_Texture_5);
TEXTURE2D(_Texture_6);
SAMPLER(sampler_Texture_6);
TEXTURE2D(_MaskTexture2);
SAMPLER(sampler_MaskTexture2);
CBUFFER_START(UnityPerMaterial)
float4 _Texture_1_ST;
float4 _Texture_2_ST;
float4 _Texture_3_ST;
float4 _Texture_4_ST;
float4 _Texture_5_ST;
float4 _Texture_6_ST;
float4 _MaskTexture_ST;
float4 _MaskTexture2_ST;
half _ShadowStrength;
half _Brightness;
CBUFFER_END
@@ -44,6 +79,8 @@ Shader "BrewMonster/UnlitVertexColorUnlit"
{
float4 positionOS : POSITION;
float2 uv : TEXCOORD0;
float2 uvMask : TEXCOORD3;
float2 uvMask2 : TEXCOORD7;
float3 normalOS : NORMAL;
float4 color : COLOR;
};
@@ -52,10 +89,19 @@ Shader "BrewMonster/UnlitVertexColorUnlit"
{
float4 positionCS : SV_POSITION;
float2 uv : TEXCOORD0;
float3 positionWS : TEXCOORD1;
float3 normalWS : TEXCOORD2;
float2 uv2 : TEXCOORD1;
float2 uv3 : TEXCOORD2;
float2 uvMask : TEXCOORD3;
float2 uv4 : TEXCOORD4;
float2 uv5 : TEXCOORD5;
float2 uv6 : TEXCOORD6;
float2 uvMask2 : TEXCOORD7;
float3 positionWS : TEXCOORD8;
float3 normalWS : TEXCOORD9;
float4 color : COLOR;
float fogCoord : TEXCOORD3;
float fogCoord : TEXCOORD10;
};
Varyings vert(Attributes input)
@@ -76,6 +122,13 @@ Shader "BrewMonster/UnlitVertexColorUnlit"
// UV
output.uv = TRANSFORM_TEX(input.uv, _Texture_1);
output.uv2 = TRANSFORM_TEX(input.uv, _Texture_2);
output.uv3 = TRANSFORM_TEX(input.uv, _Texture_3);
output.uv4 = TRANSFORM_TEX(input.uv, _Texture_4);
output.uv5 = TRANSFORM_TEX(input.uv, _Texture_5);
output.uv6 = TRANSFORM_TEX(input.uv, _Texture_6);
output.uvMask = TRANSFORM_TEX(input.uvMask, _MaskTexture);
output.uvMask2 = TRANSFORM_TEX(input.uvMask2, _MaskTexture2);
// Fog
output.fogCoord = ComputeFogFactor(vertexInput.positionCS.z);
@@ -87,10 +140,28 @@ Shader "BrewMonster/UnlitVertexColorUnlit"
{
// Sample the texture
half4 texColor = SAMPLE_TEXTURE2D(_Texture_1, sampler_Texture_1, input.uv);
half4 texColor2 = SAMPLE_TEXTURE2D(_Texture_2, sampler_Texture_2, input.uv2);
half4 texColor3 = SAMPLE_TEXTURE2D(_Texture_3, sampler_Texture_3, input.uv3);
half4 texColor4 = SAMPLE_TEXTURE2D(_Texture_4, sampler_Texture_4, input.uv4);
half4 texColor5 = SAMPLE_TEXTURE2D(_Texture_5, sampler_Texture_5, input.uv5);
half4 texColor6 = SAMPLE_TEXTURE2D(_Texture_6, sampler_Texture_6, input.uv6);
half4 maskColor = SAMPLE_TEXTURE2D(_MaskTexture, sampler_MaskTexture, input.uvMask);
half4 maskColor2 = SAMPLE_TEXTURE2D(_MaskTexture2, sampler_MaskTexture2, input.uvMask2);
// half4 totalWeight = maskColor.r + maskColor.g + maskColor.b;
half4 layer1Weight = 1 - (maskColor.r + maskColor.g + maskColor.b);// / totalWeight;
half4 layer2Weight = maskColor.g;// / totalWeight;
half4 layer3Weight = maskColor.b;// / totalWeight;
half4 layer4Weight = maskColor2.r;// / totalWeight;
half4 layer5Weight = maskColor2.g;// / totalWeight;
half4 layer6Weight = maskColor2.b;// / totalWeight;
// Apply brightness to vertex color then multiply with texture
half4 brightColor = input.color * _Brightness;
half4 color = texColor * brightColor;
half4 color = texColor * layer1Weight + texColor2 * layer2Weight + texColor3 * layer3Weight;
color += texColor4 * layer4Weight + texColor5 * layer5Weight + texColor6 * layer6Weight;
// color = maskColor2;
color *= brightColor;
// Shadow calculation
float4 shadowCoord = TransformWorldToShadowCoord(input.positionWS);
@@ -126,6 +197,9 @@ Shader "BrewMonster/UnlitVertexColorUnlit"
CBUFFER_START(UnityPerMaterial)
float4 _Texture_1_ST;
float4 _Texture_2_ST;
float4 _Texture_3_ST;
float4 _MaskTexture_ST;
half _Brightness;
CBUFFER_END
@@ -133,6 +207,9 @@ Shader "BrewMonster/UnlitVertexColorUnlit"
{
float4 position : POSITION;
float2 texcoord : TEXCOORD0;
float2 texcoord2 : TEXCOORD1;
float2 texcoord3 : TEXCOORD2;
float2 texcoord4 : TEXCOORD3;
};
struct Varyings
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 MiB

@@ -0,0 +1,143 @@
fileFormatVersion: 2
guid: d2d95ef77cdc4e64c969442caa95e479
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
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: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
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: 0
spriteTessellationDetail: -1
textureType: 0
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: 2048
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
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
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: iOS
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:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.

After

Width:  |  Height:  |  Size: 502 KiB

@@ -0,0 +1,143 @@
fileFormatVersion: 2
guid: 182bc0e55106bfd48a0fe11a16acf78a
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
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: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
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: 0
spriteTessellationDetail: -1
textureType: 0
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: 2048
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
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
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: iOS
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:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.

After

Width:  |  Height:  |  Size: 500 KiB

@@ -0,0 +1,143 @@
fileFormatVersion: 2
guid: 6f0ac04f2e700fa4f985c6269235f4db
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
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: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
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: 0
spriteTessellationDetail: -1
textureType: 0
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: 2048
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
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
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: iOS
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:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.

After

Width:  |  Height:  |  Size: 362 KiB

@@ -0,0 +1,143 @@
fileFormatVersion: 2
guid: e1793ce297934ce4f811bc9fecd84235
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
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: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
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: 0
spriteTessellationDetail: -1
textureType: 0
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: 2048
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
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
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: iOS
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:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.

After

Width:  |  Height:  |  Size: 419 KiB

@@ -0,0 +1,143 @@
fileFormatVersion: 2
guid: 77c26a19a43477349805b77e1f61a5a6
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
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: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
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: 0
spriteTessellationDetail: -1
textureType: 0
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: 2048
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
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
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: iOS
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:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.

After

Width:  |  Height:  |  Size: 481 KiB

@@ -0,0 +1,143 @@
fileFormatVersion: 2
guid: f76b0de48c321eb469922435d2fba676
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
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: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
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: 0
spriteTessellationDetail: -1
textureType: 0
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: 2048
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
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
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: iOS
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:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.

After

Width:  |  Height:  |  Size: 517 KiB

@@ -0,0 +1,143 @@
fileFormatVersion: 2
guid: 5923de13232cf8c45893c9f87f7cc971
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
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: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
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: 0
spriteTessellationDetail: -1
textureType: 0
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: 2048
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
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
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: iOS
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:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.

After

Width:  |  Height:  |  Size: 436 KiB

@@ -0,0 +1,143 @@
fileFormatVersion: 2
guid: 4a62d7c65e362df44aa763a03950ba9a
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
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: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
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: 0
spriteTessellationDetail: -1
textureType: 0
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: 2048
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
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
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: iOS
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:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.

After

Width:  |  Height:  |  Size: 545 KiB

@@ -0,0 +1,143 @@
fileFormatVersion: 2
guid: d64094a49477c6f4aae58280a6309469
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
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: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
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: 0
spriteTessellationDetail: -1
textureType: 0
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: 2048
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
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
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: iOS
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:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

@@ -0,0 +1,143 @@
fileFormatVersion: 2
guid: 2023d5d869e902b45b053b8e305b0879
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
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: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
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: 0
spriteTessellationDetail: -1
textureType: 0
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: 2048
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
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
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: iOS
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:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

@@ -0,0 +1,143 @@
fileFormatVersion: 2
guid: b9321e916df07c247b433d6f0b0ce158
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
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: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
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: 0
spriteTessellationDetail: -1
textureType: 0
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: 2048
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
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
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: iOS
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:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 9ef8d28320e272c47b341e1a2aca2ff5
guid: 52f7a7bdf9ded9c44bffa1d98d2bd5be
folderAsset: yes
DefaultImporter:
externalObjects: {}
@@ -0,0 +1,143 @@
fileFormatVersion: 2
guid: d792b160621dd214198cd2191bf098b3
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 1
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: 0
wrapV: 0
wrapW: 0
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
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: 0
spriteTessellationDetail: -1
textureType: 0
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: 2048
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
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
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: iOS
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:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
+2 -2
View File
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:cab1859604c344f40d95193e09f40e355439020145e4aad304249834dd8361b4
size 41209
oid sha256:79aee339596409d8a47e0a553b1257768bd84fa0e0d6261052b33c1077658ab0
size 41493
@@ -94,9 +94,9 @@ namespace BrewMonster.Network
#if UNITY_EDITOR
if (TaskTest.Instance &&
TaskTest.Instance.m_pTaskMan != null)
TaskTest.m_pTaskMan != null)
{
m_pTaskMan = TaskTest.Instance.m_pTaskMan;
m_pTaskMan = TaskTest.m_pTaskMan;
}
#endif
// Load task templates
@@ -1,6 +1,4 @@
using BrewMonster.Scripts.Player;
using CSNetwork.GPDataType;
using NUnit.Framework;
using PerfectWorld.Scripts.Player;
using System.Collections.Generic;
using System.Linq;
@@ -112,3 +112,4 @@ namespace BrewMonster.Managers
+104 -17
View File
@@ -1,9 +1,9 @@
using BrewMonster.Network;
using BrewMonster.Scripts.Player;
using System.Collections.Generic;
namespace BrewMonster.Scripts
{
using static BrewMonster.Scripts.CECHPWork;
using WorkList = System.Collections.Generic.List<CECHPWork>;
public class CECHPWork : CECObjectWork
{
@@ -439,15 +439,61 @@ namespace BrewMonster.Scripts
public bool DelayWork(int iPriority, CECHPWork pWork)
{
return false;
if (pWork == null)
{
// ASSERT(false);
return false;
}
if (!ValidatePriority(iPriority))
{
// ASSERT(false);
return false;
}
if (!IsAnyWorkRunning())
{
return false;
}
if (CanRunSimultaneouslyWithCurrentWork(iPriority, pWork))
{
return false;
}
bool bDelay = false;
if (m_pHost.IsMeleeing())
{
UnityGameSession.c2s_CmdCancelAction();
bDelay = true;
}
else if (IsPickingUp() || IsSpellingMagic())
{
bDelay = true;
}
if (bDelay)
{
ClearDelayedWork();
m_Delayed.iPriority = iPriority;
m_Delayed.pWork = pWork;
// LOG_DEBUG_INFO(AString().Format("CECHPWork::%s delayed, priority=%d", pWork->GetWorkName(), iPriority));
}
return bDelay;
}
public void StartDelayedWork()
{
if (!HasDelayedWork()){
return;
}
CECHPWork pWork = m_Delayed.pWork;
m_Delayed.pWork = null;
// LOG_DEBUG_INFO(AString().Format("CECHPWork:: start delayed work %s, priority=%d", pWork->GetWorkName(), m_Delayed.iPriority));
InternallyStartWork(m_Delayed.iPriority, pWork);
}
public void ClearDelayedWork()
{
if (!HasDelayedWork()){
return;
}
// LOG_DEBUG_INFO(AString().Format("delayed CECHPWork::%s priority=%d cleared", m_Delayed.pWork->GetWorkName(), m_Delayed.iPriority));
// delete m_Delayed.pWork;
m_Delayed.pWork = null;
}
public CECHPWork GetDelayedWork()
{
@@ -471,15 +517,15 @@ namespace BrewMonster.Scripts
}
if (pWork.GetWorkID() == CECHPWork.Host_work_ID.WORK_TRACEOBJECT)
{
/* if (EC_Game.GetGameRun().GetHostInputFilter()->IsMoveUsagePressed())
{
CECHPWorkTrace pWorkTrace = pWork as CECHPWorkTrace;
if (!pWorkTrace.CanTouch())
{ // 2014-8-16 ̲ͨƶʱ CECHPWorkTrace,
//delete pWorkTrace; // CECHPWorkTrace ʱתĿλáֱ̲ݵƶ·˲
return false; // CECHPWorkTrace ĿӴʱ CECHPWorkTraceʵּ̿ƶСijӦüʱתʩż
}
}*/
/* if (EC_Game.GetGameRun().GetHostInputFilter()->IsMoveUsagePressed())
{
CECHPWorkTrace pWorkTrace = pWork as CECHPWorkTrace;
if (!pWorkTrace.CanTouch())
{ // 2014-8-16 ̲ͨƶʱ CECHPWorkTrace,
//delete pWorkTrace; // CECHPWorkTrace ʱתĿλáֱ̲ݵƶ·˲
return false; // CECHPWorkTrace ĿӴʱ CECHPWorkTraceʵּ̿ƶСijӦüʱתʩż
}
}*/
}
if (!bNoDelay && DelayWork(iPriority, pWork))
{
@@ -629,7 +675,7 @@ namespace BrewMonster.Scripts
if (ValidatePriority(m_iCurPriority))
{
WorkList workList = m_WorkStack[m_iCurPriority];
if(workList != null)
if (workList != null)
{
for (int i = 0; i < workList.Count; ++i)
{
@@ -651,7 +697,7 @@ namespace BrewMonster.Scripts
return;
}
WorkList workList = m_WorkStack[m_iCurPriority];
if(workList != null)
if (workList != null)
{
for (int i = 0; i < workList.Count;)
{
@@ -662,14 +708,55 @@ namespace BrewMonster.Scripts
}
KillWork(m_iCurPriority, i);
}
if (workList == null || workList.Count ==0)
if (workList == null || workList.Count == 0)
{
StartAwaitingWorks();
}
}
}
}
public bool IsReviving()
{
return IsWorkRunning(Host_work_ID.WORK_REVIVE);
}
public bool IsSpellingMagic()
{
return IsWorkRunning(Host_work_ID.WORK_SPELLOBJECT);
}
public bool IsUsingItem()
{
return IsWorkRunning(Host_work_ID.WORK_USEITEM);
}
public bool IsPassiveMoving()
{
return IsWorkRunning(Host_work_ID.WORK_PASSIVEMOVE);
}
public bool IsSitting()
{
return IsWorkRunning(Host_work_ID.WORK_SIT);
}
//todo: use this method
public void FinishAllWork(bool bGotoStand)
{
for (int i = 0; i < Work_priority.NUM_PRIORITY; ++i)
{
FinishWorkAtPriority(i);
}
ClearDelayedWork();
if (bGotoStand)
{
StartWork_p0(CreateWork(CECHPWork.Host_work_ID.WORK_STAND));
}
}
bool IsPickingUp()
{
return IsWorkRunning(CECHPWork.Host_work_ID.WORK_PICKUP);
}
private bool HasDelayedWork()
{
return GetDelayedWork() != null;
}
}
public abstract class CECHPWorkPostTickCommand
{
public abstract bool Run(CECHPWorkMan pWorkMan);
@@ -107,7 +107,7 @@ class CECHPWorkMelee : CECHPWork
return true;
}
// Reset work
public virtual void Reset()
public override void Reset()
{
base.Reset();
@@ -1,11 +1,14 @@
using BrewMonster.Network;
using CSNetwork.GPDataType;
using UnityEngine;
using static CECPlayer;
using Types = BrewMonster.Scripts.CECHPWorkMove.DestTypes;
namespace BrewMonster.Scripts
{
public class CECHPWorkMove : CECHPWork
{
public static class Types
public static class DestTypes
{
public const int DEST_2D = 0,
DEST_3D = 1,
@@ -15,6 +18,8 @@ namespace BrewMonster.Scripts
DEST_AUTOPF = 5; // Movement type
}
private const uint MoveInputMask = 0x0F; // MD_FORWARD | MD_RIGHT | MD_BACK | MD_LEFT
protected A3DVECTOR3 m_vMoveDest; // Move destination position or direction
protected int m_iDestType; // Destination type
protected bool m_bHaveDest; // true, have destination
@@ -30,6 +35,8 @@ namespace BrewMonster.Scripts
protected float m_fCurPitch;
protected float m_fPushPitch;
protected float m_fPushLean;
protected A3DVECTOR3 vDir = new A3DVECTOR3();
protected bool m_bUseAutoMoveDialog; // Auto move
protected float m_fAutoHeight; // Height of auto moving destination
@@ -121,126 +128,204 @@ namespace BrewMonster.Scripts
}
// Tick routine
public virtual bool Tick(float dwDeltaTime)
public override bool Tick(float dwDeltaTime)
{
//UpdateResetUseAutoPF();
//if (m_bSwitchTo2D)
//{
// SwitchToDest2D();
// m_bSwitchTo2D = false;
// return true;
//}
//if (IsAutoPF())
//{
// if (CECIntelligentRoute::Instance().IsIdle())
// {
// // Ѱ·ģʽδɹʱȴ¸ Tick л DEST_2D ģʽ
// return true;
// }
// if (m_pHost.IsFlying())
// {
// // ;лģʽʱл DEST_2D ģʽ
// CECIntelligentRoute::Instance().ResetSearch();
// m_bSwitchTo2D = true;
// return true;
// }
//}
UpdateResetUseAutoPF();
if (m_bSwitchTo2D)
{
SwitchToDest2D();
m_bSwitchTo2D = false;
return true;
}
/* if (IsAutoPF())
{
if (CECIntelligentRoute::Instance().IsIdle())
{
// Ѱ·ģʽδɹʱȴ¸ Tick л DEST_2D ģʽ
return true;
}
if (m_pHost.IsFlying())
{
// ;лģʽʱл DEST_2D ģʽ
CECIntelligentRoute::Instance().ResetSearch();
m_bSwitchTo2D = true;
return true;
}
}*/
//base.Tick(dwDeltaTime);
base.Tick(dwDeltaTime);
//if (m_pHost.IsRooting())
// return true;
if (m_pHost.IsRooting())
return true;
//if (m_bUseAutoMoveDialog)
//{
// if (m_pHost.IsFlying())
// {
// m_bAutoFly = false;
// m_bAutoFlyPending = false;
// }
if (m_bUseAutoMoveDialog)
{
if (m_pHost.IsFlying())
{
m_bAutoFly = false;
m_bAutoFlyPending = false;
}
// if (m_bAutoFly && !m_bAutoFlyPending && !m_pHost.IsFlying())
// {
// if (m_pHost.CmdFly())
// {
// m_bAutoFly = false;
// m_bAutoFlyPending = true;
// }
// }
//}
//else
//{
// // Make sure 'Win_AutoPlay' dialog doesn't show up
// CECGameUIMan pGameUI = g_pGame.GetGameRun().GetUIManager().GetInGameUIMan();
// pGameUI.AutoMoveShowDialog(false);
//}
if (m_bAutoFly && !m_bAutoFlyPending && !m_pHost.IsFlying())
{
/* if (m_pHost.CmdFly())
{
m_bAutoFly = false;
m_bAutoFlyPending = true;
}*/
}
}
else
{
// Make sure 'Win_AutoPlay' dialog doesn't show up
/* CECGameUIMan pGameUI = g_pGame.GetGameRun().GetUIManager().GetInGameUIMan();
pGameUI.AutoMoveShowDialog(false);*/
}
////Ѱ·ҵNPCתΪWorkTrace״̬
//if ((m_vMoveDest - m_pHost.GetPos()).MagnitudeH() <= 5.0f)
//{
// if (m_iNPCTempleId)
// {
// CECNPC pNPC = g_pGame.GetGameRun().GetWorld().GetNPCMan().FindNPCByTempleID(m_iNPCTempleId);
// if (pNPC && m_pHost.SelectTarget(pNPC.GetNPCID()))
// {
// CECHPWorkTrace pWork = m_pWorkMan.CreateNPCTraceWork(pNPC, m_iTaskId);
// if (pWork)
// {
// m_bAutoLand = false; //ֹ״̬Ѱ·תworktrace֮ǰԶ½workfall
// Finish();
// m_pWorkMan.SetPostTickCommand(new CECHPWorkPostTickRunWorkCommand(pWork, true));
// return true;
// }
// }
// }
//}
//Ѱ·ҵNPCתΪWorkTrace״̬
/*if ((m_vMoveDest - m_pHost.GetPos()).MagnitudeH() <= 5.0f)
{
if (m_iNPCTempleId != 0)
{
CECNPC pNPC = EC_Game.GetGameRun().GetWorld().GetNPCMan().FindNPCByTempleID(m_iNPCTempleId);
if (pNPC && m_pHost.SelectTarget(pNPC.GetNPCID()))
{
CECHPWorkTrace pWork = m_pWorkMan.CreateNPCTraceWork(pNPC, m_iTaskId);
if (pWork != null)
{
m_bAutoLand = false; //ֹ״̬Ѱ·תworktrace֮ǰԶ½workfall
Finish();
m_pWorkMan.SetPostTickCommand(new CECHPWorkPostTickRunWorkCommand(pWork, true));
return true;
}
}
}
}*/
m_pHost.SetGroundInfoClient();
float fDeltaTime = dwDeltaTime;
if (m_pHost.m_iMoveEnv == (int)MoveEnvironment.MOVEENV_GROUND ||
m_pHost.m_iMoveEnv == (int)MoveEnvironment.MOVEENV_WATER && m_pHost.IsJumping() && (m_pHost.m_CDRInfo.vAbsVelocity.y > 0 || m_pHost.m_CDRInfo.fYVel > 0))
{
// Play appropriate actions
if (!m_pHost.IsJumping() && !m_pHost.IsPlayingAction((int)CECPlayer.PLAYER_ACTION_TYPE.ACT_TRICK_RUN) &&
m_pHost.m_iMoveMode != (int)MoveMode.MOVE_SLIDE && !m_bMeetSlide)
{
int iAction = m_pHost.GetMoveStandAction(true);
m_pHost.PlayAction(iAction, false);
}
//float fDeltaTime = dwDeltaTime;
//if (m_pHost.m_iMoveEnv == CECPlayer::MOVEENV_GROUND ||
// m_pHost.m_iMoveEnv == CECPlayer::MOVEENV_WATER && m_pHost.IsJumping() && (m_pHost.m_CDRInfo.vAbsVelocity.y > 0 || m_pHost.m_CDRInfo.fYVel > 0))
//{
// // Play appropriate actions
// if (!m_pHost.IsJumping() && !m_pHost.IsPlayingAction(CECPlayer::ACT_TRICK_RUN) &&
// m_pHost.m_iMoveMode != CECPlayer::MOVE_SLIDE && !m_bMeetSlide)
// {
// int iAction = m_pHost.GetMoveStandAction(true);
// m_pHost.PlayAction(iAction, false);
// }
Tick_Walk(fDeltaTime);
}
else // (m_pHost.m_iMoveEnv == CECPlayer::MOVEENV_AIR || m_pHost.m_iMoveEnv == CECPlayer::MOVEENV_WATER)
{
m_pHost.ResetJump();
// Tick_Walk(fDeltaTime);
//}
//else // (m_pHost.m_iMoveEnv == CECPlayer::MOVEENV_AIR || m_pHost.m_iMoveEnv == CECPlayer::MOVEENV_WATER)
//{
// m_pHost.ResetJump();
// Play appropriate actions
if (!m_bGliding)
{
int iAction = m_pHost.GetMoveStandAction(true);
m_pHost.PlayAction(iAction, false);
}
// // Play appropriate actions
// if (!m_bGliding)
// {
// int iAction = m_pHost.GetMoveStandAction(true);
// m_pHost.PlayAction(iAction, false);
// }
// Tick_FlySwim(fDeltaTime);
//}
Tick_FlySwim(fDeltaTime);
}
return true;
}
// Reset work
public virtual void Reset()
public override void Reset()
{
base.Reset();
m_iDestType = DestTypes.DEST_2D;
m_bHaveDest = false;
m_bMeetSlide = false;
m_bReadyCancel = false;
m_bGliding = false;
m_fGlideTime = 0;
m_fCurPitch = 0;
m_fPushPitch = 0;
m_fPushLean = 0;
m_bUseAutoMoveDialog = false;
m_fAutoHeight = -1.0f;
m_bAutoLand = false;
m_bAutoFly = false;
m_bReachedHeight = true;
m_bAutoFlyPending = false;
m_iNPCTempleId = 0;
m_iTaskId = 0;
m_bSwitchTo2D = false;
m_bResetAutoPF = false;
}
// Work is cancel
public virtual void Cancel()
public override void Cancel()
{
//if (m_pHost.m_pMoveTargetGFX)
// m_pHost.m_pMoveTargetGFX.Stop();
//A3DVECTOR3 vDir = m_pHost.GetDir();
//vDir.y = 0;
//vDir.Normalize();
//if (!vDir.IsZero())
//{
// m_pHost.StopModelMove(vDir, g_vAxisY, 0);
//}
ClearResetUseAutoPF();
//if (CECIntelligentRoute::Instance().IsUsageMove())
//{
// if (!CECIntelligentRoute::Instance().IsIdle())
// {
// CECIntelligentRoute::Instance().ResetSearch();
// m_bSwitchTo2D = true; // Æô¶¯·ÉÐÐÖжϺó»Ö¸´Ê±¡¢ÐèÒªÇл»µ½ DEST_2D ģʽ
// }
//}
base.Cancel();
//AP_ActionEvent(AP_EVENT_MOVEFINISHED);
}
// This work is do player moving ?
public virtual bool IsMoving() { return true; }
public override bool IsMoving() { return true; }
// Copy work data
public virtual bool CopyData(CECHPWork pWork)
public override bool CopyData(CECHPWork pWork)
{
if (!base.CopyData(pWork))
return false;
CECHPWorkMove pSrc = pWork as CECHPWorkMove;
m_iDestType = pSrc.m_iDestType;
m_bHaveDest = pSrc.m_bHaveDest;
m_bMeetSlide = pSrc.m_bMeetSlide;
m_bReadyCancel = pSrc.m_bReadyCancel;
m_bGliding = pSrc.m_bGliding;
m_fGlideTime = pSrc.m_fGlideTime;
m_fGlideSpan = pSrc.m_fGlideSpan;
m_fGlideAng = pSrc.m_fGlideAng;
m_fGlideVel = pSrc.m_fGlideVel;
m_fGlidePitch = pSrc.m_fGlidePitch;
m_fCurPitch = pSrc.m_fCurPitch;
m_fPushPitch = pSrc.m_fPushPitch;
m_fPushLean = pSrc.m_fPushLean;
m_iDestType = pSrc.m_iDestType;
m_vMoveDest = pSrc.m_vMoveDest;
m_vCurDir = pSrc.m_vCurDir;
m_bUseAutoMoveDialog = pSrc.m_bUseAutoMoveDialog;
m_fAutoHeight = pSrc.m_fAutoHeight;
m_bAutoLand = pSrc.m_bAutoLand;
m_bAutoFly = pSrc.m_bAutoFly;
m_bReachedHeight = pSrc.m_bReachedHeight;
m_bAutoFlyPending = pSrc.m_bAutoFlyPending;
m_iNPCTempleId = pSrc.m_iNPCTempleId;
m_iTaskId = pSrc.m_iTaskId;
m_bSwitchTo2D = pSrc.m_bSwitchTo2D;
m_bResetAutoPF = pSrc.m_bResetAutoPF;
return true;
}
@@ -319,16 +404,351 @@ namespace BrewMonster.Scripts
//SetUseAutoMoveDialog(true);
}
// On first tick
protected virtual void OnFirstTick()
protected override void OnFirstTick()
{
m_pHost.m_iMoveMode = Move_Mode.MOVE_MOVE;
//PlayMoveTargetGFX();
//if (m_pHost.m_iMoveEnv != CECPlayer::MOVEENV_AIR)
// m_pHost.ShowWing(false);
if (!m_pHost.IsJumping())
{
int iAction = m_pHost.GetMoveStandAction(true);
m_pHost.PlayAction(iAction, false);
}
}
// Tick routine of walking on ground
protected bool Tick_Walk(float fDeltaTime)
{
A3DVECTOR3 vCurPos = m_pHost.GetPos();
ref CDR_INFO cdr = ref m_pHost.m_CDRInfo;
if (m_pHost.m_iMoveMode == (int)MoveMode.MOVE_SLIDE)
{
m_pHost.PlayAction((int)CECPlayer.PLAYER_ACTION_TYPE.ACT_JUMP_LOOP, false);
A3DVECTOR3 vDir;
if (m_iDestType == DestTypes.DEST_DIR)
{
vDir = m_vCurDir;
}
else if (m_iDestType == DestTypes.DEST_PUSH)
{
vDir = GetCurrentModelDir();
}
#if ENABLE_CEC_INTELLIGENT_ROUTE
else if (IsAutoPF())
{
vDir = CECIntelligentRoute.Instance().GetCurDest() - vCurPos;
vDir.y = 0.0f;
vDir.Normalize();
}
#endif
else
{
vDir = m_vMoveDest - vCurPos;
vDir.y = 0.0f;
vDir.Normalize();
}
float fMaxSpeedV = 0.0f;
m_bMeetSlide = m_pHost.m_MoveCtrl.MeetSlope(vDir, fMaxSpeedV);
cdr.fYVel = EC_Utility.a_ClampFloor(cdr.fYVel, -fMaxSpeedV);
if (m_pHost.m_GndInfo.bOnGround)
m_vCurDir = vDir;
vCurPos = m_pHost.m_MoveCtrl.GroundMove(m_vCurDir, m_pHost.GetGroundSpeed(), fDeltaTime);
if (m_pHost.m_MoveCtrl.MoveBlocked() >= 3)
{
m_pHost.m_MoveCtrl.SetSlideLock(true);
cdr.fYVel = 0.0f;
Finish();
m_pHost.m_MoveCtrl.SendStopMoveCmd(EC_Utility.ToVector3(vCurPos), m_pHost.GetGroundSpeed(), (int)GPMoveMode.GP_MOVE_SLIDE);
}
else
{
m_pHost.SetPos(EC_Utility.ToVector3(vCurPos));
#if ENABLE_CEC_INTELLIGENT_ROUTE
if (IsAutoPF() && CECIntelligentRoute.Instance().IsMoveOn())
CECIntelligentRoute.Instance().OnPlayerPosChange(vCurPos);
#endif
#if SHOW_AUTOMOVE_FOOTPRINTS
if (IsAutoPF() || m_iDestType == DestTypes.DEST_2D)
g_AutoPFFollowPoints.Add(vCurPos);
#endif
m_pHost.m_MoveCtrl.SendMoveCmd(
vCurPos,
2,
GPDataTypeHelper.g_vOrigin,
EC_Utility.ToA3DVECTOR3(cdr.vAbsVelocity),
(int)GPMoveMode.GP_MOVE_SLIDE);
}
}
else if (!m_bMeetSlide)
{
float fSpeed = m_pHost.GetGroundSpeed();
int iMoveMode = m_pHost.m_bWalkRun ? (int)GPMoveMode.GP_MOVE_RUN : (int)GPMoveMode.GP_MOVE_WALK;
if (m_pHost.IsJumping())
iMoveMode = (int)GPMoveMode.GP_MOVE_JUMP;
else if (!m_pHost.m_GndInfo.bOnGround)
iMoveMode = (int)GPMoveMode.GP_MOVE_FALL;
if (m_bReadyCancel && m_pHost.m_GndInfo.bOnGround)
{
Finish();
m_pHost.m_MoveCtrl.SendStopMoveCmd(EC_Utility.ToVector3(vCurPos), fSpeed, iMoveMode);
return true;
}
if ((GetMoveRelDirMask() & (uint)((MOVE_DIR.MD_LEFT | MOVE_DIR.MD_RIGHT | MOVE_DIR.MD_FORWARD | MOVE_DIR.MD_BACK))) != 0)
m_iDestType = DestTypes.DEST_PUSH;
if (m_iDestType == DestTypes.DEST_2D)
{
float fDist;
if (m_pHost.m_GndInfo.bOnGround)
{
m_vCurDir = m_vMoveDest - vCurPos;
m_vCurDir.y = 0.0f;
fDist = m_vCurDir.Normalize();
}
else
{
fDist = (m_vMoveDest - vCurPos).MagnitudeH();
}
vCurPos = m_pHost.m_MoveCtrl.GroundMove(m_vCurDir, fSpeed, fDeltaTime, m_pHost.m_fVertSpeed);
Debug.LogError(vCurPos);
UpdateFacingFromDelta(vCurPos);
if (m_pHost.m_MoveCtrl.MoveBlocked() >= 3)
{
cdr.fYVel = 0.0f;
Finish();
m_pHost.m_MoveCtrl.SendStopMoveCmd(EC_Utility.ToVector3(vCurPos), fSpeed, iMoveMode);
}
else if (cdr.vTPNormal != Vector3.zero)
{
A3DVECTOR3 vMoveDelta = vCurPos - m_pHost.GetPos();
vMoveDelta.y = 0.0f;
float fMoveDist = vMoveDelta.Normalize();
if (fMoveDist >= fDist)
{
Finish();
m_bUseAutoMoveDialog = false;
m_pHost.SetPos(EC_Utility.ToVector3(vCurPos));
m_pHost.m_MoveCtrl.SendStopMoveCmd(EC_Utility.ToVector3(vCurPos), fSpeed, iMoveMode);
}
else
{
m_pHost.SetPos(EC_Utility.ToVector3(vCurPos));
m_pHost.m_MoveCtrl.SendMoveCmd(
vCurPos,
0,
m_vMoveDest,
EC_Utility.ToA3DVECTOR3(cdr.vAbsVelocity),
iMoveMode);
}
#if SHOW_AUTOMOVE_FOOTPRINTS
g_AutoPFFollowPoints.Add(vCurPos);
#endif
}
else
{
#if SHOW_AUTOMOVE_FOOTPRINTS
g_AutoPFFollowPoints.Add(vCurPos);
#endif
m_pHost.SetPos(EC_Utility.ToVector3(vCurPos));
m_pHost.m_MoveCtrl.SendMoveCmd(
vCurPos,
1,
m_vMoveDest,
EC_Utility.ToA3DVECTOR3(cdr.vAbsVelocity),
iMoveMode);
}
}
else if (m_iDestType == DestTypes.DEST_DIR)
{
vCurPos = m_pHost.m_MoveCtrl.GroundMove(m_vCurDir, fSpeed, fDeltaTime, m_pHost.m_fVertSpeed);
UpdateFacingFromDelta(vCurPos);
m_pHost.SetPos(EC_Utility.ToVector3(vCurPos));
if (m_pHost.m_MoveCtrl.MoveBlocked() >= 3)
{
cdr.fYVel = 0.0f;
Finish();
m_pHost.m_MoveCtrl.SendStopMoveCmd(EC_Utility.ToVector3(vCurPos), fSpeed, iMoveMode);
}
else if (m_pHost.m_GndInfo.bOnGround)
{
m_pHost.m_MoveCtrl.SendMoveCmd(
vCurPos,
2,
GPDataTypeHelper.g_vOrigin,
EC_Utility.ToA3DVECTOR3(cdr.vAbsVelocity),
iMoveMode);
}
else
{
m_pHost.m_MoveCtrl.SendMoveCmd(
vCurPos,
1,
m_vMoveDest,
EC_Utility.ToA3DVECTOR3(cdr.vAbsVelocity),
iMoveMode);
}
}
else if (m_iDestType == DestTypes.DEST_STANDJUMP)
{
if (!m_pHost.IsJumping())
{
Finish();
m_pHost.m_MoveCtrl.SendStopMoveCmd(EC_Utility.ToVector3(vCurPos), fSpeed, iMoveMode);
}
else
{
vCurPos = m_pHost.m_MoveCtrl.GroundMove(GPDataTypeHelper.g_vOrigin, 0.0f, fDeltaTime, m_pHost.m_fVertSpeed);
m_pHost.SetPos(EC_Utility.ToVector3(vCurPos));
if (m_pHost.m_MoveCtrl.MoveBlocked() >= 3)
{
m_pHost.ResetJump();
Finish();
m_pHost.m_MoveCtrl.SendStopMoveCmd(EC_Utility.ToVector3(vCurPos), fSpeed, iMoveMode);
}
else
{
m_pHost.m_MoveCtrl.SendMoveCmd(
vCurPos,
0,
m_vMoveDest,
EC_Utility.ToA3DVECTOR3(cdr.vAbsVelocity),
iMoveMode);
}
}
}
else if (m_iDestType == DestTypes.DEST_PUSH)
{
Vector3 vMoveDir = Vector3.zero;//EC_Utility.ToVector3(GPDataTypeHelper.g_vOrigin);
fSpeed = m_pHost.GetGroundSpeed();
bool bFinish = false;
if (m_pHost.GetPushDir(ref vMoveDir, (uint)(MOVE_DIR.MD_FORWARD | MOVE_DIR.MD_BACK | MOVE_DIR.MD_LEFT | MOVE_DIR.MD_RIGHT), fDeltaTime))
{
if (vMoveDir != Vector3.zero)
{
m_pHost.SetRotationHP(vMoveDir);
}
vCurPos = m_pHost.m_MoveCtrl.GroundMove(EC_Utility.ToA3DVECTOR3(vMoveDir), fSpeed, fDeltaTime, m_pHost.m_fVertSpeed);
//Debug.LogError("vCurPos =" + vCurPos);
m_pHost.SetPos(EC_Utility.ToVector3(vCurPos));
}
else
{
if (!m_bUseAutoMoveDialog)
bFinish = true;
else
m_iDestType = DestTypes.DEST_2D;
}
if (bFinish || m_pHost.m_MoveCtrl.MoveBlocked() >= 3)
{
if (m_pHost.m_MoveCtrl.MoveBlocked() >= 3)
cdr.fYVel = 0.0f;
Finish();
m_pHost.m_vVelocity.Clear();
m_pHost.m_MoveCtrl.SendStopMoveCmd(EC_Utility.ToVector3(vCurPos), fSpeed, iMoveMode);
}
else
{
m_pHost.m_vVelocity = EC_Utility.ToA3DVECTOR3(vMoveDir) * fSpeed;
m_pHost.m_MoveCtrl.SendMoveCmd(
vCurPos,
2,
GPDataTypeHelper.g_vOrigin,
m_pHost.m_vVelocity,
iMoveMode);
}
}
//else if (m_iDestType == DestTypes.DEST_PUSH)
//{
// m_iDestType = DestTypes.DEST_2D;
//}
#if ENABLE_CEC_INTELLIGENT_ROUTE
else if (IsAutoPF())
{
float fDist = 0.0f;
A3DVECTOR3 vCurDest = CECIntelligentRoute.Instance().GetCurDest();
if (m_pHost.m_GndInfo.bOnGround)
{
m_vCurDir = vCurDest - vCurPos;
m_vCurDir.y = 0.0f;
fDist = m_vCurDir.Normalize();
}
else
{
fDist = (vCurDest - vCurPos).MagnitudeH();
}
vCurPos = m_pHost.m_MoveCtrl.GroundMove(m_vCurDir, fSpeed, fDeltaTime, m_pHost.m_fVertSpeed);
if (!m_vCurDir.IsZero())
{
//m_pHost.StartModelMove(m_vCurDir, GPDataTypeHelper.g_vAxisY, 100);
//m_pHost.ChangeModelTargetDirAndUp(m_vCurDir, GPDataTypeHelper.g_vAxisY);
UpdateFacingFromDelta(vCurPos);
}
if (m_pHost.m_MoveCtrl.MoveBlocked() >= 3)
{
cdr.fYVel = 0.0f;
Finish();
m_pHost.m_MoveCtrl.SendStopMoveCmd(EC_Utility.ToVector3(vCurPos), fSpeed, iMoveMode);
}
else
{
m_pHost.SetPos(EC_Utility.ToVector3(vCurPos));
CECIntelligentRoute.Instance().OnPlayerPosChange(vCurPos);
if (CECIntelligentRoute.Instance().IsPathFinished())
{
Finish();
m_pHost.m_MoveCtrl.SendStopMoveCmd(EC_Utility.ToVector3(vCurPos), fSpeed, iMoveMode);
}
else
{
m_pHost.m_MoveCtrl.SendMoveCmd(
vCurPos,
1,
vCurDest,
EC_Utility.ToA3DVECTOR3(cdr.vAbsVelocity),
iMoveMode);
}
}
}
#else
else if (IsAutoPF())
{
m_bSwitchTo2D = true;
}
#endif
}
else
{
m_pHost.m_MoveCtrl.SendStopMoveCmd(EC_Utility.ToVector3(vCurPos), m_pHost.GetGroundSpeed(), (int)GPMoveMode.GP_MOVE_SLIDE);
Finish();
}
return true;
}
// Tick routine of flying or swimming
protected bool Tick_FlySwim(float fDeltaTime)
{
@@ -348,7 +768,7 @@ namespace BrewMonster.Scripts
protected void ClearResetUseAutoPF()
{
m_bResetAutoPF = false;
}
protected void UpdateResetUseAutoPF()
{
@@ -390,5 +810,30 @@ namespace BrewMonster.Scripts
// ClearResetUseAutoPF();
}
protected virtual uint GetMoveRelDirMask()
{
// TODO: hook up CECHostPlayer move-direction flags when available.
return 0;
}
private void UpdateFacingFromDelta(A3DVECTOR3 nextPos)
{
A3DVECTOR3 prevPos = m_pHost.GetPos();
Vector3 delta = EC_Utility.ToVector3(nextPos - prevPos);
delta.y = 0.0f;
if (delta.sqrMagnitude > 1e-6f)
{
delta.Normalize();
m_pHost.SetDirAndUp(delta, Vector3.up);
}
}
private A3DVECTOR3 GetCurrentModelDir()
{
Vector3 forward = m_pHost != null ? m_pHost.transform.forward : Vector3.forward;
return new A3DVECTOR3(forward.x, forward.y, forward.z);
}
}
}
@@ -12,7 +12,7 @@ namespace BrewMonster.Scripts
protected bool m_bMoving; // moving flag
protected bool m_bStopSlide; // stop sliding flag
protected int m_iCurAction; // current playing action
protected int m_oldAction; // cache old played action
//protected int m_oldAction; // cache old played action
public CECHPWorkStand(CECHPWorkMan pWorkMan) : base(Host_work_ID.WORK_STAND, pWorkMan)
{
@@ -132,7 +132,7 @@ namespace BrewMonster.Scripts
var pWork = (CECHPWorkMove)m_pWorkMan.CreateWork(Host_work_ID.WORK_MOVETOPOS);
if (pWork != null)
{
pWork.SetDestination(CECHPWorkMove.Types.DEST_STANDJUMP, GPDataTypeHelper.g_vOrigin);
pWork.SetDestination(CECHPWorkMove.DestTypes.DEST_STANDJUMP, GPDataTypeHelper.g_vOrigin);
m_pWorkMan.SetPostTickCommand(new CECHPWorkPostTickRunWorkCommand(
pWork, false, CECHPWorkMan.Work_priority.PRIORITY_1, true, (uint)dwDeltaTime));
}
@@ -160,7 +160,7 @@ namespace BrewMonster.Scripts
m_iCurAction = m_pHost.GetMoveStandAction(false, bFight);
}
float fDeltaTime = dwDeltaTime * 0.001f;
float fDeltaTime = dwDeltaTime /** 0.001f*/;
if (!m_pHost.IsRooting())
{
@@ -170,11 +170,11 @@ namespace BrewMonster.Scripts
Tick_FlySwim(fDeltaTime);*/
}
if (m_iPoseAction == (int)CECPlayer.PLAYER_ACTION_TYPE.ACT_STAND && m_oldAction != m_iCurAction)
if (m_iPoseAction == (int)CECPlayer.PLAYER_ACTION_TYPE.ACT_STAND)
{
// Chariot war special case omitted for now
m_pHost.PlayAction(m_iCurAction, false, 300);
m_oldAction = m_iCurAction;
m_pHost.PlayAction(m_iCurAction, false, 0);
//m_oldAction = m_iCurAction;
}
// Force to update object's direction and up
@@ -225,25 +225,28 @@ namespace BrewMonster.Scripts
}
// Tick routine of flying or swimming
/* bool Tick_FlySwim(float fDeltaTime)
{
m_bMoving = false;
/* bool Tick_FlySwim(float fDeltaTime)
{
m_bMoving = false;
if (m_pHost.m_iMoveEnv == CECPlayer.Move_environment.MOVEENV_WATER && !m_bWaterStop)
{
// Handle floating at water surface after falling into water
A3DVECTOR3 vCurPos = m_pHost.GetPos();
// ON_AIR_CDR_INFO not available in current C# port; approximate using CDR_INFO where applicable
float fSpeed = m_pHost.GetSwimSpeedSev();
if (m_pHost.m_iMoveEnv == CECPlayer.Move_environment.MOVEENV_WATER && !m_bWaterStop)
{
// Handle floating at water surface after falling into water
A3DVECTOR3 vCurPos = m_pHost.GetPos();
// ON_AIR_CDR_INFO not available in current C# port; approximate using CDR_INFO where applicable
float fSpeed = m_pHost.GetSwimSpeedSev();
// As we don't have water height/extent readily available on host in this port,
// retain structure and leave movement here minimal.
// If water height APIs are added, restore the original logic.
// m_bMoving = true; // enable when full water logic is available
}
// As we don't have water height/extent readily available on host in this port,
// retain structure and leave movement here minimal.
// If water height APIs are added, restore the original logic.
// m_bMoving = true; // enable when full water logic is available
}
return true;
}*/
return true;
}*/
// Get stop sliding flag
public bool GetStopSlideFlag() { return m_bStopSlide; }
}
}
@@ -193,15 +193,15 @@ public class CECTracedNPC : CECTracedObject
{
bRet = true;
}
//else if (m_iReason == CECHPWorkTrace.Trace_reason.TRACE_SPELL)
//{
// CECSkill pSkill = m_pHost.m_pPrepSkill;
// if (pSkill == null || pSkill.GetTargetType() != 2)
// {
// bRet = true;
// m_pHost.m_pPrepSkill = null;
// }
//}
else if (m_iReason == CECHPWorkTrace.Trace_reason.TRACE_SPELL)
{
CECSkill pSkill = m_pHost.m_pPrepSkill;
if (pSkill == null || pSkill.GetTargetType() != 2)
{
bRet = true;
m_pHost.m_pPrepSkill = null;
}
}
return bRet;
}
@@ -220,6 +220,7 @@ public class CECTracedNPC : CECTracedObject
if (m_iReason == CECHPWorkTrace.Trace_reason.TRACE_TALK)
{
//TODO: Visite other's booth, send hello message to him
if ((!m_pHost.IsInBattle() || m_pHost.InSameBattleCamp(pNPC)) /*&&
!g_pGame.GetGameRun().GetUIManager().GetInGameUIMan().GetDialog("Win_SkillAction").IsShow()*/)
{
@@ -295,15 +296,15 @@ public class CECTracedPlayer : CECTracedObject
{
bRet = true;
}
//else if (m_iReason == CECHPWorkTrace.Trace_reason.TRACE_SPELL)
//{
// CECSkill pSkill = m_pHost.m_pPrepSkill;
// if (pSkill == null || pSkill.GetTargetType() != 2)
// {
// bRet = true;
// m_pHost.m_pPrepSkill = null;
// }
//}
else if (m_iReason == CECHPWorkTrace.Trace_reason.TRACE_SPELL)
{
CECSkill pSkill = m_pHost.m_pPrepSkill;
if (pSkill == null || pSkill.GetTargetType() != 2)
{
bRet = true;
m_pHost.m_pPrepSkill = null;
}
}
return bRet;
}
@@ -328,17 +329,15 @@ public class CECTracedPlayer : CECTracedObject
if (m_iObjectId == 0 || m_iObjectId == m_pHost.GetCharacterID())
{
// Handle special case
//ASSERT(m_iReason == CECHPWorkTrace::TRACE_SPELL);
//if (!m_pHost.CannotAttack())
//{
// if (m_pHost.CastSkill(m_iObjectId, m_bForceAttack, null))
// bActionDone = true;
//}
//else
//{
// m_pHost.m_pPrepSkill = null;
//}
//a_LogOutput(1, "[NormalATK]- CECTracedPlayer- OnTouched- special case- TRACE_SPELL");
if (!m_pHost.CannotAttack())
{
if (m_pHost.CastSkill(m_iObjectId, m_bForceAttack, null))
bActionDone = true;
}
else
{
m_pHost.m_pPrepSkill = null;
}
return bActionDone;
}
if (m_iReason == CECHPWorkTrace.Trace_reason.TRACE_ATTACK)
@@ -353,18 +352,18 @@ public class CECTracedPlayer : CECTracedObject
//a_LogOutput(1, "[NormalATK]- CECTracedPlayer- OnTouched- TRACE_ATTACK");
}
}
//else if (m_iReason == CECHPWorkTrace.Trace_reason.TRACE_SPELL)
//{
// //a_LogOutput(1, "[NormalATK]- CECTracedPlayer- OnTouched- TRACE_SPELL");
// if (!m_pHost.CastSkill(m_iObjectId, m_bForceAttack, GetTargetObject()))
// {
// m_pHost.m_pPrepSkill = null;
// }
// else
// {
// bActionDone = true;
// }
//}
else if (m_iReason == CECHPWorkTrace.Trace_reason.TRACE_SPELL)
{
//a_LogOutput(1, "[NormalATK]- CECTracedPlayer- OnTouched- TRACE_SPELL");
if (!m_pHost.CastSkill(m_iObjectId, m_bForceAttack, GetTargetObject()))
{
m_pHost.m_pPrepSkill = null;
}
else
{
bActionDone = true;
}
}
else if (m_iReason == CECHPWorkTrace.Trace_reason.TRACE_TALK)
{
// Visite other's booth, send hello message to him
@@ -392,14 +391,14 @@ public class CECTracedPlayer : CECTracedObject
{
if (pPlayer.IsDead())
{
//if (m_iReason == CECHPWorkTrace.Trace_reason.TRACE_SPELL)
//{
// CECSkill pSkill = m_pHost.m_pPrepSkill;
// if (pSkill && pSkill.GetTargetType() == 2)
// {
// return false;
// }
//}
if (m_iReason == CECHPWorkTrace.Trace_reason.TRACE_SPELL)
{
CECSkill pSkill = m_pHost.m_pPrepSkill;
if (pSkill != null && pSkill.GetTargetType() == 2)
{
return false;
}
}
return true;
}
}
@@ -666,14 +665,15 @@ public class CECHPWorkTrace : CECHPWork
// Work is cancel
public override void Cancel()
{
//if (m_pHost.m_pPrepSkill && m_pTraceObject.GetTraceReason() == Trace_reason.TRACE_SPELL)
// m_pHost.m_pPrepSkill = null;
if (m_pHost.m_pPrepSkill != null && m_pTraceObject.GetTraceReason() == Trace_reason.TRACE_SPELL)
m_pHost.m_pPrepSkill = null;
ClearResetUseAutoPF();
if (GetUseAutoPF())
{
SetUseAutoPF(false);
}
//TODO: m_pHost.StopModelMove(); uncomment and add logic
//m_pHost.StopModelMove();
base.Cancel();
@@ -714,8 +714,8 @@ public class CECHPWorkTrace : CECHPWork
public void PressCancel()
{
m_bReadyCancel = true;
//if (m_pTraceObject.GetTraceReason() == TRACE_SPELL)
// m_pHost.m_pPrepSkill = NULL;
if (m_pTraceObject.GetTraceReason() == Trace_reason.TRACE_SPELL)
m_pHost.m_pPrepSkill = null;
}
// Set move close flag
public void SetMoveCloseFlag(bool bMoveClose) { m_pTraceObject.SetMoveCloseFlag(bMoveClose); }
@@ -757,10 +757,10 @@ public class CECHPWorkTrace : CECHPWork
{
m_pTraceObject.OnTargetMissing();
}
//else if (m_pTraceObject.GetTraceReason() == Trace_reason.TRACE_SPELL)
//{
// m_pHost.m_pPrepSkill = null;
//}
else if (m_pTraceObject.GetTraceReason() == Trace_reason.TRACE_SPELL)
{
m_pHost.m_pPrepSkill = null;
}
}
public void OnTouchTarget()
@@ -0,0 +1,212 @@
using BrewMonster.Managers;
using BrewMonster.Network;
using BrewMonster.Scripts;
using CSNetwork.GPDataType;
using System;
using UnityEngine;
namespace BrewMonster
{
public partial class CECHostPlayer
{
float _JumpTime = -1;
public void OnKeyDown()
{
if (Input.GetMouseButtonDown(0) && mainCam != null)
{
OnMsgLBtnClick();
}
if (Input.GetKeyDown(KeyCode.Space))
{
//if (bInAutoMode) return;
if (IsJumpInWater() || IsFlying())
return;
if (IsUnderWater())
{
if (!CanTakeOffWater())
return;
else if (_JumpTime <= 0)
{
_JumpTime = Time.realtimeSinceStartup;
return;
}
else if ((Time.realtimeSinceStartup - _JumpTime) < 1f) // logic in c++, _JumpTime is milisecond
return;
else
_JumpTime = -1f;
}
m_GndInfo.bOnGround = GroundCheck(out lastGroundHit);
OnMsgHstJump();
}
}
public void OnMsgLBtnClick()
{
int idTraceTarget = 0, idSelTarget = 0;
bool bForceAttack = false;
int iTraceReason = CECHPWorkTrace.Trace_reason.TRACE_NONE;
bool bWikiMonster = false;
ray = mainCam.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit))
{
if (hit.collider.gameObject.TryGetComponent<CECObject>(out CECObject clickedObject))
{
int idObject = CECObject.GetObjectID(clickedObject);
if (idObject != 0)
{
CECNPC pNPC = EC_ManMessageMono.Instance._CECNPCMan.GetNPC(idObject);
if (pNPC != null)
{
if (!pNPC.IsDead() && m_idSelTarget == idObject)
{
idTraceTarget = idObject;
}
else
{
idSelTarget = idObject;
}
if (idTraceTarget != 0)
{
if (AttackableJudge(idObject, bForceAttack) == 1)
iTraceReason = CECHPWorkTrace.Trace_reason.TRACE_ATTACK;
else if (pNPC.IsServerNPC())
{
if (!IsInBattle() || InSameBattleCamp(pNPC))
iTraceReason = CECHPWorkTrace.Trace_reason.TRACE_TALK;
}
}
}
else
{
// pCDS.m_RayTraceRt.iEntity == ECENT_PLAYER
CECPlayer pPlayer = EC_ManMessageMono.Instance.EC_ManPlayer.GetPlayer(idObject);
// 1. Msg.dwParam4 is double click flag.
// 2. Buddy player counld't be traced
if (!pPlayer.IsDead() /*&& pPlayer.GetCharacterID() != m_iBuddyId*/ &&
(m_idSelTarget == idObject /*|| (Msg.dwParam4 && m_idUCSelTarget == idObject)*/))
{
idTraceTarget = idObject;
//bForceAttack = glb_GetForceAttackFlag(&Msg.dwParam3);
if (AttackableJudge(idObject, bForceAttack) == 1)
iTraceReason = CECHPWorkTrace.Trace_reason.TRACE_ATTACK;
else if (pPlayer.GetBoothState() != 0)
iTraceReason = CECHPWorkTrace.Trace_reason.TRACE_TALK;
}
else
{
idSelTarget = idObject;
}
}
// cancel this action if not selectable
if (!CanSelectTarget(idTraceTarget))
{
idTraceTarget = 0;
//return;
}
}
}
}
// Tell server we select a target
if (idSelTarget != 0 && m_idSelTarget != idSelTarget)
{
m_idUCSelTarget = idSelTarget;
SelectTarget(m_idUCSelTarget);
}
if (idTraceTarget != 0)
{
if (iTraceReason == CECHPWorkTrace.Trace_reason.TRACE_ATTACK)
{
if (!CanDo(ActionCanDo.CANDO_MELEE))
return;
NormalAttackObject(idTraceTarget, bForceAttack);
}
else
{
if (!CanDo(ActionCanDo.CANDO_MOVETO))
return;
CECHPWork pWork;
if (iTraceReason == CECHPWorkTrace.Trace_reason.TRACE_PICKUP)
{
//PickupObject(idTraceTarget, false);
}
else if (iTraceReason == CECHPWorkTrace.Trace_reason.TRACE_GATHER)
{
//PickupObject(idTraceTarget, true);
}
else if ((pWork = m_pWorkMan.GetWork(CECHPWork.Host_work_ID.WORK_TRACEOBJECT)) != null)
{
CECHPWorkTrace pWorkTrace = (pWork) as CECHPWorkTrace;
pWorkTrace.SetTraceTarget(pWorkTrace.CreatTraceTarget(idTraceTarget, iTraceReason, bForceAttack));
}
else if (m_pWorkMan.CanStartWork(CECHPWork.Host_work_ID.WORK_TRACEOBJECT) && !bWikiMonster)
{
CECHPWorkTrace pWorkTrace = (CECHPWorkTrace)m_pWorkMan.CreateWork(CECHPWork.Host_work_ID.WORK_TRACEOBJECT);
pWorkTrace.SetTraceTarget(pWorkTrace.CreatTraceTarget(idTraceTarget, iTraceReason, bForceAttack));
m_pWorkMan.StartWork_p1(pWorkTrace);
}
}
}
}
public void OnMsgHstJump()
{
// first of all see if we need to cancel sitdown work.
if (m_pWorkMan.IsSitting())
{
UnityGameSession.c2s_CmdStandUp();
return;
}
if (!CanDo(ActionCanDo.CANDO_JUMP))
return;
float fVertSpeed = 10.0f;
if (m_iJumpCount == 0)
{
if (m_iMoveEnv == Move_environment.MOVEENV_WATER)
{
if (!IsUnderWater())
return;
fVertSpeed = 7.0f;
SetJumpInWater(true);
}
else if (!m_GndInfo.bOnGround)
return;
}
if (InSlidingState())
return;
m_iJumpCount++;
m_fVertSpeed = fVertSpeed;
m_CDRInfo.vAbsVelocity.y = fVertSpeed;
m_CDRInfo.fYVel = 0.0f;
m_CDRInfo.vTPNormal = Vector3.zero;
if (m_iJumpCount == 1)
{
m_MoveCtrl.SendMoveCmd(GetPos(), 2, GPDataTypeHelper.g_vAxisY, EC_Utility.ToA3DVECTOR3(m_CDRInfo.vAbsVelocity), m_iMoveMode, true);
// BubbleText(BUBBLE_HITMISSED, 0);
}
PlayAction((int)CECPlayer.PLAYER_ACTION_TYPE.ACT_JUMP_START);
PlayAction((int)CECPlayer.PLAYER_ACTION_TYPE.ACT_JUMP_LOOP, false, 0, true);
}
}
}
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: c64966b4075658b48a5bc694d91a47fc
@@ -1,5 +1,4 @@
using CSNetwork.GPDataType;
using BrewMonster.Scripts.Player;
using PerfectWorld.Scripts.Player;
namespace BrewMonster.Scripts
+38 -33
View File
@@ -39,7 +39,7 @@ public abstract partial class CECPlayer : CECObject
[SerializeField] internal int m_idCurHover; // ID of object under cursor
protected int m_iShape; // Ñ¡ÖÐÄ¿±êµÄID
protected uint m_dwStates; // Player's basic states
// 当前攻击方式 // Action type for attack animation
protected uint m_uAttackType;
protected int[] m_aEquips;
@@ -79,7 +79,9 @@ public abstract partial class CECPlayer : CECObject
public static int MAX_REINCARNATION = 2;
protected List<int> m_aCurEffects = new List<int>(); // Current effects
byte m_ReincarnationCount = 0;
string m_strName; // Player name
string m_strName; // Player name
// 需要是可能 || Need is possible
protected bool m_bHangerOn = false;
public MOVECONST m_MoveConst; // Const used when moving control
public Move_Mode m_MoveMode;
@@ -212,12 +214,12 @@ public abstract partial class CECPlayer : CECObject
public static async Task<bool> LoadPlayerSkin(GameObject aSkins, int index, string szFile)
{
// these are LOD suffix
string[] suffix1 = {"一?", "二级", "三级"};
string[] suffix2 = {"", "二级", "三级"};
string[] suffix1 = { "一?", "二级", "三级" };
string[] suffix2 = { "", "二级", "三级" };
string szSkinFile = "";
if( index == EC_Player_Skin_Const.SKIN_BODY_INDEX || index == EC_Player_Skin_Const.SKIN_HEAD_INDEX )
if (index == EC_Player_Skin_Const.SKIN_BODY_INDEX || index == EC_Player_Skin_Const.SKIN_HEAD_INDEX)
szSkinFile = $"{szFile}{suffix2[0]}";
else
szSkinFile = $"{szFile}{suffix1[0]}";
@@ -656,16 +658,16 @@ public abstract partial class CECPlayer : CECObject
}
if (ElementSkill.IsGoblinSkill((uint)idSkill) &&
ElementSkill.GetType((uint)idSkill) == 2)
{
pAttack = CECAttacksMan.Instance.AddSkillAttack(
GetPlayerInfo().cid, GetPlayerInfo().cid, idTarget, GetWeaponID(), idSkill, skillLevel, dwModifier, nDamage);
}
else
{
// begin a skill attack
pAttack = CECAttacksMan.Instance.AddSkillAttack(
GetPlayerInfo().cid, m_idCurSkillTarget, idTarget, GetWeaponID(), idSkill, skillLevel, dwModifier, nDamage);
}
{
pAttack = CECAttacksMan.Instance.AddSkillAttack(
GetPlayerInfo().cid, GetPlayerInfo().cid, idTarget, GetWeaponID(), idSkill, skillLevel, dwModifier, nDamage);
}
else
{
// begin a skill attack
pAttack = CECAttacksMan.Instance.AddSkillAttack(
GetPlayerInfo().cid, m_idCurSkillTarget, idTarget, GetWeaponID(), idSkill, skillLevel, dwModifier, nDamage);
}
if (pAttack != null)
{
@@ -673,7 +675,7 @@ public abstract partial class CECPlayer : CECObject
pAttack.SetSkillSection(nSection);
if (!IsDead() && (dwModifier & (uint)MOD.MOD_RETORT) == 0
&& (dwModifier & (uint)MOD.MOD_ATTACK_AURA) == 0
&& PlaySkillAttackAction(idSkill, nAttackSpeed,ref unusedInt, nSection, pAttack)
&& PlaySkillAttackAction(idSkill, nAttackSpeed, ref unusedInt, nSection, pAttack)
&& (dwModifier & (uint)MOD.MOD_BEAT_BACK) == 0)
{
}
@@ -733,7 +735,7 @@ public abstract partial class CECPlayer : CECObject
// ==============================
if (GetMoveEnv() == (int)MoveEnvironment.MOVEENV_GROUND)
{
// “起? 动作(挥起)
szAct = EC_Utility.BuildActionName(action, weapon_type, "起");
EventBus.PublishChannel(m_PlayerInfo.cid, new PlayActionEvent(szAct));
@@ -1129,7 +1131,10 @@ public abstract partial class CECPlayer : CECObject
return iAction;
}
public A3DVECTOR3 GetModelMoveDir()
{ // ÒÆ¶¯Ê±¡¢·µ»ØÒƶ¯³¯Ïò£¬¾²Ö¹Ê±¡¢·µ»ØÄ£Ðͳ¯Ïò
return EC_Utility.ToA3DVECTOR3(transform.forward);
}
public void Damaged(int nDamage, uint dwModifier = 0, int skill = 0)
{
if (nDamage == -2)
@@ -1172,8 +1177,8 @@ public abstract partial class CECPlayer : CECObject
if (!OnDamaged(skill))
// PlayAction((int)PLAYER_ACTION_TYPE.ACT_WOUNDED);
DamageTextManager.Instance.ShowDamageText(
transform.position, nDamage, Color.yellow, 1.0f);
DamageTextManager.Instance.ShowDamageText(
transform.position, nDamage, Color.yellow, 1.0f);
/* if (dwModifier & CECAttackEvent::MOD_IMMUNE)
BubbleText(BUBBLE_IMMUNE, 0);
else if (dwModifier & CECAttackEvent::MOD_REBOUND)
@@ -1268,7 +1273,7 @@ public abstract partial class CECPlayer : CECObject
int weapon_type = GetShowingWeaponType();
if (!_default_skill_actions.TryGetValue((uint)idSkill, out PLAYER_ACTION_INFO_CONFIG data) ||
if (!_default_skill_actions.TryGetValue((uint)idSkill, out PLAYER_ACTION_INFO_CONFIG data) ||
data.action_prefix == null || data.action_prefix.Length == 0 || data.action_prefix[0] == 0)
{
// Check if it's a target item skill / 检查是否为目标道具技能
@@ -1293,7 +1298,7 @@ public abstract partial class CECPlayer : CECObject
{
szAct = EC_Utility.BuildActionName(data, weapon_type, "_施放起_");
GetSkillSectionActionName(ref szAct, idSkill, nSection);
if (!PlaySkillAttackActionWithName(idSkill, szAct, bHideFX, attackEvent))
{
return false;
@@ -1317,10 +1322,10 @@ public abstract partial class CECPlayer : CECObject
{
// 空中动作 / Air action
string szActionMiddleName = null;
if ((m_wingType == enumWingType.WINGTYPE_WING && IsFlying()) ||
(m_iProfession == PROFESSION.PROF_ANGEL) ||
(m_iProfession == PROFESSION.PROF_ARCHOR) ||
(m_iProfession == PROFESSION.PROF_MONK) ||
if ((m_wingType == enumWingType.WINGTYPE_WING && IsFlying()) ||
(m_iProfession == PROFESSION.PROF_ANGEL) ||
(m_iProfession == PROFESSION.PROF_ARCHOR) ||
(m_iProfession == PROFESSION.PROF_MONK) ||
(m_iProfession == PROFESSION.PROF_GHOST))
{
szActionMiddleName = "_空中翅膀"; // Air with wings / 空中翅膀
@@ -1333,7 +1338,7 @@ public abstract partial class CECPlayer : CECObject
szActionMiddleName += "_施放起_";
szAct = EC_Utility.BuildActionName(data, weapon_type, szActionMiddleName);
GetSkillSectionActionName(ref szAct, idSkill, nSection);
if (!PlaySkillAttackActionWithName(idSkill, szAct, bHideFX, attackEvent))
{
return false;
@@ -1464,9 +1469,9 @@ public abstract partial class CECPlayer : CECObject
return (m_dwResFlags & (uint)PlayerResourcesReadyFlag.RESFG_ALL) == (uint)PlayerResourcesReadyFlag.RESFG_ALL;
}
// Get character ID
// Play Gfx on Models
protected bool PlayGfx(string szPath, string szHook, float fScale /*1.0f*/, uint iShapeTypeMask /*(1<<PLAYERMODEL_MAJOR)*/, bool bForceNoRecord =false)
protected bool PlayGfx(string szPath, string szHook, float fScale /*1.0f*/, uint iShapeTypeMask /*(1<<PLAYERMODEL_MAJOR)*/, bool bForceNoRecord = false)
{
// bool bPlayed(false);
// bool bSkipRecord = (iShapeTypeMask != PLAYERMODEL_TYPEALL) || bForceNoRecord;
@@ -1499,16 +1504,16 @@ public abstract partial class CECPlayer : CECObject
{
// Usage: Load the prefab asynchronously using AddressableManager
GameObject prefab = await AddressableManager.Instance.LoadPrefabAsync(path);
if(prefab != null)
if (prefab != null)
{
if (_levelUpVfx != null)
{
if(_levelUpVfx.IsPlaying())
if (_levelUpVfx.IsPlaying())
return;
_levelUpVfx.Play();
return;
}
// Instantiate at player's current position and rotation
_levelUpVfx = Instantiate(prefab, transform).GetComponent<BaseVfxObject>();
_levelUpVfx.Play();
+1 -3
View File
@@ -1,6 +1,4 @@
using BrewMonster.Scripts.Ornament;
using BrewMonster.Scripts.Player;
using BrewMonster.Scripts.World;
using BrewMonster.Scripts.World;
using CSNetwork.GPDataType;
using System;
using UnityEngine;
@@ -6,6 +6,7 @@ using System.Numerics;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
using BrewMonster.Scripts.Task;
using static Unity.Burst.Intrinsics.X86.Avx;
namespace CSNetwork.C2SCommand
@@ -615,11 +616,17 @@ namespace CSNetwork.C2SCommand
}
// TODO: Check orginal C++ implementation
public static Octets CreateTaskNotifyCmd()
public static Octets CreateTaskNotifyCmd(byte[] pData, uint dwDataSize)
{
var cmd = new cmd_header
if(pData == null || pData.Length == 0 || dwDataSize == 0)
{
cmd = (ushort)CommandID.TASK_NOTIFY
return null;
}
var cmd = new cmd_task_notify
{
size = dwDataSize,
placeholder = pData
};
return SerializeCommand(CommandID.TASK_NOTIFY, cmd);
}
@@ -1384,7 +1384,38 @@ namespace CSNetwork.GPDataType
public const float MIN_MOVELEN_IN_AIR_WATER = 0.5f;
public const float MIN_MOVELEN_ON_GROUND = 0.5f;
public const float MIN_MOVELEN_FOR_DETECT_VIBRATION = 0.05f;
/// <summary>
/// Convert a sequential-layout class into raw byte array.
/// </summary>
public static byte[] ToBytes<T>(T obj) where T : struct
{
// Calculate size of the object in memory
int size = Marshal.SizeOf(obj);
// Allocate unmanaged buffer
IntPtr buffer = Marshal.AllocHGlobal(size);
try
{
// Copy managed data → unmanaged buffer
Marshal.StructureToPtr(obj, buffer, false);
// Create byte array and copy unmanaged bytes → managed
byte[] result = new byte[size];
Marshal.Copy(buffer, result, 0, size);
return result;
}
finally
{
// Always free allocated memory to avoid leaks
Marshal.FreeHGlobal(buffer);
}
}
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct cmd_skill_data
{
@@ -1710,6 +1741,17 @@ namespace CSNetwork.GPDataType
public int expiretime;
public char flag;
};
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct cmd_task_notify
{
public uint size;
// In C++, placeholder is byte. It used to first byte of a byte[] data
// but in C# we need to define it as byte[] to hold the whole data.
//public byte placeholder; // Task data ...
public byte[] placeholder; // Task data ...
}
}
@@ -2,7 +2,6 @@
using BrewMonster.Assets.PerfectWorld.Scripts.UI;
using BrewMonster.Managers;
using BrewMonster.Network;
using BrewMonster.Scripts.Player;
using BrewMonster.Scripts.Skills;
using CSNetwork.C2SCommand;
using CSNetwork.GPDataType;
@@ -1260,10 +1259,17 @@ namespace CSNetwork
}
}
public void c2s_SendCmdTaskNotify(ref task_notify_base pBuf, uint sz)
public void c2s_SendCmdTaskNotify(byte[] pData, uint dwDataSize)
{
gamedatasend gamedatasend = new gamedatasend();
gamedatasend.Data = C2SCommandFactory.CreateTaskNotifyCmd();
gamedatasend.Data = C2SCommandFactory.CreateTaskNotifyCmd( pData, dwDataSize);
SendProtocol(gamedatasend);
}
public void c2s_SendCmdStandUp()
{
gamedatasend gamedatasend = new gamedatasend();
gamedatasend.Data = C2SCommandFactory.CreateNakeCmd(C2SCommand.CommandID.STAND_UP);
SendProtocol(gamedatasend);
}
}
@@ -311,6 +311,10 @@ namespace BrewMonster.Network
return;
Instance._gameSession.c2s_SendCmdNPCSevSell(itemNum, items);
}
public static void c2s_CmdStandUp()
{
Instance._gameSession.c2s_SendCmdStandUp();
}
#region Task
public static void c2s_CmdGetAllData(bool byPack, bool byEquip, bool byTask)
{
@@ -318,9 +322,9 @@ namespace BrewMonster.Network
Instance._gameSession.c2s_SendCmdGetAllData(byPack, byEquip, byTask);
}
public static void c2s_CmdTaskNotify(ref task_notify_base pBuf, uint sz)
public static void c2s_CmdTaskNotify( byte[] pBuf, uint sz)
{
Instance._gameSession.c2s_SendCmdTaskNotify(ref pBuf, sz);
Instance._gameSession.c2s_SendCmdTaskNotify( pBuf, sz);
}
#endregion
@@ -1,28 +0,0 @@
using BrewMonster.Scripts.Player;
using UnityEngine;
using static CECPlayer;
namespace BrewMonster
{
public class PlayerIdleState : PlayerState
{
public PlayerIdleState(CECHostPlayer characterCtrl) : base(characterCtrl)
{
}
public override void Enter()
{
_characterCtrl.PlayAction((int)PLAYER_ACTION_TYPE.ACT_STAND, true, 1, false);
}
public override void Exit()
{
}
public override void Update()
{
}
}
}
@@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: 89482cfe1c5315b4d833133e919eac40
@@ -1,29 +0,0 @@
using BrewMonster.Scripts.Player;
using UnityEngine;
using static CECPlayer;
namespace BrewMonster
{
public class PlayerMoveState : PlayerState
{
public PlayerMoveState(CECHostPlayer characterCtrl) : base(characterCtrl)
{
}
public override void Enter()
{
_characterCtrl.PlayAction((int)PLAYER_ACTION_TYPE.ACT_RUN, true, 1, false);
}
public override void Exit()
{
_characterCtrl.StopMovement();
}
public override void Update()
{
_characterCtrl.HandleMovement();
}
}
}
@@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: 979df0dcb6a16cf47a77106a9c9ebb8f
@@ -1,16 +0,0 @@
using UnityEngine;
namespace BrewMonster
{
public abstract class PlayerState
{
protected readonly CECHostPlayer _characterCtrl;
public PlayerState(CECHostPlayer characterCtrl)
{
_characterCtrl = characterCtrl;
}
public abstract void Enter();
public abstract void Exit();
public abstract void Update();
}
}
@@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: 1c3e8f4466ed88340aeb27f86dc0c172
@@ -236,7 +236,7 @@ namespace BrewMonster.Scripts.Skills
public virtual int GetRequiredGenius(int idSkill) { return 0; }
// Чļ
public virtual byte[] GetEffect() { return null; }
public virtual string GetEffect() { return null; }
public static string GetEffect(uint id)
{
SkillStub stub = SkillStub.GetStub(id);
@@ -62,6 +62,30 @@ namespace BrewMonster.Scripts.Skills
return stub.GetIcon();
}
public override string GetName() { return stub.GetName(); }
public override float GetPrayRange(float range, float prayplus)
{
player.SetRange(range);
player.SetPrayrangeplus(prayplus);
if (stub.type == (int)skill_type.TYPE_ATTACK || stub.type == (int)skill_type.TYPE_CURSE)
{
if (stub.auto_attack)
{
float r = 0.3f * stub.GetPraydistance(this);
if (r >= 1.0)
return stub.GetPraydistance(this) - 1.0f;
else
return (float)0.7 * stub.GetPraydistance(this);
}
else
return stub.GetPraydistance(this);
}
if (stub.type == (int)skill_type.TYPE_JUMP)
return stub.GetPraydistance(this);
if (stub.GetRange().NoTarget())
return -1;
else
return stub.GetPraydistance(this);
}
}
@@ -13,6 +13,7 @@ namespace BrewMonster.Scripts.Task
/// contains and manages all task templates
/// init in EC_Game
/// </summary>
[Serializable]
public class ATaskTemplMan
{
public int TaskLoadedCount => m_TaskTemplMap.Count;
@@ -373,17 +374,12 @@ namespace BrewMonster.Scripts.Task
// unsigned int set_id = GetTaskTemplMan()->GetTaskStorageId(id);
uint set_id = GetTaskStorageId(id);
if (set_id > 0)
{
// unsigned short* arr = pLst->m_Storages[set_id-1];
int start = ((int)set_id - 1) * TaskTemplConstants.TASK_STORAGE_LEN;
ushort[] arr = new ushort[TaskTemplConstants.TASK_STORAGE_LEN];
Array.Copy(pLst.m_Storages, start, arr, 0, TaskTemplConstants.TASK_STORAGE_LEN);
// int i;
int start = (int)set_id - 1;
ushort[] arr = pLst.m_Storages;
for (int i = 0; i < TaskTemplConstants.TASK_STORAGE_LEN; i++)
for (int i = start; i < TaskTemplConstants.TASK_STORAGE_LEN; i++)
{
if (arr[i] == (ushort)id)
{
@@ -427,9 +423,9 @@ namespace BrewMonster.Scripts.Task
}
}
private void _notify_svr(TaskInterface pPlayer, byte uiNotifyType, ushort idData)
private void _notify_svr(TaskInterface pTask, byte uReason, ushort uTaskID)
{
ATaskTempl._notify_svr(pPlayer, uiNotifyType, idData);
ATaskTempl._notify_svr(pTask, uReason, uTaskID);
}
public void CheckAutoDelv(TaskInterface pTask)
@@ -1,12 +1,9 @@
using BrewMonster.Network;
using BrewMonster.Scripts.Managers;
using BrewMonster.Scripts.Player;
using CSNetwork.GPDataType;
using PerfectWorld.Scripts.Task;
using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.InteropServices;
using CSNetwork;
using UnityEngine;
namespace BrewMonster.Scripts.Task
@@ -362,12 +359,7 @@ namespace BrewMonster.Scripts.Task
return false;
}
// allocate internal buffers and copy; remaining bytes are zero-initialized in C#
// m_pActiveListRawBuf = new byte[TaskInterfaceConstants.TASK_ACTIVE_LIST_BUF_SIZE];
// {
// int copy = Mathf.Min(iActiveListLen, TaskInterfaceConstants.TASK_ACTIVE_LIST_BUF_SIZE);
// if (copy > 0) System.Buffer.BlockCopy(pActiveListBuf, 0, m_pActiveListRawBuf, 0, copy);
// }
m_pActiveListBuf = new ActiveTaskList();
m_pActiveListBuf.ReadFromBuffer(pActiveListBuf);
@@ -1310,11 +1302,6 @@ namespace BrewMonster.Scripts.Task
if (m_TasksToConfirm.TryGetValue(iTaskID, out ret)) return ret;
return false;
}
public void NotifyServer(ref task_notify_base pBuf, uint sz)
{
UnityGameSession.c2s_CmdTaskNotify(ref pBuf, sz);
}
public bool CheckVersion()
{
@@ -1436,6 +1423,12 @@ namespace BrewMonster.Scripts.Task
break;
}
}
public void NotifyServer(byte[] pBuf, uint sz)
{
// g_pGame->GetGameSession()->c2s_CmdTaskNotify(pBuf, sz);
UnityGameSession.c2s_CmdTaskNotify(pBuf, sz);
}
}
+6 -14
View File
@@ -3,6 +3,7 @@ using System.Reflection;
using System.Runtime.InteropServices;
using BrewMonster.Network;
using BrewMonster.Scripts.Task;
using CSNetwork.GPDataType;
using PerfectWorld.Scripts.Task;
using UnityEngine;
@@ -312,17 +313,9 @@ namespace BrewMonster.Scripts.Task
if (sz < (uint)Marshal.SizeOf<task_notify_base>()) return;
// Marshal base notification structure from buffer
GCHandle handle = GCHandle.Alloc(pBuf, GCHandleType.Pinned);
task_notify_base pNotify;
try
{
pNotify = Marshal.PtrToStructure<task_notify_base>(handle.AddrOfPinnedObject());
}
finally
{
handle.Free();
}
task_notify_base pNotify = GPDataTypeHelper.FromBytes<task_notify_base>(pBuf);
BMLogger.Log($"[TaskClient] OnServerNotify: reason={pNotify.reason}, task={pNotify.task}");
ATaskTempl pTempl = null;
ActiveTaskEntry pEntry = null;
@@ -409,11 +402,10 @@ namespace BrewMonster.Scripts.Task
{
// Tsvr_task_special_award and special_award structs not defined; need to define
if (sz != Marshal.SizeOf<svr_task_special_award>()) return;
// TODO: OnSpecialAward method not found in ATaskTemplMan; implement if needed
ATaskTemplMan pMan = GetTaskTemplMan();
if (pMan != null)
{
svr_task_special_award awardNotify = Marshal.PtrToStructure<svr_task_special_award>(handle.AddrOfPinnedObject());
svr_task_special_award awardNotify = GPDataTypeHelper.FromBytes<svr_task_special_award>(pBuf);
pMan.OnSpecialAward(awardNotify.sa, pTask);
if (awardNotify.sa.id1 == 0)
{
@@ -501,7 +493,7 @@ namespace BrewMonster.Scripts.Task
// Clear valid count and process server notification
pTempl.ClearValidCount();
// OnServerNotify method signature may need adjustment for C# (ref/out parameters)
pTempl.OnServerNotify(pTask, pEntry, ref pNotify, sz);
pTempl.OnServerNotify(pTask, pEntry, pNotify, sz, pBuf);
}
// Helper method to get task template manager
@@ -127,7 +127,7 @@ namespace BrewMonster.Scripts.Task
uint GetAccountTotalCash();
uint GetCurTime();
void SetFinishDlgShowTime(int t);
void NotifyServer(ref task_notify_base pBuf, uint sz);
void NotifyServer( byte[] pBuf, uint sz);
bool CheckVersion();
StorageTaskList GetStorageTaskList();
void ShowPunchBagMessage(bool bSucced,bool bMax,uint MonsterTemplID,int dps,int dph);
@@ -515,7 +515,7 @@ namespace BrewMonster.Scripts.Task
// bool IsTimeMarkUpdate() const { return (m_uListState & TLIST_STATE_UPDATE_TIME_MARK) != 0; }
// void SetTimeMarkUpdate() { m_uListState |= TLIST_STATE_UPDATE_TIME_MARK; }
// void ClearTimeMarkUpdate() { m_uListState &= ~TLIST_STATE_UPDATE_TIME_MARK; }
// int GetMaxSimultaneousCount() {return m_uMaxSimultaneousCount ? TASK_MAX_SIMULTANEOUS_COUT : TASK_DEFAULT_MAX_SIMULTANEOUS_COUT;}
public int GetMaxSimultaneousCount() {return m_uMaxSimultaneousCount ? TaskTemplConstants.TASK_MAX_SIMULTANEOUS_COUT : TaskTemplConstants.TASK_DEFAULT_MAX_SIMULTANEOUS_COUT;}
public void ExpandMaxSimultaneousCount()
{
m_uMaxSimultaneousCount = true;
@@ -2,6 +2,7 @@ using System;
using System.Runtime.InteropServices;
using BrewMonster.Network;
using BrewMonster.Scripts.Task;
using CSNetwork.GPDataType;
using PerfectWorld.Scripts.Task;
namespace BrewMonster.Scripts.Task
@@ -387,8 +388,9 @@ namespace BrewMonster.Scripts.Task
public void OnServerNotify(
TaskInterface pTask,
ActiveTaskEntry pEntry,
ref task_notify_base pNotify,
uint sz)
task_notify_base pNotify,
uint sz,
byte[] pBuf) // In C++ pNotify is a pointer to raw data; here we pass the full byte array for parsing
{
uint ulTime = 0, ulCaptainTask = 0;
ActiveTaskList pLst = null;
@@ -396,10 +398,10 @@ namespace BrewMonster.Scripts.Task
task_sub_tags sub_tags = new task_sub_tags();
// memset(&sub_tags, 0, sizeof(sub_tags));
uint i=0;
svr_monster_killed pKilled = null;
svr_player_killed pKilledPlayer = null;
svr_monster_killed pKilled = new svr_monster_killed();
svr_player_killed pKilledPlayer = new svr_player_killed();
StorageTaskList pStorage = pTask.GetStorageTaskList();
svr_treasure_map pTreasure = null;
svr_treasure_map pTreasure = new svr_treasure_map();
var m_enumMethod = m_FixedData.m_enumMethod;
switch (pNotify.reason)
@@ -409,7 +411,7 @@ namespace BrewMonster.Scripts.Task
if (sz != Marshal.SizeOf<svr_player_killed>()) break;
if (m_enumMethod != (uint)TaskCompletionMethod.enumTMKillPlayer) break;
pKilledPlayer = new svr_player_killed(pNotify);
pKilledPlayer = GPDataTypeHelper.FromBytes<svr_player_killed>(pBuf);
int iIndex = pKilledPlayer.index;
if (iIndex < TaskInterfaceConstants.MAX_MONSTER_WANTED)
{
@@ -420,7 +422,7 @@ namespace BrewMonster.Scripts.Task
case TaskTemplConstants.TASK_SVR_NOTIFY_TREASURE_MAP:
if (m_enumMethod == (uint)TaskCompletionMethod.enumTMReachTreasureZone)
{
pTreasure = new svr_treasure_map(pNotify);
pTreasure = GPDataTypeHelper.FromBytes<svr_treasure_map>(pBuf);
pEntry.m_iUsefulData1 = pTreasure.treasure_index;
}
break;
@@ -428,7 +430,7 @@ namespace BrewMonster.Scripts.Task
if (sz != Marshal.SizeOf<svr_monster_killed>()) break;
if (m_enumMethod != (uint)TaskCompletionMethod.enumTMKillNumMonster) break;
pKilled = new svr_monster_killed(pNotify);
pKilled = GPDataTypeHelper.FromBytes<svr_monster_killed>(pBuf);
for (i = 0; i < m_FixedData.m_ulMonsterWanted; i++)
{
@@ -448,8 +450,12 @@ namespace BrewMonster.Scripts.Task
break;
case TaskTemplConstants.TASK_SVR_NOTIFY_NEW:
var svr_new_task = new svr_new_task(pNotify);
if (svr_new_task.valid_size((int)sz) ) break;
var svr_new_task = GPDataTypeHelper.FromBytes<svr_new_task>(pBuf);
if (svr_new_task.valid_size((int)sz))
{
BMLogger.LogError($" [TASK_SVR_NOTIFY_NEW] the size of byte not meet !!!");
break;
}
pLst = pTask.GetActiveTaskList();
svr_new_task.get_data(
ref ulTime,
@@ -511,7 +517,7 @@ namespace BrewMonster.Scripts.Task
break;
case TaskTemplConstants.TASK_SVR_NOTIFY_COMPLETE:
var svr_task_complete = new svr_task_complete(pNotify);
var svr_task_complete = GPDataTypeHelper.FromBytes<svr_task_complete>(pBuf);
if (svr_task_complete.valid_size((int)sz)) break;
svr_task_complete.get_data(
ref ulTime,
@@ -587,7 +593,8 @@ namespace BrewMonster.Scripts.Task
task_notify_base notify = new task_notify_base();
notify.reason = uReason;
notify.task = uTaskID;
pTask.NotifyServer( ref notify, (uint)Marshal.SizeOf<task_notify_base>());
// pTask.NotifyServer( notify, (uint)Marshal.SizeOf<task_notify_base>());
pTask.NotifyServer( GPDataTypeHelper.ToBytes(notify), (uint)Marshal.SizeOf<task_notify_base>());
}
#else
// void NotifyClient (TaskInterface* pTask, const ActiveTaskEntry* pEntry, unsigned char uReason, unsigned long ulCurTime, unsigned long ulParam = 0, int dps = 0, int dph = 0) const;
@@ -777,9 +784,35 @@ namespace BrewMonster.Scripts.Task
// 检查任务栏容量与空间 // English: Check task list budget and space
public uint CheckBudget(ActiveTaskList pList)
{
// TODO: Convert full logic with TASK_HIDDEN_COUNT/TASK_TITLE_TASK_COUNT/TASK_ACTIVE_LIST_MAX_LEN and list counters when constants and fields are available
// 占位返回通过 // English: Placeholder pass
return 0u;
// Convert full logic with TASK_HIDDEN_COUNT/TASK_TITLE_TASK_COUNT/TASK_ACTIVE_LIST_MAX_LEN and list counters when constants and fields are available
// // 占位返回通过 // English: Placeholder pass
// return 0u;
var m_bHidden = m_FixedData.m_bHidden;
var m_bDisplayInTitleTaskUI = m_FixedData.m_bHidden;
var m_ID = m_FixedData.m_ID;
//
bool bReachLimit = false;
if (m_bHidden)
bReachLimit = pList.m_uTopHideTaskCount >= TASK_HIDDEN_COUNT;
else if (m_bDisplayInTitleTaskUI)
bReachLimit = bReachLimit || pList.m_uTitleTaskCount >= TASK_TITLE_TASK_COUNT;
else
bReachLimit = bReachLimit || pList.m_uTopShowTaskCount >= pList.GetMaxSimultaneousCount();
if (bReachLimit)
return TaskInterfaceConstants.TASK_PREREQU_FAIL_FULL;
// Check Task List Empty Space
if (pList.m_uUsedCount + m_uDepth > TaskInterfaceConstants.TASK_ACTIVE_LIST_MAX_LEN)
return TaskInterfaceConstants.TASK_PREREQU_FAIL_NO_SPACE;
// Ƿͬ
if (pList.GetEntry(m_ID) != null) return TaskInterfaceConstants.TASK_PREREQU_FAIL_SAME_TASK;
return 0;
}
// inline unsigned long ATaskTempl::CheckGivenItems(TaskInterface* pTask) const
@@ -1980,15 +2013,18 @@ namespace BrewMonster.Scripts.Task
switch (uReason)
{
case TaskTemplConstants.TASK_SVR_NOTIFY_PLAYER_KILLED:
var svr_player_killed = new svr_player_killed(pNotify);
var svr_player_killed = new svr_player_killed();
svr_player_killed.baseObj = pNotify;
svr_player_killed.player_num = pEntry.m_wMonsterNum[ulParam];
svr_player_killed.index = (ushort)ulParam;
sz = Marshal.SizeOf(svr_player_killed);
break;
case TaskTemplConstants.TASK_SVR_NOTIFY_MONSTER_KILLED:
{
var svrMonsterKilled = new svr_monster_killed(pNotify)
var svrMonsterKilled = new svr_monster_killed()
{
baseObj = pNotify,
monster_id = m_MonsterWanted[ulParam].m_ulMonsterTemplId,
monster_num = pEntry.m_wMonsterNum[ulParam],
dps = (dps != 0 && dph != 0) ? dps : 0,
@@ -2005,7 +2041,10 @@ namespace BrewMonster.Scripts.Task
// reinterpret_cast<unsigned long>(pEntry),
// *(reinterpret_cast<const task_sub_tags*>(ulParam))
// );
var svrNewTask = new svr_new_task(pNotify);
var svrNewTask = new svr_new_task
{
baseObj = pNotify,
};
svrNewTask.set_data(
ulCurTime,
pEntry.m_ID,
@@ -2020,7 +2059,10 @@ namespace BrewMonster.Scripts.Task
// *(reinterpret_cast<const task_sub_tags*>(ulParam))
// );
// sz = static_cast<svr_task_complete*>(pNotify)->get_size();
var svrTaskComplete = new svr_task_complete(pNotify);
var svrTaskComplete = new svr_task_complete
{
baseObj = pNotify,
};
svrTaskComplete.set_data(
ulCurTime,
Marshal.PtrToStructure<task_sub_tags>((IntPtr)ulParam)
@@ -2033,7 +2075,10 @@ namespace BrewMonster.Scripts.Task
sz = Marshal.SizeOf<task_notify_base>();
break;
case TaskTemplConstants.TASK_SVR_NOTIFY_ERROR_CODE:
var svrTaskErrCode = new svr_task_err_code(pNotify);
var svrTaskErrCode = new svr_task_err_code
{
baseObj = pNotify
};
svrTaskErrCode.err_code = ulParam;
sz = Marshal.SizeOf( svrTaskErrCode );
break;
@@ -1,4 +1,5 @@
using System;
using System.Linq;
using System.Runtime.InteropServices;
using CSNetwork.GPDataType;
@@ -38,57 +39,37 @@ namespace BrewMonster.Scripts.Task
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public class task_notify_base
public struct task_notify_base
{
public byte reason;
public ushort task;
};
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct cmd_task_notify
{
public uint size;
public byte placeholder; // Task data ...
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public class svr_monster_killed : task_notify_base
public struct svr_monster_killed
{
public task_notify_base baseObj;
public uint monster_id;
public ushort monster_num;
public int dps;
public int dph;
public svr_monster_killed(task_notify_base baseObj)
{
reason = baseObj.reason;
task = baseObj.task;
}
};
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public class svr_player_killed : task_notify_base
public struct svr_player_killed
{
public task_notify_base baseObj;
public ushort index;
public ushort player_num;
public svr_player_killed(task_notify_base baseObj)
{
reason = baseObj.reason;
task = baseObj.task;
}
};
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public class svr_task_err_code : task_notify_base
public struct svr_task_err_code
{
public task_notify_base baseObj;
public uint err_code;
public svr_task_err_code(task_notify_base baseObj)
{
reason = baseObj.reason;
task = baseObj.task;
}
};
[StructLayout(LayoutKind.Sequential, Pack = 1)]
@@ -106,8 +87,13 @@ namespace BrewMonster.Scripts.Task
// NOTE: union
[MarshalAs(UnmanagedType.ByValArray, SizeConst = TaskTemplConstants.TASK_STORAGE_COUNT)]
public ushort[] m_StoragesTaskSetCount;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = TaskTemplConstants.TASK_STORAGE_COUNT)]
public ushort[] m_StoragesRefreshCount;
// [MarshalAs(UnmanagedType.ByValArray, SizeConst = TaskTemplConstants.TASK_STORAGE_COUNT)]
public ushort[] m_StoragesRefreshCount
{
get => m_StoragesTaskSetCount;
set { m_StoragesTaskSetCount = value; }
}
[MarshalAs(UnmanagedType.ByValArray, SizeConst = TaskTemplConstants.TASK_STORAGE_COUNT)]
public uint[] m_StoragesRefreshTime;
@@ -146,7 +132,7 @@ namespace BrewMonster.Scripts.Task
for (int i=0; i < TaskTemplConstants.TASK_STORAGE_COUNT; i++)
{
m_StoragesTaskSetCount[i] = BitConverter.ToUInt16(data, offset + i * 2);
m_StoragesRefreshCount[i] = BitConverter.ToUInt16(data, offset + i * 2);
// m_StoragesRefreshCount[i] = BitConverter.ToUInt16(data, offset + i * 2);
}
offset += TaskTemplConstants.TASK_STORAGE_COUNT * 2;
@@ -163,20 +149,16 @@ namespace BrewMonster.Scripts.Task
}
}
public class svr_new_task : task_notify_base
[ StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct svr_new_task
{
public task_notify_base baseObj;
public uint cur_time;
public uint cap_task; // In C++ use to store ActiveTaskEntry pointer's address -> In C#, we just store the task ID
public task_sub_tags sub_tags;
// public ActiveTaskEntry cap_task_entry; //
public svr_new_task(task_notify_base baseObj)
{
reason = baseObj.reason;
task = baseObj.task;
}
public void set_data(
uint _cur_time,
uint _cap_task,
@@ -210,15 +192,12 @@ namespace BrewMonster.Scripts.Task
}
}
public class svr_treasure_map : task_notify_base
[ StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct svr_treasure_map
{
public task_notify_base baseObj;
public int treasure_index;
public svr_treasure_map(task_notify_base baseObj)
{
reason = baseObj.reason;
task = baseObj.task;
}
}
struct tm {
@@ -281,16 +260,13 @@ namespace BrewMonster.Scripts.Task
// }
}
}
public class svr_task_complete : task_notify_base
[ StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct svr_task_complete
{
public task_notify_base baseObj;
public uint cur_time;
public task_sub_tags sub_tags;
public svr_task_complete(task_notify_base baseObj)
{
reason = baseObj.reason;
task = baseObj.task;
}
public void set_data(
uint _cur_time,
@@ -330,15 +306,11 @@ namespace BrewMonster.Scripts.Task
};
[StructLayout( LayoutKind.Sequential, Pack = 1)]
public class svr_task_special_award : task_notify_base
public struct svr_task_special_award
{
public svr_task_complete baseObj;
public special_award sa;
public svr_task_special_award(task_notify_base baseObj)
{
reason = baseObj.reason;
task = baseObj.task;
}
};
[StructLayout(LayoutKind.Sequential, Pack = 1)]
+52 -47
View File
@@ -109,6 +109,11 @@ namespace BrewMonster.Scripts.Task
public const int TASK_STORAGE_COUNT = 32;
public const int TASK_STORAGE_LEN = 10;
public const int TASK_DEFAULT_MAX_SIMULTANEOUS_COUT = 20;
public const int TASK_MAX_SIMULTANEOUS_COUT = 30;
public const int TASK_HIDDEN_COUNT = 30; // formally 6, for test
public const int TASK_TITLE_TASK_COUNT = 10 ; // 锟狡猴拷锟斤拷锟斤拷锟斤拷锟斤拷
}
@@ -129,53 +134,53 @@ namespace BrewMonster.Scripts.Task
public short z;
}
public class ServerNotificationConstants
{
// 新任务发放 // New task issued
public const int TASK_SVR_NOTIFY_NEW = 1;
// 任务完毕 // Task completed
public const int TASK_SVR_NOTIFY_COMPLETE = 2;
// 任务放弃 // Task abandoned
public const int TASK_SVR_NOTIFY_GIVE_UP = 3;
// 杀怪数量 // Monster kill count
public const int TASK_SVR_NOTIFY_MONSTER_KILLED = 4;
// 处于得到奖励状态 // In reward receiving state
public const int TASK_SVR_NOTIFY_FINISHED = 5;
// 错误码 // Error code
public const int TASK_SVR_NOTIFY_ERROR_CODE = 6;
// 遗忘生活技能 // Forget life skill
public const int TASK_SVR_NOTIFY_FORGET_SKILL = 7;
// 动态任务时间标记 // Dynamic task time mark
public const int TASK_SVR_NOTIFY_DYN_TIME_MARK = 8;
// 动态任务数据 // Dynamic task data
public const int TASK_SVR_NOTIFY_DYN_DATA = 9;
// 特殊奖励信息 // Special reward info
public const int TASK_SVR_NOTIFY_SPECIAL_AWARD = 10;
// 仓库数据 // Storage data
public const int TASK_SVR_NOTIFY_STORAGE = 11;
// 显示全局变量 // Display global variables
public const int TASK_SVR_NOTIFY_DIS_GLOBAL_VAL = 12;
// 藏宝位置 // Treasure location
public const int TASK_SVR_NOTIFY_TREASURE_MAP = 13;
// 设置任务列表上限 // Set task list limit
public const int TASK_SVR_NOTIFY_SET_TASK_LIMIT = 14;
// 杀人数量 // Player kill count
public const int TASK_SVR_NOTIFY_PLAYER_KILLED = 15;
}
// public class ServerNotificationConstants
// {
// // 新任务发放 // New task issued
// public const int TASK_SVR_NOTIFY_NEW = 1;
//
// // 任务完毕 // Task completed
// public const int TASK_SVR_NOTIFY_COMPLETE = 2;
//
// // 任务放弃 // Task abandoned
// public const int TASK_SVR_NOTIFY_GIVE_UP = 3;
//
// // 杀怪数量 // Monster kill count
// public const int TASK_SVR_NOTIFY_MONSTER_KILLED = 4;
//
// // 处于得到奖励状态 // In reward receiving state
// public const int TASK_SVR_NOTIFY_FINISHED = 5;
//
// // 错误码 // Error code
// public const int TASK_SVR_NOTIFY_ERROR_CODE = 6;
//
// // 遗忘生活技能 // Forget life skill
// public const int TASK_SVR_NOTIFY_FORGET_SKILL = 7;
//
// // 动态任务时间标记 // Dynamic task time mark
// public const int TASK_SVR_NOTIFY_DYN_TIME_MARK = 8;
//
// // 动态任务数据 // Dynamic task data
// public const int TASK_SVR_NOTIFY_DYN_DATA = 9;
//
// // 特殊奖励信息 // Special reward info
// public const int TASK_SVR_NOTIFY_SPECIAL_AWARD = 10;
//
// // 仓库数据 // Storage data
// public const int TASK_SVR_NOTIFY_STORAGE = 11;
//
// // 显示全局变量 // Display global variables
// public const int TASK_SVR_NOTIFY_DIS_GLOBAL_VAL = 12;
//
// // 藏宝位置 // Treasure location
// public const int TASK_SVR_NOTIFY_TREASURE_MAP = 13;
//
// // 设置任务列表上限 // Set task list limit
// public const int TASK_SVR_NOTIFY_SET_TASK_LIMIT = 14;
//
// // 杀人数量 // Player kill count
// public const int TASK_SVR_NOTIFY_PLAYER_KILLED = 15;
// }
public class ClientNotificationConstants
{
+25 -1
View File
@@ -3,6 +3,8 @@ using System;
using System.IO;
using System.Reflection;
using System.Runtime.InteropServices;
using BrewMonster.Scripts.Task.UI;
using ModelRenderer.Scripts.Common;
using PerfectWorld.Scripts.Task;
using UnityEngine;
@@ -11,7 +13,8 @@ namespace BrewMonster.Scripts.Task
{
public class TaskTest : MonoSingleton<TaskTest>
{
public ATaskTemplMan m_pTaskMan;
public GameObject m_pTaskDlg;
public static ATaskTemplMan m_pTaskMan; // use static to store loaded data across instances
public bool WasLoadTaskData = false;
private void OnValidate()
@@ -19,6 +22,27 @@ namespace BrewMonster.Scripts.Task
WasLoadTaskData = m_pTaskMan != null && m_pTaskMan.TaskLoadedCount > 0;
}
private void Update()
{
#if UNITY_EDITOR
if (Input.GetKeyDown(KeyCode.Q))
{
m_pTaskDlg.SetActive(!m_pTaskDlg.activeInHierarchy);
}
#endif
}
[ContextMenu("Show Task Name")]
public void ShowTaskName()
{
var text01 = ByteToStringUtils.UshortArrayToUnicodeString(m_pTaskMan
.GetTaskTemplByID((uint)TaskTemplConstants.TASK_SPECIAL_AWARD[0]).m_FixedData.m_szName);
var text02 = ByteToStringUtils.UshortArrayToUnicodeString(m_pTaskMan
.GetTaskTemplByID((uint)TaskTemplConstants.TASK_SPECIAL_AWARD[1]).m_FixedData.m_szName);
Debug.Log($" Task Name 01: {text01} \n Task Name 02: {text02}");
}
[ContextMenu("Load Data")]
void LoadTaskData()
{
+11 -2
View File
@@ -29,7 +29,6 @@ namespace BrewMonster.Scripts.Task.UI
}
#endif
// Keep original macro as constant for array sizing
public const int CDLGTASK_AWARDITEM_MAX = 8;
@@ -133,6 +132,8 @@ namespace BrewMonster.Scripts.Task.UI
// [中文] 任务跟踪计时器
// [English] Task trace counter
private CECCounter m_TaskTraceCounter = new (); // CECCounter -> object placeholder
public static DlgTask Instance;
#region Unity METHODS
@@ -160,6 +161,11 @@ namespace BrewMonster.Scripts.Task.UI
Tick();
}
private void OnDestroy()
{
Instance = null;
}
#endregion
#region PUBLIC METHODS
@@ -605,7 +611,10 @@ namespace BrewMonster.Scripts.Task.UI
}
//
// //бɽѽ zhangyitian
// bool UpdateQuestView();
public bool UpdateQuestView()
{
return UpdateTask() && SearchForTask();
}
//
// bool IsPQTaskOrSubTask(int idTask);
// bool IsTreasureMapTask(int idTask);
@@ -6,6 +6,8 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using BrewMonster.Scripts.Task;
using BrewMonster.Scripts.Task.UI;
using UnityEngine;
namespace BrewMonster.UI
@@ -15,6 +17,7 @@ namespace BrewMonster.UI
DlgNPC m_pDlgNPC;
public NPC_ESSENCE? m_pCurNPCEssence;
public int m_idCurFinishTask = -1;
private DlgTask m_pDlgTask => DlgTask.Instance;
public static bool TALKPROC_IS_TERMINAL(uint id)
{
@@ -60,6 +63,46 @@ namespace BrewMonster.UI
EC_ManMessageMono.Instance.EC_ManPlayer.GetHostPlayer().EndNPCService();
}
public bool UpdateTask(uint idTask, int reason)
{
// TODO:
// CDlgTaskTrace* pDlg = dynamic_cast<CDlgTaskTrace*>(GetDialog("Win_QuestMinion"));
// if (pDlg) {
// pDlg->SetBtnUnTraceY(-1, 0);
// pDlg->UpdateContributionTask();
// if (reason == TASK_SVR_NOTIFY_NEW)
// pDlg->OnTaskNew(idTask);
// }
// TODO
// ´
// if (reason == TaskTemplConstants.TASK_SVR_NOTIFY_NEW)
// {
// m_pDlgQuestionTask.AddQuestionTask(idTask);
// }
// else if (reason == TaskTemplConstants.TASK_SVR_NOTIFY_COMPLETE || reason == TaskTemplConstants.TASK_SVR_NOTIFY_GIVE_UP)
// {
// m_pDlgQuestionTask.RemoveQuestionTask(idTask);
// }
if(reason == TaskTemplConstants.TASK_SVR_NOTIFY_STORAGE)
{
// TODO
// CDlgTaskList* pDlg = (CDlgTaskList*)GetDialog("Win_QuestList");
// if (pDlg && pDlg.IsShow())
// {
// // refresh data in OnShow()
// pDlg.RefreshTaskList();
// }
return true;
}
else
{
// zhangyitian 20140521
// ʱɽбҲҪ£˿ɽбµ
return m_pDlgTask.UpdateQuestView();
}
}
public DialogScriptTableObject GetDialogResource()
{
return m_dialogResouce;
+1 -1
View File
@@ -44,7 +44,7 @@ namespace BrewMonster
private void UpdateHostPlayerInfoUI(cmd_self_info_00 obj)
{
BMLogger.LogError("Update HUD Player Info");
// BMLogger.LogError("Update HUD Player Info");
healthText.text = $"{obj.iHP}/{obj.iMaxHP}";
manaText.text = $"{obj.iMP}/{obj.iMaxMP}";
expText.text = $"{((float)obj.iExp/neededExp)*100}%";
+4 -3
View File
@@ -9,11 +9,12 @@ namespace BrewMonster.PerfectWorld.Scripts.UI
public class UIPlayer : MonoBehaviour
{
public Image healthImage;
// public TextMeshProUGUI healthText;
public CECHostPlayer hostplayer;
// public TextMeshProUGUI healthText;
[Header("DEBUG")]
[SerializeField] private CECPlayer hostplayer;
private void Start()
{
hostplayer = GetComponentInParent<CECHostPlayer>();
hostplayer = GetComponentInParent<CECPlayer>();
if (hostplayer == null)
{
Debug.LogError("Host player not found");
+2 -2
View File
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:73d34a362e429fa75e583ca88989d3ab3d29f8d85bcdff8fa64582b7145930c2
size 530552564
oid sha256:94045fc7eb49643c229531f88aa7ac1d8a6f59d3e0d2bfb5a4939f9b3fb0ed04
size 200173095
File diff suppressed because it is too large Load Diff
-44
View File
@@ -1,44 +0,0 @@
using UnityEngine;
namespace BrewMonster.Scripts.Player
{
public class PlayerStateMachine
{
PlayerState _state;
CECHostPlayer _characterCtrl;
public PlayerState State { get => _state; }
public void InitState(PlayerState state)
{
if (_state != null)
{
Debug.LogWarning("_state is already inited");
return;
}
_state = state;
_state.Enter();
}
public void ChangeState(PlayerState state)
{
if (_state == null)
{
Debug.LogError("you need to init state first ");
return;
}
if (_state == state)
{
Debug.LogWarning("Unchanged state");
}
_state.Exit();
_state = state;
_state.Enter();
}
public void UpdateState()
{
_state.Update();
}
}
}
@@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: 99f098b6660da2c4f8ff06b5043a254b
-2
View File
@@ -1,7 +1,5 @@
using Animancer;
using BrewMonster;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
@@ -1,5 +1,4 @@
using BrewMonster;
using BrewMonster.Scripts.Player;
using UnityEngine;
#if ENABLE_INPUT_SYSTEM
using UnityEngine.InputSystem;
File diff suppressed because one or more lines are too long