fix: update logic move.
This commit is contained in:
@@ -116,7 +116,6 @@ namespace BrewMonster.Scripts
|
||||
m_pHost.PlayAction((int)PLAYER_ACTION_TYPE.ACT_TAKEOFF);
|
||||
else
|
||||
{
|
||||
Debug.LogError("(int)PLAYER_ACTION_TYPE.ACT_TAKEOFF_SWORD");
|
||||
m_pHost.PlayAction((int)PLAYER_ACTION_TYPE.ACT_TAKEOFF_SWORD);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -139,7 +139,6 @@ namespace BrewMonster.Scripts
|
||||
public override bool Tick(float dwDeltaTime)
|
||||
{
|
||||
base.Tick(dwDeltaTime);
|
||||
|
||||
int iMoveReason = ShouldMove();
|
||||
if (iMoveReason != 0)
|
||||
{
|
||||
|
||||
@@ -219,7 +219,7 @@ namespace BrewMonster
|
||||
Vector3 vDelta = vDest - vStart;
|
||||
|
||||
const int allLayers = -1;
|
||||
if (Physics.RaycastNonAlloc(ray, hits, Mathf.Infinity, allLayers) > 0)
|
||||
if (Physics.RaycastNonAlloc(ray, hits, maxDistance: 1000f, allLayers) > 0)
|
||||
{
|
||||
int hostCid = GetCharacterID();
|
||||
CECObject clickedObject = null;
|
||||
|
||||
@@ -1,14 +1,9 @@
|
||||
using BrewMonster.Network;
|
||||
using BrewMonster.Scripts;
|
||||
using BrewMonster.Scripts.Ornament;
|
||||
using BrewMonster.Scripts.World;
|
||||
using CSNetwork.GPDataType;
|
||||
using System;
|
||||
using System.Reflection;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using static BrewMonster.CECHostMove;
|
||||
using static System.Net.Mime.MediaTypeNames;
|
||||
using WORD = System.UInt16;
|
||||
|
||||
namespace BrewMonster
|
||||
@@ -159,7 +154,7 @@ namespace BrewMonster
|
||||
vTerStart.y = fHitsTerrain[0].point.y;
|
||||
}
|
||||
}
|
||||
fHitsTerrain = new RaycastHit[5];
|
||||
|
||||
countHits = Physics.RaycastNonAlloc(vTerStart, dir.normalized, fHitsTerrain, vDelta.magnitude, TerrainMask);
|
||||
if ((countHits > 0 && Vector3.Distance(vTerStart, fHitsTerrain[0].point) > 0.0009f))
|
||||
{
|
||||
@@ -194,13 +189,13 @@ namespace BrewMonster
|
||||
else
|
||||
{
|
||||
float h0 = 0f;
|
||||
int countHits0 = Physics.RaycastNonAlloc(vWatStart + Vector3.up * 500f, Vector3.down, fHitsWater, 1000f, WaterMask);
|
||||
int countHits0 = Physics.RaycastNonAlloc(vWatStart + Vector3.up * 500f, Vector3.down, fHitsWater, maxDistance: 1000f, WaterMask);
|
||||
if (countHits0 > 0)
|
||||
{
|
||||
h0 = fHitsWater[0].point.y;
|
||||
}
|
||||
float h1 = 0f;
|
||||
countHits0 = Physics.RaycastNonAlloc((vWatStart + vDelta) + Vector3.up * 500f, Vector3.down, fHitsWater, 1000f, WaterMask);
|
||||
countHits0 = Physics.RaycastNonAlloc((vWatStart + vDelta) + Vector3.up * 500f, Vector3.down, fHitsWater, maxDistance: 1000f, WaterMask);
|
||||
if(countHits0 > 0)
|
||||
{
|
||||
h1 = fHitsWater[0].point.y;
|
||||
@@ -251,8 +246,21 @@ namespace BrewMonster
|
||||
int countHits = Physics.RaycastNonAlloc(origin, Vector3.down, hits, dist, mask);
|
||||
if (countHits > 0)
|
||||
{
|
||||
vHitNormal = hits[0].normal;
|
||||
vEnd = new Vector3(vStart.x, hits[0].point.y + vExt.y, vStart.z);
|
||||
float minDistance = 100f;
|
||||
int idx = 0;
|
||||
for (int i = 0; i < countHits; i++)
|
||||
{
|
||||
if (hits[i].collider != null && hits[i].distance > 0f)
|
||||
{
|
||||
if(hits[i].distance < minDistance)
|
||||
{
|
||||
minDistance = hits[i].distance;
|
||||
idx = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
vHitNormal = hits[idx].normal;
|
||||
vEnd = new Vector3(vStart.x, hits[idx].point.y + vExt.y, vStart.z);
|
||||
bSupport = (vHitNormal.y >= 0f);
|
||||
return true;
|
||||
}
|
||||
@@ -563,7 +571,6 @@ namespace BrewMonster
|
||||
{
|
||||
//a_LogOutput(1, "bClear = true");
|
||||
vFinalPos = vStart + vDelta;
|
||||
Debug.LogError("bClear = true " + vFinalPos);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -582,7 +589,6 @@ namespace BrewMonster
|
||||
tmpInfo.vTerStart = vStart;
|
||||
tmpInfo.vTerStart.y -= vExt.y;
|
||||
//bPull = !CollideWithEnv(ref tmpInfo);
|
||||
Debug.LogError("CheckFootStepUp");
|
||||
bPull = !CheckFootStepUp(tmpInfo);
|
||||
|
||||
//int count1 = Physics.RaycastNonAlloc(EC_Utility.ToVector3(tmpInfo.vStart), EC_Utility.ToVector3(tmpInfo.vDelta).normalized, hits, EC_Utility.ToVector3(tmpInfo.vDelta).magnitude, BrushMask | TerrainMask);
|
||||
@@ -699,7 +705,6 @@ namespace BrewMonster
|
||||
if (groundTrc.bSupport)
|
||||
{
|
||||
vFinalPos = groundTrc.vEnd;
|
||||
Debug.LogError("vFinalPos = " + vFinalPos);
|
||||
if (!bJump)
|
||||
{
|
||||
vTPNormal = groundTrc.vHitNormal;
|
||||
@@ -725,7 +730,6 @@ namespace BrewMonster
|
||||
Vector3 vDelta = EC_Utility.ToVector3(pEnvTrc.vDelta);
|
||||
Vector3 dir = vDelta;
|
||||
int countHits = 0;
|
||||
float num = 10f;
|
||||
countHits = Physics.BoxCastNonAlloc(vStart, vExt, dir.normalized, hits, Quaternion.identity, vDelta.magnitude, BrushMask);
|
||||
if (countHits > 0)
|
||||
{
|
||||
@@ -770,8 +774,6 @@ namespace BrewMonster
|
||||
return false;
|
||||
}
|
||||
pTrc.vEnd = trcInfo.vStart + trcInfo.vDelta * trcInfo.fFraction;
|
||||
if(check)
|
||||
Debug.LogError("trcInfo.fFraction = " + trcInfo.fFraction + " trcInfo.vStart = " + trcInfo.vStart + " pTrc.vEnd = " + pTrc.vEnd);
|
||||
pTrc.vEnd.y = hitPoint.y + pTrc.vExt.y + 0.1f;
|
||||
//if((pTrc.vEnd.y + 0.17f) < (hitPoint.y + pTrc.vExt.y + 0.1f))
|
||||
//{
|
||||
@@ -813,19 +815,26 @@ namespace BrewMonster
|
||||
{
|
||||
vPosOnSurface = vPos;
|
||||
int countHits = 0;
|
||||
countHits = Physics.RaycastNonAlloc(EC_Utility.ToVector3(vPosOnSurface), Vector3.down, fHitsTerrain,maxDistance: 1000f, TerrainMask);
|
||||
countHits = Physics.RaycastNonAlloc(EC_Utility.ToVector3(vPosOnSurface), Vector3.down, fHitsTerrain, maxDistance: 1000f, TerrainMask);
|
||||
if (countHits > 0)
|
||||
{
|
||||
System.Array.Sort(fHitsTerrain, 0, fHitsTerrain.Length, raycastHitDistanceComparer);
|
||||
for(int i = 0; i < fHitsTerrain.Length; i++)
|
||||
int idx = 0;
|
||||
float maxDistance = 100f;
|
||||
//System.Array.Sort(fHitsTerrain, 0, fHitsTerrain.Length, raycastHitDistanceComparer);
|
||||
for (int i = 0; i < countHits; i++)
|
||||
{
|
||||
if (fHitsTerrain[i].distance > 0.0009f)
|
||||
if (fHitsTerrain[i].collider != null && fHitsTerrain[i].distance > 0f)
|
||||
{
|
||||
vPosOnSurface.y = fHitsTerrain[i].point.y;
|
||||
vNormal = EC_Utility.ToA3DVECTOR3(fHitsTerrain[i].normal);
|
||||
return;
|
||||
if(fHitsTerrain[i].distance < maxDistance)
|
||||
{
|
||||
maxDistance = fHitsTerrain[i].distance;
|
||||
idx = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
vPosOnSurface.y = fHitsTerrain[idx].point.y;
|
||||
vNormal = EC_Utility.ToA3DVECTOR3(fHitsTerrain[idx].normal);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1027,28 +1036,36 @@ namespace BrewMonster
|
||||
Vector3 vDelta = EC_Utility.ToVector3(brushTraceInfo.vDelta);
|
||||
Vector3 dir = vDelta;
|
||||
int countHits = 0;
|
||||
float num = 10f;
|
||||
//Quaternion quaternion = EC_Game.GetGameRun().GetWorld().GetPlayerMan().GetHostPlayer().transform.rotation;
|
||||
Vector3[] arrVExt = new Vector3[5] {
|
||||
vExt
|
||||
,new Vector3(vExt.x / num, vExt.y, vExt.z),
|
||||
new Vector3(vExt.x, vExt.y / num, vExt.z),
|
||||
new Vector3(vExt.x, vExt.y, vExt.z / num),
|
||||
vExt / num
|
||||
};
|
||||
for (int i = 0; i < arrVExt.Length; i++)
|
||||
float fFraction = 100f;
|
||||
Vector3 normal = Vector3.zero;
|
||||
Vector3 hitP = Vector3.zero;
|
||||
countHits = Physics.BoxCastNonAlloc(vStart, vExt, dir.normalized, hits, Quaternion.identity, vDelta.magnitude, BrushMask);
|
||||
for (int i = 0; i < countHits; i++)
|
||||
{
|
||||
countHits = Physics.BoxCastNonAlloc(vStart, arrVExt[i], dir.normalized, hits, Quaternion.identity, vDelta.magnitude, BrushMask);
|
||||
if (countHits > 0)
|
||||
if (hits[i].collider != null && hits[i].distance > 0f)
|
||||
{
|
||||
if(hits[0].distance > 0.0009f)
|
||||
float value = (hits[i].distance) / vDelta.magnitude;
|
||||
if (value < fFraction)
|
||||
{
|
||||
brushTraceInfo.fFraction = (hits[0].distance) / vDelta.magnitude;
|
||||
brushTraceInfo.normal = EC_Utility.ToA3DVECTOR3(hits[0].normal);
|
||||
return true;
|
||||
fFraction = value;
|
||||
normal = hits[i].normal;
|
||||
hitP = hits[i].point;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (fFraction < 100f)
|
||||
{
|
||||
if (fFraction > 0f && fFraction <= 1f)
|
||||
{
|
||||
brushTraceInfo.fFraction = fFraction;
|
||||
brushTraceInfo.normal = EC_Utility.ToA3DVECTOR3(normal);
|
||||
}
|
||||
if (Math.Abs(fFraction - 0f) < float.Epsilon)
|
||||
{
|
||||
brushTraceInfo.bStartSolid = true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
brushTraceInfo.normal = new A3DVECTOR3(0f);
|
||||
brushTraceInfo.fFraction = 100f;
|
||||
return false;
|
||||
@@ -1061,42 +1078,40 @@ namespace BrewMonster
|
||||
Vector3 vDelta = EC_Utility.ToVector3(brushTraceInfo.vDelta);
|
||||
Vector3 dir = vDelta;
|
||||
int countHits = 0;
|
||||
float num = 10f;
|
||||
float fFraction = 100f;
|
||||
Vector3 normal = Vector3.zero;
|
||||
Vector3 hitP = Vector3.zero;
|
||||
countHits = Physics.BoxCastNonAlloc(vStart, vExt, dir.normalized, hits, Quaternion.identity, vDelta.magnitude, BrushMask);
|
||||
if (countHits > 0)
|
||||
for (int i = 0; i < countHits; i++)
|
||||
{
|
||||
System.Array.Sort(hits, 0, hits.Length, raycastHitDistanceComparer);
|
||||
if (check)
|
||||
if (hits[i].collider != null && hits[i].distance > 0f)
|
||||
{
|
||||
BoxCastDrawer.Draw(vStart, vExt, vDelta.normalized,
|
||||
Quaternion.identity, vDelta.magnitude, hits, 1, Color.green, 10f);
|
||||
float value = (hits[i].distance) / vDelta.magnitude;
|
||||
if(value < fFraction)
|
||||
{
|
||||
fFraction = value;
|
||||
normal = hits[i].normal;
|
||||
hitP = hits[i].point;
|
||||
}
|
||||
}
|
||||
if (check)
|
||||
}
|
||||
if(fFraction < 100f)
|
||||
{
|
||||
if(fFraction > 0f && fFraction <= 1f)
|
||||
{
|
||||
Debug.LogError("AABBCollideWithBrush pos = " + hits[0].point + " name = " + hits[0].collider.name);
|
||||
brushTraceInfo.fFraction = fFraction;
|
||||
brushTraceInfo.normal = EC_Utility.ToA3DVECTOR3(normal);
|
||||
hitPoint = hitP;
|
||||
}
|
||||
if (Math.Abs(hits[0].distance - 0f) < float.Epsilon)
|
||||
if (Math.Abs(fFraction - 0f) < float.Epsilon)
|
||||
{
|
||||
brushTraceInfo.bStartSolid = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
brushTraceInfo.fFraction = (hits[0].distance) / vDelta.magnitude;
|
||||
brushTraceInfo.normal = EC_Utility.ToA3DVECTOR3(hits[0].normal);
|
||||
hitPoint = hits[0].point;
|
||||
if (check)
|
||||
{
|
||||
Debug.LogError("AABBCollideWithBrush true pos = " + hits[0].point);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
brushTraceInfo.normal = new A3DVECTOR3(0f);
|
||||
brushTraceInfo.fFraction = 100f;
|
||||
if (check)
|
||||
{
|
||||
Debug.LogError("AABBCollideWithBrush false = ");
|
||||
}
|
||||
hitPoint = Vector3.zero;
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1209,7 +1224,7 @@ namespace BrewMonster
|
||||
awmInfo.bMeetHeightThresh = true;
|
||||
|
||||
float fHWater = 0f;
|
||||
int countHits0 = Physics.RaycastNonAlloc(EC_Utility.ToVector3(vFinalPos) + Vector3.up * 500f, Vector3.down, fHitsWater, 1000f, 1 << 8);
|
||||
int countHits0 = Physics.RaycastNonAlloc(EC_Utility.ToVector3(vFinalPos) + Vector3.up * 500f, Vector3.down, fHitsWater, maxDistance: 1000f, WaterMask);
|
||||
if (countHits0 > 0)
|
||||
{
|
||||
fHWater = fHitsWater[0].point.y;
|
||||
@@ -1321,7 +1336,7 @@ namespace BrewMonster
|
||||
{//rescue from solid
|
||||
//@note : it may cause some problems. By Kuiwu[11/10/2005]
|
||||
float fHWater = 0f;
|
||||
int countHits0 = Physics.RaycastNonAlloc(EC_Utility.ToVector3(vStart) + Vector3.up * 500f, Vector3.down, fHitsWater, 1000f, 1 << 8);
|
||||
int countHits0 = Physics.RaycastNonAlloc(EC_Utility.ToVector3(vStart) + Vector3.up * 500f, Vector3.down, fHitsWater, maxDistance: 1000f, WaterMask);
|
||||
if(countHits0 > 0)
|
||||
{
|
||||
fHWater = fHitsWater[0].point.y;
|
||||
@@ -1374,7 +1389,7 @@ namespace BrewMonster
|
||||
if (bAdjust && (vOverTp.y + awmInfo.fHeightThresh > vFinalPos.y))
|
||||
{
|
||||
float fHWater = 0f;
|
||||
int countHits = Physics.RaycastNonAlloc(EC_Utility.ToVector3(vFinalPos), Vector3.down, fHitsWater, 1000f, 1 << 8);
|
||||
int countHits = Physics.RaycastNonAlloc(EC_Utility.ToVector3(vFinalPos), Vector3.down, fHitsWater, maxDistance: 1000f, WaterMask);
|
||||
if (countHits > 0)
|
||||
{
|
||||
fHWater = fHitsWater[0].point.y;
|
||||
|
||||
@@ -213,7 +213,7 @@ namespace BrewMonster
|
||||
// 注意:暂时跳过地形高度检查,因为它需要世界访问
|
||||
A3DVECTOR3 vNormal = new A3DVECTOR3();
|
||||
float vTerrainHeight = vPos.y;
|
||||
if (Physics.RaycastNonAlloc(vPos, (Vector3.down), hits, 1000f, 1 << 6) > 0)
|
||||
if (Physics.RaycastNonAlloc(vPos, (Vector3.down), hits, maxDistance: 1000f, EC_CDR.TerrainMask) > 0)
|
||||
{
|
||||
vTerrainHeight = hits[0].point.y;
|
||||
vNormal = EC_Utility.ToA3DVECTOR3(hits[0].normal);
|
||||
|
||||
@@ -1390,9 +1390,9 @@ namespace BrewMonster
|
||||
m_CDRInfo.vExtent = m_aabbServer.Extents;
|
||||
Vector3 pStart = pos;
|
||||
pos.y += m_CDRInfo.vExtent.y;
|
||||
if (Physics.RaycastNonAlloc(pos, Vector3.down, hits, m_CDRInfo.vExtent.y, 1 << 6) > 0)
|
||||
if (Physics.RaycastNonAlloc(pos, Vector3.down, hits, m_CDRInfo.vExtent.y, EC_CDR.TerrainMask) > 0)
|
||||
{
|
||||
System.Array.Sort(hits, 0, hits.Length, raycastHitDistanceComparer);
|
||||
//System.Array.Sort(hits, 0, hits.Length, raycastHitDistanceComparer);
|
||||
m_CDRInfo.vTPNormal = EC_Utility.ToA3DVECTOR3(hits[0].normal);
|
||||
}
|
||||
else
|
||||
@@ -1799,14 +1799,14 @@ namespace BrewMonster
|
||||
float fTerrainHeight = 0f;
|
||||
if (Physics.RaycastNonAlloc(startPoint, dir, hits, layerGround) > 0)
|
||||
{
|
||||
System.Array.Sort(hits, 0, hits.Length, raycastHitDistanceComparer);
|
||||
//System.Array.Sort(hits, 0, hits.Length, raycastHitDistanceComparer);
|
||||
fTerrainHeight = Vector3.Distance(hits[0].point, startPoint);
|
||||
}
|
||||
|
||||
float fWaterHeight = 0f;
|
||||
if (Physics.RaycastNonAlloc(startPoint, dir, hits, layerWater) > 0)
|
||||
{
|
||||
System.Array.Sort(hits, 0, hits.Length, raycastHitDistanceComparer);
|
||||
//System.Array.Sort(hits, 0, hits.Length, raycastHitDistanceComparer);
|
||||
fWaterHeight = Vector3.Distance(hits[0].point, startPoint);
|
||||
}
|
||||
|
||||
@@ -2459,10 +2459,10 @@ namespace BrewMonster
|
||||
|
||||
A3DVECTOR3 vPos = GetPos();
|
||||
float h0 = 0f;
|
||||
int countHits0 = Physics.RaycastNonAlloc(EC_Utility.ToVector3(vPos) + Vector3.up * 500f, Vector3.down, hits, 1000f, 1 << 8);
|
||||
int countHits0 = Physics.RaycastNonAlloc(EC_Utility.ToVector3(vPos) + Vector3.up * 500f, Vector3.down, hits, maxDistance: 1000f, EC_CDR.WaterMask);
|
||||
if (countHits0 > 0)
|
||||
{
|
||||
System.Array.Sort(hits, 0, hits.Length, raycastHitDistanceComparer);
|
||||
//System.Array.Sort(hits, 0, hits.Length, raycastHitDistanceComparer);
|
||||
h0 = hits[0].point.y;
|
||||
}
|
||||
if (vPos.y < h0 - m_MoveConst.fShoreDepth)
|
||||
@@ -3184,7 +3184,7 @@ namespace BrewMonster
|
||||
VertRayTrace(EC_Utility.ToVector3(vTestPos), ref vGndPos, ref m_GndInfo.vGndNormal, 1000f);
|
||||
m_GndInfo.fGndHei = vGndPos.y;
|
||||
|
||||
if (Physics.RaycastNonAlloc(EC_Utility.ToVector3(vTestPos) + Vector3.up * 500f, Vector3.down, hits, 1000f, 1 << 8) > 0)
|
||||
if (Physics.RaycastNonAlloc(EC_Utility.ToVector3(vTestPos) + Vector3.up * 500f, Vector3.down, hits, maxDistance: 1000f, EC_CDR.WaterMask) > 0)
|
||||
{
|
||||
System.Array.Sort(hits, 0, hits.Length, raycastHitDistanceComparer);
|
||||
m_GndInfo.fWaterHei = hits[0].point.y;
|
||||
@@ -3286,9 +3286,10 @@ namespace BrewMonster
|
||||
|
||||
LayerMask layerMaskTerrain = 1 << 6;
|
||||
LayerMask layerMaskBush = 1 << 7;
|
||||
if (Physics.RaycastNonAlloc(vPos, (Vector3.down), hits, 1000f, layerMaskTerrain) > 0 /*&& hits[0].distance > 0.0009f*/)
|
||||
|
||||
if (Physics.RaycastNonAlloc(vPos, (Vector3.down), hits, maxDistance: 1000f, layerMaskTerrain) > 0 /*&& hits[0].distance > 0.0009f*/)
|
||||
{
|
||||
System.Array.Sort(hits, 0, hits.Length, raycastHitDistanceComparer);
|
||||
//System.Array.Sort(hits, 0, hits.Length, raycastHitDistanceComparer);
|
||||
vTerrainPos = hits[0].point;
|
||||
vTerrainNormal = hits[0].normal;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user