Files
BepInEx/Projects/BanquetForFools/Source/Assembly-CSharp/WaterCollisions.cs
2025-05-21 20:40:04 +02:00

143 lines
4.9 KiB
C#

using System;
using Pathfinding;
using UnityEngine;
// Token: 0x02000057 RID: 87
public class WaterCollisions : MonoBehaviour
{
// Token: 0x06000B0F RID: 2831 RVA: 0x000DC56C File Offset: 0x000DA76C
private void Update()
{
if (Links.x.gaia.sceneLoaded && Links.x.gaia.pathfindingReady && this.character)
{
if (this.sliding)
{
Vector3 vector = Vector3.MoveTowards(this.character.tr.position, this.slidePoint, 12f * Time.deltaTime);
this.character.tr.position = vector;
if ((this.slidePoint - this.character.tr.position).sqrMagnitude < 0.25f)
{
this.slidePoint = Vector3.zero;
this.sliding = false;
}
}
bool flag = false;
bool flag2 = false;
GameObject gameObject = null;
RaycastHit raycastHit;
if (Physics.Raycast(this.character.tr.position + new Vector3(0f, 20f, 0f), Vector3.up * -1f, out raycastHit, 50f, 262144) && raycastHit.collider.gameObject != base.gameObject && raycastHit.collider.gameObject != Links.x.diorama.boatCollider)
{
flag = true;
gameObject = raycastHit.collider.gameObject;
}
if (!flag)
{
Vector3 position = this.character.tr.position;
position.y = Links.x.diorama.boatColliderY + 0.1f;
if (Physics.Raycast(position, Vector3.up, out raycastHit, 20f, 262144) && raycastHit.collider.gameObject != base.gameObject && raycastHit.collider.gameObject != Links.x.diorama.boatCollider)
{
flag2 = true;
gameObject = raycastHit.collider.gameObject;
}
}
if (flag || flag2)
{
if (!this.sliding)
{
this.Slide(gameObject);
}
this.character.meshAlwaysOff = true;
this.character.body.SetMeshState(false, true);
this.character.body.SeeThroughColliders(false);
}
else if (this.character.meshAlwaysOff)
{
this.character.meshAlwaysOff = false;
if (this.character.visible == 1)
{
this.character.body.SetMeshState(true, true);
}
this.character.body.SeeThroughColliders(true);
}
if (Links.x.gameplay.seconds > this.lastSplashTime + 4f)
{
if (this.character.moving || this.character.turning || this.character.IsAttacking(this.character.body.currentHash) || this.character.isHit)
{
this.character.PlaySplash();
this.lastSplashTime = Links.x.gameplay.seconds;
}
if (this.character.splash)
{
Vector3 position2 = this.character.tr.position;
position2.y = 20.2f;
this.character.splash.transform.position = position2;
}
}
}
}
// Token: 0x06000B10 RID: 2832 RVA: 0x000DC8C0 File Offset: 0x000DAAC0
private void OnCollisionEnter(Collision collision)
{
if (Links.x.gaia.sceneLoaded && Links.x.gaia.pathfindingReady)
{
GameObject gameObject = collision.gameObject;
if (gameObject.layer == 18 && (Time.timeSinceLevelLoad > this.timeSinceCollision + 0.15f || this.timeSinceCollision == 0f) && this.character && gameObject != Links.x.diorama.boatCollider && this.character.node != null)
{
this.Slide(gameObject);
}
}
}
// Token: 0x06000B11 RID: 2833 RVA: 0x000DC958 File Offset: 0x000DAB58
private void Slide(GameObject go)
{
Vector3 position = go.transform.position;
if (this.nodeConstraint == null)
{
this.nodeConstraint = new NNConstraint();
}
this.nodeConstraint.constrainToArea = (int)this.character.node.Area;
this.nodeConstraint.walkable = true;
this.nodeConstraint.constrainWalkability = true;
this.nodeConstraint.constrainTags = true;
this.nodeConstraint.checkCircleID = 0;
this.nodeConstraint.passID = this.character.nodeStationaryID;
this.nodeConstraint.passID2 = this.character.nodeMovingID;
this.nodeConstraint.constrainPenalty = 0;
this.nodeConstraint.checkConnections = this.character.ConnectionNumber();
this.nodeConstraint.constrainToEnvironment = 2;
GraphNode graphNode = this.character.node.ClosestConnection(this.character.node, this.character.nodeStationaryID, this.character.nodeMovingID, 225f, this.character.currentPosition + Quaternion.LookRotation(this.character.currentPosition - position) * Vector3.forward * 2.5f, 0, this.character.ConnectionNumber(), this.nodeConstraint, 0);
if (graphNode != null && graphNode != this.character.node && this.character.stats.Stuck() == 0 && ((Vector3)graphNode.position - this.character.tr.position).sqrMagnitude < 20f)
{
this.timeSinceCollision = Time.timeSinceLevelLoad;
this.sliding = true;
this.slidePoint = (Vector3)graphNode.position;
this.character.ClaimNode(graphNode, (Vector3)graphNode.position, false);
this.character.PlaySplash();
}
}
// Token: 0x06000B12 RID: 2834 RVA: 0x000DCB4B File Offset: 0x000DAD4B
private void HitFX()
{
}
// Token: 0x04000FFB RID: 4091
public Character character;
// Token: 0x04000FFC RID: 4092
private float timeSinceCollision;
// Token: 0x04000FFD RID: 4093
private NNConstraint nodeConstraint;
// Token: 0x04000FFE RID: 4094
public bool sliding;
// Token: 0x04000FFF RID: 4095
public Vector3 slidePoint;
// Token: 0x04001000 RID: 4096
private float lastSplashTime;
}