2RUZ7TTRT7SMZT2V7YWUCCTJJXNRT2LNJ2QBBVN4RMREMOGMGMHQC TKLR43RQKXB47J2YVVSJ7CAZAJZYOKXSDUXAUOVQMFUN73KZVUVQC DGUHVA7XX4HWCIXCARJCI7T6VTXEJUOPUYZOLDOOOWIZYFEJQYFQC MQD6ISMHW27RCHAGJUINEULYXSY3JQ3UKVQPEM5PYDMM32TUYAYQC JCJJQHBBV2KJGV46NWH3RHF5XSFVZUB56DVGR5XTCUOXHWD2KCJAC XF52N4U7HWXOF4PDSCR7LCUENLTSXLWEZGS2IJ6562KYI567Z2GAC VZRSH4U473FCZOP5EXURPXXN5J6F3ZLT435YY7A2JHLG2ZZB5KLQC JZVIQ3IPEXQ5OWCAKZQW666LXIZLMP5U247YI6Y2EJ7MDNWPGCZQC JLT7KOJ5QGXMRLXQXOHDTF62W3EGPX7XTHNEYAKGMJKK3V4QUPGQC FQZF2IY4T2F7KEVSHMFID35WNAU55CRRDF6XEXZB7PYZH26UGYPQC R475KN7MR3OG7EBLVNOO7QRIKXDGY2PIDXXV3HW4KBD5QM7B5OJQC FH3NHDU7BEUXKJLPIB2SZWCTI37CEQF6OMTKGP2T7WYE6V73NKVQC DTKCWM4J7PFNWAAES3RZHQGDA6PTDNX4TZVOXAKF5V7LCZBI3XUAC HDXZWK64UDKEV5JBETQK6KMT5RXW5XPDU3YY4HLBCGP5XA6727BQC RJXFDWT7OWTX3DQ7SBJFK6M66AQ2LGGIO32QD6G7VTJJS7U2R7XQC XRWOXKR3MD3O73SH33CWRUYMTS6KVWGN6U2AIKNVNGHN37MY7UYQC 62S5AKAC5VGAT4KZYRO4R6XIHO4CCD3RAUHQSW47VEGVEBNZGTGAC JC4YSSPLLFZVYO7TPBHS6RGGEYAW3I3LF36QK7A3WDDDTM6P3LJAC E6EFTMXHFWSSFW2JIKT2FM62L2GDNKLZ5B5ZVI4QGIZCZFFAMWWQC ROTMK5LNNK7T5YXVOMUODVMCQWIHPZYOME4WDIAMZJ4VXD7SOEBAC CD5FF75KTOBTMVMTMCKMR6F5DFKOF26I5K43ITNHGBI3ZAZHA4RAC HXTSBPAP75A7EC4RKWYQMVPPHPNZFPHUORBZWDHGEB6MPAGI7G7AC public void ApplyTagsEffect(TagCounter tags, Transform origin, AreaOfEffect areaOfEffect) {switch (areaOfEffect.shape) {case AoeShape.SingleTarget: ApplyTagsEffectSingle(tags, origin); break;case AoeShape.Path: ApplyTagsEffectPath(tags, origin, areaOfEffect); break;case AoeShape.Radius: ApplyTagsEffectRadius(tags, origin, areaOfEffect); break;case AoeShape.Cone: ApplyTagsEffectCone(tags, origin, areaOfEffect); break;
public void ApplyTagsEffect(TagCounter tags, Transform origin, IAreaOfEffect areaOfEffect) {switch (areaOfEffect) {case SingleTarget _: ApplyTagsEffectSingle(tags, origin); break;case CircleArea aoe: ApplyTagsEffectRadius(tags, origin, aoe); break;case ConeArea aoe: ApplyTagsEffectCone(tags, origin, aoe); break;case PathArea aoe: ApplyTagsEffectPath(tags, origin, aoe); break;
// TODO: might want to set it in context?public float length;public float width;public AoeShape shape;
return shape switch {AoeShape.SingleTarget => AffectSingle(origin),AoeShape.Radius => AffectRadius(origin),AoeShape.Cone => AffectCone(origin),AoeShape.Path => AffectPath(origin),_ => throw new IndexOutOfRangeException(),};}IEnumerable<Transform> AffectSingle(Transform origin) {
RaycastHit[] hits = Physics.SphereCastAll(origin.position, radius, origin.forward, 0, LayerMask.NameToLayer("units"));
[Serializable]public class CircleArea : IAreaOfEffect{public float Radius;public IEnumerable<Transform> GetAffectedUnits(Transform origin) {RaycastHit[] hits = Physics.SphereCastAll(origin.position, Radius, origin.forward, 0, LayerMask.NameToLayer("units"));
IEnumerable<Transform> AffectCone(Transform origin) {float radius = width;float coneAngle = Mathf.Asin(width / 2 * length);
}[Serializable]public class ConeArea : IAreaOfEffect{public float Length;public float Width;public IEnumerable<Transform> GetAffectedUnits(Transform origin) {float radius = Width;float coneAngle = Mathf.Asin(Width / 2 * Length);
RaycastHit[] hits = Physics.SphereCastAll(origin.position, radius, origin.forward, length, LayerMask.NameToLayer("units"));
[Serializable]public class PathArea : IAreaOfEffect{public float Radius;public float Length;public IEnumerable<Transform> GetAffectedUnits(Transform origin) {RaycastHit[] hits = Physics.SphereCastAll(origin.position, Radius, origin.forward, Length, LayerMask.NameToLayer("units"));
// Consider changing AreaOfEffect to Value typeif (context.AreaOfEffect == null) {context.AreaOfEffect = new();}context.AreaOfEffect.length = _areaOfEffect.length;context.AreaOfEffect.width = _areaOfEffect.width;context.AreaOfEffect.shape = _areaOfEffect.shape;
context.AreaOfEffect = _areaOfEffect.ShallowCopy();
- rid: 7043444504695668750type: {class: CircleArea, ns: , asm: Assembly-CSharp}data:Radius: 15- rid: 7043444504695668753type: {class: DelayedEffect, ns: TagFighter.Effects, asm: Assembly-CSharp}