420 lines
13 KiB
C#
420 lines
13 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using Photon;
|
|
using UnityEngine;
|
|
|
|
namespace RecRoom.Core.AI
|
|
{
|
|
// Token: 0x02000B7D RID: 2941
|
|
[RequireComponent(typeof(PhotonView))]
|
|
[RequireComponent(typeof(Enemy))]
|
|
public abstract class EnemyRangedWeapon : global::Photon.MonoBehaviour
|
|
{
|
|
// Token: 0x17000970 RID: 2416
|
|
// (get) Token: 0x0601639C RID: 91036 RVA: 0x00625BAC File Offset: 0x00623DAC
|
|
public Transform DCBHLBNCLGP
|
|
{
|
|
get
|
|
{
|
|
return this.projectileOriginTransform;
|
|
}
|
|
}
|
|
|
|
// Token: 0x17000971 RID: 2417
|
|
// (get) Token: 0x0601639D RID: 91037 RVA: 0x00625BB4 File Offset: 0x00623DB4
|
|
public float NJNINJPMKCA
|
|
{
|
|
get
|
|
{
|
|
if (this.shotSettings == null)
|
|
{
|
|
return 0f;
|
|
}
|
|
return (float)this.shotSettings.Length * this.timeBetweenBurstShots;
|
|
}
|
|
}
|
|
|
|
// Token: 0x140000AE RID: 174
|
|
// (add) Token: 0x0601639E RID: 91038 RVA: 0x00625BD8 File Offset: 0x00623DD8
|
|
// (remove) Token: 0x0601639F RID: 91039 RVA: 0x00625C10 File Offset: 0x00623E10
|
|
[field: DebuggerBrowsable(DebuggerBrowsableState.Never)]
|
|
public event EnemyRangedWeapon.LHLJCBGFKKD JCCIBHHCGDD;
|
|
|
|
// Token: 0x140000AF RID: 175
|
|
// (add) Token: 0x060163A0 RID: 91040 RVA: 0x00625C48 File Offset: 0x00623E48
|
|
// (remove) Token: 0x060163A1 RID: 91041 RVA: 0x00625C80 File Offset: 0x00623E80
|
|
[field: DebuggerBrowsable(DebuggerBrowsableState.Never)]
|
|
public event EnemyRangedWeapon.IPKAJLEIDKK APHBMAPOFBI;
|
|
|
|
// Token: 0x140000B0 RID: 176
|
|
// (add) Token: 0x060163A2 RID: 91042 RVA: 0x00625CB8 File Offset: 0x00623EB8
|
|
// (remove) Token: 0x060163A3 RID: 91043 RVA: 0x00625CF0 File Offset: 0x00623EF0
|
|
[field: DebuggerBrowsable(DebuggerBrowsableState.Never)]
|
|
public event EnemyRangedWeapon.AAOGICJJNLG HHGOAGAPIOJ;
|
|
|
|
// Token: 0x140000B1 RID: 177
|
|
// (add) Token: 0x060163A4 RID: 91044 RVA: 0x00625D28 File Offset: 0x00623F28
|
|
// (remove) Token: 0x060163A5 RID: 91045 RVA: 0x00625D60 File Offset: 0x00623F60
|
|
[field: DebuggerBrowsable(DebuggerBrowsableState.Never)]
|
|
public event EnemyRangedWeapon.MLNPHNHBCNA OHHFNAMFFBL;
|
|
|
|
// Token: 0x060163A6 RID: 91046 RVA: 0x00625D98 File Offset: 0x00623F98
|
|
protected override void Awake()
|
|
{
|
|
base.Awake();
|
|
this.GLDGOBKOFMJ = base.GetComponent<Enemy>();
|
|
if (this.GLDGOBKOFMJ == null)
|
|
{
|
|
global::UnityEngine.Debug.LogError(base.name + " is missing an enemy script.");
|
|
return;
|
|
}
|
|
this.DIBBLFPCIFB = base.GetComponent<EnemyTeamColor>();
|
|
}
|
|
|
|
// Token: 0x060163A7 RID: 91047 RVA: 0x00625DEC File Offset: 0x00623FEC
|
|
private void Start()
|
|
{
|
|
this.FOKHKLBPNLH.Add(this.GLDGOBKOFMJ.BOLBONELAEF.POEDHHBIGLD);
|
|
}
|
|
|
|
// Token: 0x060163A8 RID: 91048 RVA: 0x00625E0C File Offset: 0x0062400C
|
|
protected override void OnDestroy()
|
|
{
|
|
base.OnDestroy();
|
|
this.EBMKNCNNKEC();
|
|
}
|
|
|
|
// Token: 0x060163A9 RID: 91049 RVA: 0x00625E1C File Offset: 0x0062401C
|
|
public void AuthorityFire(Vector3 MMEBLCBANIL, float KMLDGGEMJHG = -1f)
|
|
{
|
|
if (base.BHCCHBHNHCG && this.BAFBLDIBFMC(MMEBLCBANIL))
|
|
{
|
|
this.JDCLNBMADKL(MMEBLCBANIL);
|
|
base.OMNGGJICBBI.RPC("RpcOnFire", IHCPDNLJMMD.All, new object[] { -1, MMEBLCBANIL, this.PBKGMFGBIKP, KMLDGGEMJHG });
|
|
}
|
|
}
|
|
|
|
// Token: 0x060163AA RID: 91050 RVA: 0x00625E84 File Offset: 0x00624084
|
|
public void AuthorityFire(EIDNMNCOAAJ MMEBLCBANIL, float KMLDGGEMJHG = -1f)
|
|
{
|
|
if (base.BHCCHBHNHCG && MMEBLCBANIL.AJFBOLHPEJC && this.BAFBLDIBFMC(MMEBLCBANIL.ICNCDGIKNNI))
|
|
{
|
|
this.JDCLNBMADKL(MMEBLCBANIL.ICNCDGIKNNI);
|
|
base.OMNGGJICBBI.RPC("RpcOnFire", IHCPDNLJMMD.All, new object[]
|
|
{
|
|
MMEBLCBANIL.BADMPMDONAH,
|
|
Vector3.zero,
|
|
this.PBKGMFGBIKP,
|
|
KMLDGGEMJHG
|
|
});
|
|
}
|
|
}
|
|
|
|
// Token: 0x060163AB RID: 91051 RVA: 0x00625F0C File Offset: 0x0062410C
|
|
public void StopFiring()
|
|
{
|
|
this.EBMKNCNNKEC();
|
|
}
|
|
|
|
// Token: 0x060163AC RID: 91052 RVA: 0x00625F14 File Offset: 0x00624114
|
|
private void JDCLNBMADKL(Vector3 FEOIAALCCLH)
|
|
{
|
|
if (base.BHCCHBHNHCG)
|
|
{
|
|
if (this.PBKGMFGBIKP == null || this.PBKGMFGBIKP.Length != this.shotSettings.Length)
|
|
{
|
|
this.PBKGMFGBIKP = new Vector3[this.shotSettings.Length];
|
|
}
|
|
global::UnityEngine.Random.InitState((int)DateTime.UtcNow.Ticks);
|
|
for (int i = 0; i < this.shotSettings.Length; i++)
|
|
{
|
|
this.PBKGMFGBIKP[i] = this.IJJFFGEBAGL(FEOIAALCCLH, this.shotSettings[i].HitChance);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x060163AD RID: 91053 RVA: 0x00625FB4 File Offset: 0x006241B4
|
|
private bool BAFBLDIBFMC(Vector3 MMEBLCBANIL)
|
|
{
|
|
Vector3 vector = Vector3.ProjectOnPlane(base.transform.forward, Vector3.up);
|
|
Vector3 vector2 = Vector3.ProjectOnPlane(MMEBLCBANIL - base.transform.position, Vector3.up);
|
|
return vector.sqrMagnitude >= 0.001f && vector2.sqrMagnitude >= 0.001f && Vector3.Angle(vector, vector2) <= this.validShotVisionConeDegrees;
|
|
}
|
|
|
|
// Token: 0x060163AE RID: 91054 RVA: 0x0062602C File Offset: 0x0062422C
|
|
protected virtual Vector3 IJJFFGEBAGL(Vector3 FEOIAALCCLH, float IDDGADFFNPK)
|
|
{
|
|
float num = global::UnityEngine.Random.Range(-this.maximumFireOffsetRotationAngle, this.maximumFireOffsetRotationAngle);
|
|
Vector3 vector = Vector3.up;
|
|
Vector3 vector2 = Vector3.ProjectOnPlane((FEOIAALCCLH - base.transform.position).normalized, Vector3.up);
|
|
vector = Quaternion.AngleAxis(num, vector2) * vector;
|
|
bool flag = IDDGADFFNPK != 0f && global::UnityEngine.Random.Range(0f, 1f) <= IDDGADFFNPK;
|
|
float num2;
|
|
float num3;
|
|
if (flag)
|
|
{
|
|
num2 = this.minimumFireHitDistance;
|
|
num3 = this.maximumFireHitDistance;
|
|
}
|
|
else
|
|
{
|
|
num2 = this.minimumFireMissDistance;
|
|
num3 = this.maximumFireMissDistance;
|
|
}
|
|
float num4 = global::UnityEngine.Random.Range(num2, num3);
|
|
return vector * num4;
|
|
}
|
|
|
|
// Token: 0x060163AF RID: 91055 RVA: 0x006260F8 File Offset: 0x006242F8
|
|
private void LJAELPNJINO(EIDNMNCOAAJ JHJKHGCBHBI, Vector3 JEICMHIFOCK, Vector3[] OHAAPMJOGDO, float KMLDGGEMJHG)
|
|
{
|
|
if (this.GLDGOBKOFMJ != null && this.GLDGOBKOFMJ.CNHBPJFLDCE > 0 && this.GLDGOBKOFMJ.ACEACLFJOAA)
|
|
{
|
|
this.OGLLCHLHOJE(JHJKHGCBHBI, JEICMHIFOCK, OHAAPMJOGDO, KMLDGGEMJHG);
|
|
}
|
|
}
|
|
|
|
// Token: 0x060163B0 RID: 91056
|
|
protected abstract void JFIPKCICNCJ(Vector3 MMEBLCBANIL, float KMLDGGEMJHG);
|
|
|
|
// Token: 0x060163B1 RID: 91057 RVA: 0x00626138 File Offset: 0x00624338
|
|
private void OGLLCHLHOJE(EIDNMNCOAAJ JHJKHGCBHBI, Vector3 JEICMHIFOCK, Vector3[] OHAAPMJOGDO, float KMLDGGEMJHG)
|
|
{
|
|
this.EBMKNCNNKEC();
|
|
this.POAOIIINFJC = base.StartCoroutine(this.FBNNHNNHLOH(JHJKHGCBHBI, JEICMHIFOCK, OHAAPMJOGDO, KMLDGGEMJHG));
|
|
}
|
|
|
|
// Token: 0x060163B2 RID: 91058 RVA: 0x00626158 File Offset: 0x00624358
|
|
private void EBMKNCNNKEC()
|
|
{
|
|
if (this.POAOIIINFJC != null)
|
|
{
|
|
base.StopCoroutine(this.POAOIIINFJC);
|
|
this.POAOIIINFJC = null;
|
|
}
|
|
}
|
|
|
|
// Token: 0x060163B3 RID: 91059 RVA: 0x00626178 File Offset: 0x00624378
|
|
private IEnumerator FBNNHNNHLOH(EIDNMNCOAAJ JHJKHGCBHBI, Vector3 JEICMHIFOCK, Vector3[] OHAAPMJOGDO, float KMLDGGEMJHG)
|
|
{
|
|
for (int i = 0; i < OHAAPMJOGDO.Length; i++)
|
|
{
|
|
if (this.GLDGOBKOFMJ == null || this.GLDGOBKOFMJ.CNHBPJFLDCE == 0 || !this.GLDGOBKOFMJ.ACEACLFJOAA)
|
|
{
|
|
break;
|
|
}
|
|
Vector3 vector = JEICMHIFOCK;
|
|
if (JHJKHGCBHBI.AJFBOLHPEJC)
|
|
{
|
|
vector = JHJKHGCBHBI.ICNCDGIKNNI;
|
|
}
|
|
vector += OHAAPMJOGDO[i];
|
|
this.HCKKFOBPFMA(vector);
|
|
this.JFIPKCICNCJ(vector, KMLDGGEMJHG);
|
|
if (OHAAPMJOGDO.Length > 1)
|
|
{
|
|
yield return new WaitForSeconds(this.timeBetweenBurstShots);
|
|
}
|
|
}
|
|
this.POAOIIINFJC = null;
|
|
yield break;
|
|
}
|
|
|
|
// Token: 0x060163B4 RID: 91060 RVA: 0x006261B0 File Offset: 0x006243B0
|
|
protected void KEPABDJPHJD(Player JEFGMHBLLKI, Player.HDOICGIKKAO ACAHIJEJKLC, IHEAKAOGCIF CACIBBKDNIH)
|
|
{
|
|
if (this.JCCIBHHCGDD != null)
|
|
{
|
|
this.JCCIBHHCGDD(this, JEFGMHBLLKI, ACAHIJEJKLC, CACIBBKDNIH);
|
|
}
|
|
}
|
|
|
|
// Token: 0x060163B5 RID: 91061 RVA: 0x006261CC File Offset: 0x006243CC
|
|
protected void HONGIOONIGM(Tool EEPPNAIKGEO, IHEAKAOGCIF CACIBBKDNIH)
|
|
{
|
|
if (EEPPNAIKGEO.OHGPCMJMFGC && this.APHBMAPOFBI != null)
|
|
{
|
|
this.APHBMAPOFBI(this, EEPPNAIKGEO, CACIBBKDNIH);
|
|
}
|
|
}
|
|
|
|
// Token: 0x060163B6 RID: 91062 RVA: 0x006261F4 File Offset: 0x006243F4
|
|
protected void LBOONNMGDKF(Enemy AKICADDPOIF, MHEBDODJGOA FJJKLPKDCPP, IHEAKAOGCIF CACIBBKDNIH)
|
|
{
|
|
if (AKICADDPOIF != null && this.HHGOAGAPIOJ != null)
|
|
{
|
|
this.HHGOAGAPIOJ(this, AKICADDPOIF, FJJKLPKDCPP, CACIBBKDNIH);
|
|
}
|
|
}
|
|
|
|
// Token: 0x060163B7 RID: 91063 RVA: 0x0062621C File Offset: 0x0062441C
|
|
protected void HCKKFOBPFMA(Vector3 MMEBLCBANIL)
|
|
{
|
|
Vector3 normalized = (MMEBLCBANIL - this.projectileOriginTransform.position).normalized;
|
|
this.DCIIDBJDHEH(this.muzzleFlashParticlesPrefab, this.projectileOriginTransform.position, normalized);
|
|
AudioManager.PlayRandom3DSFX(this.fireAudio, this.projectileOriginTransform.position, this.customAudioRolloff, false);
|
|
if (this.OHHFNAMFFBL != null)
|
|
{
|
|
this.OHHFNAMFFBL(this);
|
|
}
|
|
}
|
|
|
|
// Token: 0x060163B8 RID: 91064 RVA: 0x00626290 File Offset: 0x00624490
|
|
protected void DCIIDBJDHEH(PooledParticle PPICLLLMNAN, Vector3 FHFHOMKFHCI, Vector3 MNNIMIJFPPJ)
|
|
{
|
|
if (PPICLLLMNAN != null)
|
|
{
|
|
PooledParticle pooledParticle = ObjectPool.NCKMBFBMBFM.Acquire<PooledParticle>(PPICLLLMNAN);
|
|
pooledParticle.transform.position = FHFHOMKFHCI;
|
|
pooledParticle.transform.rotation = Quaternion.LookRotation(MNNIMIJFPPJ);
|
|
if (this.DIBBLFPCIFB != null && this.DIBBLFPCIFB.LAMCFBONKLA)
|
|
{
|
|
for (int i = 0; i < pooledParticle.MILLDACFPJB.Length; i++)
|
|
{
|
|
pooledParticle.MILLDACFPJB[i].main.startColor = this.DIBBLFPCIFB.GBLPHKFPELB;
|
|
}
|
|
}
|
|
pooledParticle.Play(false);
|
|
}
|
|
}
|
|
|
|
// Token: 0x060163B9 RID: 91065 RVA: 0x00626338 File Offset: 0x00624538
|
|
protected void DOEHAGPDBLF(ImpactDecal JAJBAKIDJGJ, Color HNOPCLEFEIG, Vector3 FHFHOMKFHCI, Vector3 CJDGNGLMGDI, GameObject BMGPDAGEDBB)
|
|
{
|
|
if (this.projectileImpactDecalPrefab != null)
|
|
{
|
|
ImpactDecal.Spawn(JAJBAKIDJGJ, HNOPCLEFEIG, FHFHOMKFHCI, CJDGNGLMGDI, BMGPDAGEDBB);
|
|
}
|
|
}
|
|
|
|
// Token: 0x060163BA RID: 91066 RVA: 0x00626358 File Offset: 0x00624558
|
|
[BCENPNOIAOM]
|
|
protected void RpcOnFire(int EDEKGCLBACC, Vector3 JEICMHIFOCK, Vector3[] OHAAPMJOGDO, float KMLDGGEMJHG)
|
|
{
|
|
this.LJAELPNJINO(new EIDNMNCOAAJ(EDEKGCLBACC), JEICMHIFOCK, OHAAPMJOGDO, KMLDGGEMJHG);
|
|
}
|
|
|
|
// Token: 0x04003E5D RID: 15965
|
|
[SerializeField]
|
|
private float validShotVisionConeDegrees = 60f;
|
|
|
|
// Token: 0x04003E5E RID: 15966
|
|
[SerializeField]
|
|
private EnemyRangedWeapon.ShotSettings[] shotSettings = new EnemyRangedWeapon.ShotSettings[]
|
|
{
|
|
new EnemyRangedWeapon.ShotSettings
|
|
{
|
|
HitChance = 1f
|
|
}
|
|
};
|
|
|
|
// Token: 0x04003E5F RID: 15967
|
|
[SerializeField]
|
|
private float timeBetweenBurstShots = 0.36f;
|
|
|
|
// Token: 0x04003E60 RID: 15968
|
|
[Header("Projectile")]
|
|
[SerializeField]
|
|
protected Transform projectileOriginTransform;
|
|
|
|
// Token: 0x04003E61 RID: 15969
|
|
[SerializeField]
|
|
[Header("Fire Accuracy")]
|
|
protected float minimumFireHitDistance = 0.09f;
|
|
|
|
// Token: 0x04003E62 RID: 15970
|
|
[SerializeField]
|
|
protected float maximumFireHitDistance = 0.11f;
|
|
|
|
// Token: 0x04003E63 RID: 15971
|
|
[SerializeField]
|
|
protected float minimumFireMissDistance = 0.175f;
|
|
|
|
// Token: 0x04003E64 RID: 15972
|
|
[SerializeField]
|
|
protected float maximumFireMissDistance = 0.4f;
|
|
|
|
// Token: 0x04003E65 RID: 15973
|
|
[SerializeField]
|
|
protected float maximumFireOffsetRotationAngle = 120f;
|
|
|
|
// Token: 0x04003E66 RID: 15974
|
|
[Header("Fire Feedback")]
|
|
[SerializeField]
|
|
protected PooledParticle muzzleFlashParticlesPrefab;
|
|
|
|
// Token: 0x04003E67 RID: 15975
|
|
[SerializeField]
|
|
protected RecRoomAudioClip[] fireAudio;
|
|
|
|
// Token: 0x04003E68 RID: 15976
|
|
[Header("Impact Feedback")]
|
|
[SerializeField]
|
|
protected ImpactDecal projectileImpactDecalPrefab;
|
|
|
|
// Token: 0x04003E69 RID: 15977
|
|
[SerializeField]
|
|
protected PooledParticle projectileImpactParticlesPrefab;
|
|
|
|
// Token: 0x04003E6A RID: 15978
|
|
[SerializeField]
|
|
protected RecRoomAudioClip projectileImpactAudio;
|
|
|
|
// Token: 0x04003E6B RID: 15979
|
|
[Header("Audio rolloff")]
|
|
[SerializeField]
|
|
protected AudioRolloff customAudioRolloff;
|
|
|
|
// Token: 0x04003E70 RID: 15984
|
|
protected Enemy GLDGOBKOFMJ;
|
|
|
|
// Token: 0x04003E71 RID: 15985
|
|
protected EnemyTeamColor DIBBLFPCIFB;
|
|
|
|
// Token: 0x04003E72 RID: 15986
|
|
protected List<Rigidbody> FOKHKLBPNLH = new List<Rigidbody>();
|
|
|
|
// Token: 0x04003E73 RID: 15987
|
|
private Vector3[] PBKGMFGBIKP;
|
|
|
|
// Token: 0x04003E74 RID: 15988
|
|
private Coroutine POAOIIINFJC;
|
|
|
|
// Token: 0x02000B7E RID: 2942
|
|
private enum PHHAPHPFKNC
|
|
{
|
|
// Token: 0x04003E76 RID: 15990
|
|
SINGLE_SHOT,
|
|
// Token: 0x04003E77 RID: 15991
|
|
BURST
|
|
}
|
|
|
|
// Token: 0x02000B7F RID: 2943
|
|
// (Invoke) Token: 0x060163BC RID: 91068
|
|
public delegate void LHLJCBGFKKD(EnemyRangedWeapon PDNIEPGJLNP, Player IPLDGGMENKL, Player.HDOICGIKKAO OJCFELLMIFA, IHEAKAOGCIF CACIBBKDNIH);
|
|
|
|
// Token: 0x02000B80 RID: 2944
|
|
// (Invoke) Token: 0x060163C0 RID: 91072
|
|
public delegate void IPKAJLEIDKK(EnemyRangedWeapon PDNIEPGJLNP, Tool EEPPNAIKGEO, IHEAKAOGCIF CACIBBKDNIH);
|
|
|
|
// Token: 0x02000B81 RID: 2945
|
|
// (Invoke) Token: 0x060163C4 RID: 91076
|
|
public delegate void AAOGICJJNLG(EnemyRangedWeapon PDNIEPGJLNP, Enemy AKICADDPOIF, MHEBDODJGOA OMPOICMBDBP, IHEAKAOGCIF CACIBBKDNIH);
|
|
|
|
// Token: 0x02000B82 RID: 2946
|
|
// (Invoke) Token: 0x060163C8 RID: 91080
|
|
public delegate void MLNPHNHBCNA(EnemyRangedWeapon PDNIEPGJLNP);
|
|
|
|
// Token: 0x02000B83 RID: 2947
|
|
[Serializable]
|
|
private struct ShotSettings
|
|
{
|
|
// Token: 0x04003E78 RID: 15992
|
|
[Range(0f, 1f)]
|
|
public float HitChance;
|
|
}
|
|
}
|
|
}
|