Creating A Guon
Difficulty: 3/10
First, you need to make a new file called: AdvancedPlayerOrbitalItem that inherits from PassiveItem, then drop this in there
private void CreateOrbital(PlayerController owner)
{
GameObject targetOrbitalPrefab = (!(this.OrbitalPrefab != null)) ? this.OrbitalFollowerPrefab.gameObject : this.OrbitalPrefab.gameObject;
bool flag = this.HasUpgradeSynergy && this.m_synergyUpgradeActive;
if (flag)
{
targetOrbitalPrefab = ((!(this.UpgradeOrbitalPrefab != null)) ? this.UpgradeOrbitalFollowerPrefab.gameObject : this.UpgradeOrbitalPrefab.gameObject);
}
bool flag2 = this.HasAdvancedUpgradeSynergy && this.m_advancedSynergyUpgradeActive;
if (flag2)
{
targetOrbitalPrefab = ((!(this.AdvancedUpgradeOrbitalPrefab != null)) ? this.AdvancedUpgradeOrbitalFollowerPrefab.gameObject : this.AdvancedUpgradeOrbitalPrefab.gameObject);
}
this.m_extantOrbital = PlayerOrbitalItem.CreateOrbital(owner, targetOrbitalPrefab, this.OrbitalFollowerPrefab != null, null);
bool flag3 = this.BreaksUponContact && this.m_extantOrbital;
if (flag3)
{
SpeculativeRigidbody component = this.m_extantOrbital.GetComponent<SpeculativeRigidbody>();
bool flag4 = component;
if (flag4)
{
SpeculativeRigidbody speculativeRigidbody = component;
speculativeRigidbody.OnRigidbodyCollision = (SpeculativeRigidbody.OnRigidbodyCollisionDelegate)Delegate.Combine(speculativeRigidbody.OnRigidbodyCollision, new SpeculativeRigidbody.OnRigidbodyCollisionDelegate(this.HandleBreakOnCollision));
}
}
bool flag5 = this.BreaksUponOwnerDamage && owner;
if (flag5)
{
owner.OnReceivedDamage += this.HandleBreakOnOwnerDamage;
}
this.OnOrbitalCreated(this.m_extantOrbital);
}
// Token: 0x060000F6 RID: 246 RVA: 0x0000B5A8 File Offset: 0x000097A8
public static GameObject CreateOrbital(PlayerController owner, GameObject targetOrbitalPrefab, bool isFollower, PlayerOrbitalItem sourceItem = null)
{
GameObject gameObject = UnityEngine.Object.Instantiate<GameObject>(targetOrbitalPrefab, owner.transform.position, Quaternion.identity);
bool flag = !isFollower;
if (flag)
{
PlayerOrbital component = gameObject.GetComponent<PlayerOrbital>();
component.Initialize(owner);
component.SourceItem = sourceItem;
}
else
{
PlayerOrbitalFollower component2 = gameObject.GetComponent<PlayerOrbitalFollower>();
bool flag2 = component2;
if (flag2)
{
component2.Initialize(owner);
}
}
return gameObject;
}
public virtual void OnOrbitalCreated(GameObject orbital)
{
}
// Token: 0x060000F7 RID: 247 RVA: 0x0000B618 File Offset: 0x00009818
private void HandleBreakOnOwnerDamage(PlayerController arg1)
{
bool flag = !this;
if (!flag)
{
bool flag2 = this.BreakVFX && this.m_extantOrbital && this.m_extantOrbital.GetComponentInChildren<tk2dSprite>();
if (flag2)
{
SpawnManager.SpawnVFX(this.BreakVFX, this.m_extantOrbital.GetComponentInChildren<tk2dSprite>().WorldCenter.ToVector3ZisY(0f), Quaternion.identity);
}
bool flag3 = this.m_owner;
if (flag3)
{
this.m_owner.RemovePassiveItem(this.PickupObjectId);
this.m_owner.OnReceivedDamage -= this.HandleBreakOnOwnerDamage;
}
UnityEngine.Object.Destroy(base.gameObject);
}
}
// Token: 0x060000F8 RID: 248 RVA: 0x0000B6E0 File Offset: 0x000098E0
private void HandleBreakOnCollision(CollisionData rigidbodyCollision)
{
bool flag = this.m_owner;
if (flag)
{
this.m_owner.RemovePassiveItem(this.PickupObjectId);
}
UnityEngine.Object.Destroy(base.gameObject);
}
// Token: 0x060000F9 RID: 249 RVA: 0x0000B720 File Offset: 0x00009920
public void DecoupleOrbital()
{
this.m_extantOrbital = null;
bool flag = this.BreaksUponOwnerDamage && this.m_owner;
if (flag)
{
this.m_owner.OnReceivedDamage -= this.HandleBreakOnOwnerDamage;
}
}
// Token: 0x060000FA RID: 250 RVA: 0x0000B76C File Offset: 0x0000996C
private void DestroyOrbital()
{
bool flag = !this.m_extantOrbital;
if (!flag)
{
bool flag2 = this.BreaksUponOwnerDamage && this.m_owner;
if (flag2)
{
this.m_owner.OnReceivedDamage -= this.HandleBreakOnOwnerDamage;
}
UnityEngine.Object.Destroy(this.m_extantOrbital.gameObject);
this.m_extantOrbital = null;
}
}
// Token: 0x060000FB RID: 251 RVA: 0x0000B7DC File Offset: 0x000099DC
protected override void Update()
{
base.Update();
bool hasAdvancedUpgradeSynergy = this.HasAdvancedUpgradeSynergy;
if (hasAdvancedUpgradeSynergy)
{
bool flag = this.m_advancedSynergyUpgradeActive && (!this.m_owner || !this.m_owner.PlayerHasActiveSynergy(this.AdvancedUpgradeSynergy));
if (flag)
{
bool flag2 = this.m_owner;
if (flag2)
{
for (int i = 0; i < this.advancedSynergyModifiers.Count; i++)
{
this.m_owner.healthHaver.damageTypeModifiers.Remove(this.advancedSynergyModifiers[i]);
}
}
this.m_advancedSynergyUpgradeActive = false;
this.DestroyOrbital();
bool flag3 = this.m_owner;
if (flag3)
{
this.CreateOrbital(this.m_owner);
}
}
else
{
bool flag4 = !this.m_advancedSynergyUpgradeActive && this.m_owner && this.m_owner.PlayerHasActiveSynergy(this.AdvancedUpgradeSynergy);
if (flag4)
{
this.m_advancedSynergyUpgradeActive = true;
this.DestroyOrbital();
bool flag5 = this.m_owner;
if (flag5)
{
this.CreateOrbital(this.m_owner);
}
for (int j = 0; j < this.advancedSynergyModifiers.Count; j++)
{
this.m_owner.healthHaver.damageTypeModifiers.Add(this.advancedSynergyModifiers[j]);
}
}
}
}
bool hasUpgradeSynergy = this.HasUpgradeSynergy;
if (hasUpgradeSynergy)
{
bool flag6 = this.m_synergyUpgradeActive && (!this.m_owner || !this.m_owner.HasActiveBonusSynergy(this.UpgradeSynergy, false));
if (flag6)
{
bool flag7 = this.m_owner;
if (flag7)
{
for (int k = 0; k < this.synergyModifiers.Length; k++)
{
this.m_owner.healthHaver.damageTypeModifiers.Remove(this.synergyModifiers[k]);
}
}
this.m_synergyUpgradeActive = false;
this.DestroyOrbital();
bool flag8 = this.m_owner;
if (flag8)
{
this.CreateOrbital(this.m_owner);
}
}
else
{
bool flag9 = !this.m_synergyUpgradeActive && this.m_owner && this.m_owner.HasActiveBonusSynergy(this.UpgradeSynergy, false);
if (flag9)
{
this.m_synergyUpgradeActive = true;
this.DestroyOrbital();
bool flag10 = this.m_owner;
if (flag10)
{
this.CreateOrbital(this.m_owner);
}
for (int l = 0; l < this.synergyModifiers.Length; l++)
{
this.m_owner.healthHaver.damageTypeModifiers.Add(this.synergyModifiers[l]);
}
}
}
}
}
// Token: 0x060000FC RID: 252 RVA: 0x0000BAD0 File Offset: 0x00009CD0
public override void Pickup(PlayerController player)
{
base.Pickup(player);
player.OnNewFloorLoaded = (Action<PlayerController>)Delegate.Combine(player.OnNewFloorLoaded, new Action<PlayerController>(this.HandleNewFloor));
for (int i = 0; i < this.modifiers.Length; i++)
{
player.healthHaver.damageTypeModifiers.Add(this.modifiers[i]);
}
this.CreateOrbital(player);
}
// Token: 0x060000FD RID: 253 RVA: 0x0000243D File Offset: 0x0000063D
private void HandleNewFloor(PlayerController obj)
{
this.DestroyOrbital();
this.CreateOrbital(obj);
}
// Token: 0x060000FE RID: 254 RVA: 0x0000BB44 File Offset: 0x00009D44
public override DebrisObject Drop(PlayerController player)
{
this.DestroyOrbital();
player.OnNewFloorLoaded = (Action<PlayerController>)Delegate.Remove(player.OnNewFloorLoaded, new Action<PlayerController>(this.HandleNewFloor));
for (int i = 0; i < this.modifiers.Length; i++)
{
player.healthHaver.damageTypeModifiers.Remove(this.modifiers[i]);
}
for (int j = 0; j < this.synergyModifiers.Length; j++)
{
player.healthHaver.damageTypeModifiers.Remove(this.synergyModifiers[j]);
}
return base.Drop(player);
}
// Token: 0x060000FF RID: 255 RVA: 0x0000BBEC File Offset: 0x00009DEC
protected override void OnDestroy()
{
bool flag = this.m_owner != null;
if (flag)
{
PlayerController owner = this.m_owner;
owner.OnNewFloorLoaded = (Action<PlayerController>)Delegate.Remove(owner.OnNewFloorLoaded, new Action<PlayerController>(this.HandleNewFloor));
for (int i = 0; i < this.modifiers.Length; i++)
{
this.m_owner.healthHaver.damageTypeModifiers.Remove(this.modifiers[i]);
}
for (int j = 0; j < this.synergyModifiers.Length; j++)
{
this.m_owner.healthHaver.damageTypeModifiers.Remove(this.synergyModifiers[j]);
}
this.m_owner.OnReceivedDamage -= this.HandleBreakOnOwnerDamage;
}
this.DestroyOrbital();
base.OnDestroy();
}
public PlayerOrbital OrbitalPrefab;
public PlayerOrbitalFollower OrbitalFollowerPrefab;
public bool HasUpgradeSynergy;
public CustomSynergyType UpgradeSynergy;
public GameObject UpgradeOrbitalPrefab;
public GameObject UpgradeOrbitalFollowerPrefab;
public bool CanBeMimicked;
public DamageTypeModifier[] modifiers;
public DamageTypeModifier[] synergyModifiers;
public bool BreaksUponContact;
public bool BreaksUponOwnerDamage;
public GameObject BreakVFX;
protected GameObject m_extantOrbital;
protected bool m_synergyUpgradeActive;
public bool HasAdvancedUpgradeSynergy;
public string AdvancedUpgradeSynergy;
public GameObject AdvancedUpgradeOrbitalPrefab;
public GameObject AdvancedUpgradeOrbitalFollowerPrefab;
public List<DamageTypeModifier> advancedSynergyModifiers = new List<DamageTypeModifier>();
protected bool m_advancedSynergyUpgradeActive;
Now we make our actual Guon, make sure it inherits from AdvancedPlayerOrbitalItem
drop in:
read the comments to understand how it works.
Last updated
Was this helpful?