274 lines
6.7 KiB
C#
274 lines
6.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
// Token: 0x02000009 RID: 9
|
|
public class ShadowCaster : MonoBehaviour
|
|
{
|
|
// Token: 0x06000078 RID: 120 RVA: 0x0000B76F File Offset: 0x0000996F
|
|
private void OnEnable()
|
|
{
|
|
this.UpdateResources();
|
|
}
|
|
|
|
// Token: 0x06000079 RID: 121 RVA: 0x0000B777 File Offset: 0x00009977
|
|
private void OnValidate()
|
|
{
|
|
this.UpdateResources();
|
|
}
|
|
|
|
// Token: 0x0600007A RID: 122 RVA: 0x0000B780 File Offset: 0x00009980
|
|
private void UpdateResources()
|
|
{
|
|
if (this.cam == null)
|
|
{
|
|
this.cam = base.GetComponent<Camera>();
|
|
this.cam.depth = -10f;
|
|
}
|
|
if (this.depthTarget == null || this.depthTarget.width != this.targetSize)
|
|
{
|
|
int num = Mathf.Max(this.targetSize, 16);
|
|
if (this.depthTarget != null)
|
|
{
|
|
this.depthTarget.Release();
|
|
}
|
|
this.depthTarget = new RenderTexture(num, num, 16, RenderTextureFormat.Depth, RenderTextureReadWrite.Default);
|
|
this.depthTarget.wrapMode = TextureWrapMode.Clamp;
|
|
this.depthTarget.filterMode = FilterMode.Bilinear;
|
|
this.depthTarget.autoGenerateMips = false;
|
|
this.depthTarget.useMipMap = false;
|
|
this.cam.targetTexture = this.depthTarget;
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600007B RID: 123 RVA: 0x0000B854 File Offset: 0x00009A54
|
|
public void OnPreRender()
|
|
{
|
|
if (this.mainCam)
|
|
{
|
|
this.planes = GeometryUtility.CalculateFrustumPlanes(this.mainCam);
|
|
QualitySettings.shadows = ShadowQuality.Disable;
|
|
this.cam.RenderWithShader(this.shader, "RenderType");
|
|
QualitySettings.shadows = ShadowQuality.All;
|
|
Matrix4x4 matrix4x = new Matrix4x4
|
|
{
|
|
m00 = 0.5f,
|
|
m01 = 0f,
|
|
m02 = 0f,
|
|
m03 = 0.5f,
|
|
m10 = 0f,
|
|
m11 = 0.5f,
|
|
m12 = 0f,
|
|
m13 = 0.5f,
|
|
m20 = 0f,
|
|
m21 = 0f,
|
|
m22 = 0.5f,
|
|
m23 = 0.5f,
|
|
m30 = 0f,
|
|
m31 = 0f,
|
|
m32 = 0f,
|
|
m33 = 1f
|
|
};
|
|
Matrix4x4 worldToCameraMatrix = this.cam.worldToCameraMatrix;
|
|
Matrix4x4 projectionMatrix = this.cam.projectionMatrix;
|
|
Matrix4x4 matrix4x2 = matrix4x * projectionMatrix * worldToCameraMatrix;
|
|
Shader.SetGlobalMatrix("_ShadowMatrix", matrix4x2);
|
|
Shader.SetGlobalTexture("_ShadowCharacterTex", this.depthTarget);
|
|
Shader.SetGlobalFloat("_ShadowBias", this.shadowBias);
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600007C RID: 124 RVA: 0x0000B9C0 File Offset: 0x00009BC0
|
|
private void Update()
|
|
{
|
|
if (this.party == null)
|
|
{
|
|
this.party = Links.x.party;
|
|
this.npc = Links.x.npcs;
|
|
this.deads = Links.x.deads;
|
|
}
|
|
if (this.party != null && !Links.x.characterSheet.open)
|
|
{
|
|
this.GetBounds();
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600007D RID: 125 RVA: 0x0000BA28 File Offset: 0x00009C28
|
|
public Bounds GetBounds()
|
|
{
|
|
Vector3 vector = Vector3.zero;
|
|
if (Links.x.rtsCamera)
|
|
{
|
|
if (Links.x.rtsCamera.followCharacter && Links.x.worldCamera.orthographic)
|
|
{
|
|
vector = Links.x.rtsCamera.cameraTargetTr.position;
|
|
}
|
|
else if (!Links.x.worldCamera.orthographic && Links.x.rtsCamera.followCharacter && !Links.x.rtsCamera.puzzleTarget && !Links.x.combat.inRally && !Links.x.combat.inPocketAttack && !Links.x.rtsCamera.joyTarget && !Links.x.combat.pocketTarget)
|
|
{
|
|
vector = Links.x.rtsCamera.followCharacter.tr.position;
|
|
}
|
|
}
|
|
if (Records.x.dialogue)
|
|
{
|
|
vector = Vector3.zero;
|
|
}
|
|
this.positions.Clear();
|
|
if (vector == Vector3.zero)
|
|
{
|
|
int num = this.party.Count;
|
|
Bounds bounds = default(Bounds);
|
|
new Vector3(3f, 4f, 3f);
|
|
for (int i = 0; i < num; i++)
|
|
{
|
|
Character character = this.party[i];
|
|
if (character && character.party && this.TestPlanesAABBInternalFast(character.tr.position, 4f))
|
|
{
|
|
bounds.center = character.currentPosition;
|
|
this.positions.Add(bounds);
|
|
}
|
|
}
|
|
num = this.npc.Count;
|
|
for (int j = 0; j < num; j++)
|
|
{
|
|
Character character = this.npc[j];
|
|
if (character && character.visible == 1 && !character.dead && this.TestPlanesAABBInternalFast(character.tr.position, 4f))
|
|
{
|
|
bounds.center = character.currentPosition;
|
|
this.positions.Add(bounds);
|
|
}
|
|
}
|
|
}
|
|
if (this.positions.Count > 0 || vector != Vector3.zero)
|
|
{
|
|
Bounds bounds2 = default(Bounds);
|
|
if (vector == Vector3.zero)
|
|
{
|
|
bounds2 = this.positions[0];
|
|
if (this.positions.Count > 1)
|
|
{
|
|
int k = 1;
|
|
int count = this.positions.Count;
|
|
while (k < count)
|
|
{
|
|
bounds2.Encapsulate(this.positions[k]);
|
|
k++;
|
|
}
|
|
}
|
|
vector = bounds2.center;
|
|
}
|
|
base.gameObject.transform.position = vector;
|
|
if (!this.mainCam.orthographic)
|
|
{
|
|
base.gameObject.transform.position += base.gameObject.transform.forward * -60f;
|
|
}
|
|
else
|
|
{
|
|
base.gameObject.transform.position += base.gameObject.transform.forward * -60f;
|
|
}
|
|
float num2 = bounds2.extents.y;
|
|
if (bounds2.extents.x > num2)
|
|
{
|
|
num2 = bounds2.extents.x;
|
|
}
|
|
if (bounds2.extents.z > num2)
|
|
{
|
|
num2 = bounds2.extents.z;
|
|
}
|
|
this.cam.orthographicSize = num2 + 10f;
|
|
if (this.cam.orthographicSize < 40f)
|
|
{
|
|
this.cam.orthographicSize = 40f;
|
|
}
|
|
if (this.cam.orthographicSize > 100f)
|
|
{
|
|
this.cam.orthographicSize = 100f;
|
|
}
|
|
return bounds2;
|
|
}
|
|
return default(Bounds);
|
|
}
|
|
|
|
// Token: 0x0600007E RID: 126 RVA: 0x0000BE24 File Offset: 0x0000A024
|
|
public bool TestPlanesAABBInternalFast(Vector3 pt, float radius)
|
|
{
|
|
for (int i = 0; i < this.planes.Length; i++)
|
|
{
|
|
Vector3 normal = this.planes[i].normal;
|
|
float distance = this.planes[i].distance;
|
|
Vector3 vector;
|
|
Vector3 vector2;
|
|
if (normal.x < 0f)
|
|
{
|
|
vector.x = pt.x - radius;
|
|
vector2.x = pt.x + radius;
|
|
}
|
|
else
|
|
{
|
|
vector.x = pt.x + radius;
|
|
vector2.x = pt.x - radius;
|
|
}
|
|
if (normal.y < 0f)
|
|
{
|
|
vector.y = pt.y - radius;
|
|
vector2.y = pt.y + radius;
|
|
}
|
|
else
|
|
{
|
|
vector.y = pt.y + radius;
|
|
vector2.y = pt.y - radius;
|
|
}
|
|
if (normal.z < 0f)
|
|
{
|
|
vector.z = pt.z - radius;
|
|
vector2.z = pt.z + radius;
|
|
}
|
|
else
|
|
{
|
|
vector.z = pt.z + radius;
|
|
vector2.z = pt.z - radius;
|
|
}
|
|
if (normal.x * vector.x + normal.y * vector.y + normal.z * vector.z + distance < 0f)
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
// Token: 0x040001C1 RID: 449
|
|
public int targetSize = 512;
|
|
|
|
// Token: 0x040001C2 RID: 450
|
|
public float shadowBias = 0.005f;
|
|
|
|
// Token: 0x040001C3 RID: 451
|
|
public Camera cam;
|
|
|
|
// Token: 0x040001C4 RID: 452
|
|
public Camera mainCam;
|
|
|
|
// Token: 0x040001C5 RID: 453
|
|
private RenderTexture depthTarget;
|
|
|
|
// Token: 0x040001C6 RID: 454
|
|
private Plane[] planes = new Plane[0];
|
|
|
|
// Token: 0x040001C7 RID: 455
|
|
private List<Character> party;
|
|
|
|
// Token: 0x040001C8 RID: 456
|
|
private List<Character> npc;
|
|
|
|
// Token: 0x040001C9 RID: 457
|
|
private List<Renderer> fleshRenderers;
|
|
|
|
// Token: 0x040001CA RID: 458
|
|
public List<Bounds> positions = new List<Bounds>();
|
|
|
|
// Token: 0x040001CB RID: 459
|
|
private List<Character> deads;
|
|
|
|
// Token: 0x040001CC RID: 460
|
|
public Shader shader;
|
|
}
|