Made sense of the jumps for UGBaseState

This commit is contained in:
SaltContainer
2026-05-25 22:27:58 -04:00
parent fd51ddefb3
commit 97ad73637f
2 changed files with 189 additions and 71 deletions
+66 -67
View File
@@ -22,7 +22,6 @@ namespace Dpr.Field.Walking
rotSpeed = Random.Range(0.5f, 1.0f);
}
// TODO: holy jumps
protected override void StateUpdate()
{
if (!model.transform.gameObject.activeInHierarchy)
@@ -49,13 +48,35 @@ namespace Dpr.Field.Walking
if (CheckArrive())
{
changeTargetTime = 0.0f;
// goto LAB_7101ce3b78;
waitTime = Random.Range(1.0f, 8.0f);
colideStopCount++;
if (collisionCount < 2)
{
NextMovePoint = GetRandomPoint(model.moveType);
if (waitTime < 0.0f)
{
walkData.isNeedRun = false;
Move(2.0f);
}
else
{
walkData.nowSpeed = 0.0f;
}
}
else
{
NextMovePoint = model.transform.position - model.transform.forward;
walkData.nowSpeed = 0.0f;
}
}
else
{
if (oldChangeTargetTime > 10.0f || collisionCount > 1)
{
if (oldChangeTargetTime > 10.0f)
if (oldChangeTargetTime > 10.0f || (collisionCount < 2 && Random.Range(0, 2) != 0))
{
if (waitTime < 0.0f)
{
@@ -66,79 +87,57 @@ namespace Dpr.Field.Walking
NextMovePoint = GetRandomPoint(model.moveType);
}
// goto LAB_7101ce3d88;
}
else
{
if (collisionCount < 2)
{
if (Random.Range(0, 2) != 0)
{
if (waitTime < 0.0f)
{
rotSpeed = Random.Range(1.0f, 2.0f);
colideStopCount = 0;
waitTime = -1.0f;
changeTargetTime = 0.0f;
NextMovePoint = GetRandomPoint(model.moveType);
}
// goto LAB_7101ce3d88;
}
}
// LAB_7101ce3b78
waitTime = Random.Range(1.0f, 8.0f);
colideStopCount++;
var ugModel = model;
if (collisionCount < 2)
{
NextMovePoint = GetRandomPoint(ugModel.moveType);
// goto joined_r0x007101ce3e00;
if (waitTime < 0.0f)
{
walkData.isNeedRun = false;
Move(2.0f);
if (waitTime < 4.0f)
LookAtTarget(NextMovePoint, rotSpeed);
}
}
else
{
NextMovePoint = ugModel.transform.position - model.transform.forward;
}
}
walkData.nowSpeed = 0.0f;
if (waitTime < 4.0f)
LookAtTarget(NextMovePoint, rotSpeed);
}
else
{
if (collisionCount < 2)
{
if (waitTime < 0.0f)
if (collisionCount < 2 && waitTime < 0.0f)
{
walkData.isNeedRun = false;
Move(2.0f);
}
else
{
walkData.nowSpeed = 0.0f;
}
}
else
{
waitTime = Random.Range(1.0f, 8.0f);
colideStopCount++;
if (collisionCount < 2)
{
NextMovePoint = GetRandomPoint(model.moveType);
if (waitTime < 0.0f)
{
walkData.isNeedRun = false;
Move(2.0f);
}
else
{
walkData.nowSpeed = 0.0f;
}
}
else
{
walkData.nowSpeed = 0.0f;
}
if (waitTime < 4.0f)
LookAtTarget(NextMovePoint, rotSpeed);
NextMovePoint = model.transform.position - model.transform.forward;
walkData.nowSpeed = 0.0f;
}
}
}
else
{
if (collisionCount < 2 && waitTime < 0.0f)
{
walkData.isNeedRun = false;
Move(2.0f);
}
else
{
walkData.nowSpeed = 0.0f;
}
}
}
if (waitTime < 4.0f)
LookAtTarget(NextMovePoint, rotSpeed);
}
protected void Move(float speed, float otherDist = 0.0f)
+123 -4
View File
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
public class PokemonMaskController
@@ -19,11 +20,129 @@ public class PokemonMaskController
return Array.IndexOf(_stencilEntries, false);
}
// TODO
public static void Register(BaseEntity baseEntity) { }
public static void Register(BaseEntity baseEntity)
{
if (baseEntity == null)
return;
// TODO
public static void Unregister(BaseEntity baseEntity) { }
var nextEntryIndex = Array.IndexOf(_stencilEntries, false);
if (_maskGroups.TryGetValue(baseEntity, out _))
return;
var entityName = baseEntity.entityEname;
var isGastly = entityName.IndexOf("092") > -1;
var isRotom = entityName.IndexOf("0479") > -1;
var meshes = baseEntity.GetComponentsInChildren<SkinnedMeshRenderer>()
.Where(__ => __ != null && __.sharedMaterials != null && __.sharedMaterials.Any(x =>
{
var shader = x.shader;
if (shader == null)
return false;
if (shader.name.IndexOf("Core") > -1 ||
shader.name.IndexOf("Mask") > -1 ||
shader.name.IndexOf("PetrifyFire") > -1)
return true;
return (isGastly || isRotom) &&
(shader.name.IndexOf("Bump") > -1 ||
shader.name.IndexOf("Petrify") > -1);
}));
var meshesMask = new List<SkinnedMeshRenderer>();
var meshesCoreOrPetrify = new List<SkinnedMeshRenderer>();
var meshesNeither = new List<SkinnedMeshRenderer>();
foreach (var mesh in meshes)
{
var mats = mesh.materials;
for (int i=0; i<mats.Length; i++)
{
var mat = mats[i];
var shader = mat.shader;
if (shader == null)
continue;
var coreOrPetrifyFireShader = shader.name.IndexOf("Core") > -1 || shader.name.IndexOf("PetrifyFire") > -1;
var maskShader = shader.name.IndexOf("Mask") > -1;
if (!coreOrPetrifyFireShader && !maskShader)
{
mat.SetInt(POKEMON_STENCIL_ID, nextEntryIndex + 136);
mat.SetInt(STENCIL_OP_ID, 2);
meshesNeither.Add(mesh);
}
else if (maskShader)
{
mat.SetInt(ZWRITE_ID, 1);
mat.renderQueue = 2451;
meshesMask.Add(mesh);
mat.SetInt(STENCIL_ID, nextEntryIndex + START_STENCIL_ID);
}
else
{
if (coreOrPetrifyFireShader)
{
if (isGastly)
mat.SetInt(ZTEST_ID, 5);
mat.SetInt(ZWRITE_ID, 0);
mat.renderQueue = 2500;
meshesCoreOrPetrify.Add(mesh);
}
mat.SetInt(STENCIL_ID, nextEntryIndex + START_STENCIL_ID);
}
}
}
if (meshesMask.Count != 0 && meshesCoreOrPetrify.Count != 0)
{
_stencilEntries[nextEntryIndex] = true;
_maskGroups.Add(baseEntity, new MaskAndCore()
{
entryIndex = nextEntryIndex,
mask = meshesMask.ToArray(),
core = meshesCoreOrPetrify.ToArray(),
other = meshesNeither.ToArray(),
});
}
}
public static void Unregister(BaseEntity baseEntity)
{
if (!_maskGroups.TryGetValue(baseEntity, out MaskAndCore maskAndCore))
return;
for (int i=0; i<maskAndCore.mask.Length; i++)
{
var mats = maskAndCore.mask[i].materials;
for (int j=0; j<mats.Length; j++)
UnityEngine.Object.DestroyImmediate(mats[j]);
}
for (int i=0; i<maskAndCore.core.Length; i++)
{
var mats = maskAndCore.core[i].materials;
for (int j=0; j<mats.Length; j++)
UnityEngine.Object.DestroyImmediate(mats[j]);
}
for (int i=0; i<maskAndCore.other.Length; i++)
{
var mats = maskAndCore.other[i].materials;
for (int j=0; j<mats.Length; j++)
UnityEngine.Object.DestroyImmediate(mats[j]);
}
_stencilEntries[maskAndCore.entryIndex] = false;
_maskGroups.Remove(baseEntity);
}
private struct MaskAndCore
{