コード例 #1
0
    public void OnRangeMet()
    {
        #region Debug
#if UNITY_EDITOR
        if (!gameObject.activeSelf)
        {
            Debug.Log("Projectile called OnRangeMet() for an inactive object *thonk face*");
            return;
        }
#endif
        #endregion

        lastEvent = ProjLastEvent.RangeMet;
        ModReturn fate = ModReturn.Pass;
        for (int i = 0; i < container.mods.Count; i++)
        {
            bool boo = container.mods[i].OnRangeMet(out ModReturn _fate);

            if (fate == ModReturn.Pass)
            {
                fate = _fate;
            }
            if (boo)
            {
                break;
            }
        }
        if (fate == ModReturn.Remove || fate == ModReturn.Pass)
        {
            OnRemove();
        }
    }
コード例 #2
0
    public void OnHitTarget(Entity other)
    {
        lastEvent = ProjLastEvent.HitTarget;
        ModReturn fate         = ModReturn.Pass;
        bool      cancelDamage = false;

        for (int i = 0; i < container.mods.Count; i++)
        {
            bool boo = container.mods[i].OnHitTarget(out ModReturn _fate, out bool _cancelDamage);

            if (_cancelDamage)
            {
                cancelDamage = true;
            }
            if (fate == ModReturn.Pass)
            {
                fate = _fate;
            }
            if (boo)
            {
                break;
            }
        }
        if (!cancelDamage)
        {
            other.Damage(container.stats.damage, container.stats.element, out float damageDealt, out float damageResisted);
        }
        if (fate == ModReturn.Remove || fate == ModReturn.Pass)
        {
            OnRemove();
        }
    }
コード例 #3
0
 public ProjMod_Dummy(ProjMod_Dummy other)
 {
     type       = other.type;
     priority   = other.priority;
     targetFate = other.targetFate;
     wallFate   = other.wallFate;
     rangeFate  = other.rangeFate;
 }
コード例 #4
0
 public override bool OnHitWall(out ModReturn modReturn)
 {
     if (bounceOffWall)
     {
         Bounce();
         modReturn = ModReturn.Keep;
         return(true);
     }
     modReturn = ModReturn.Pass;
     return(false);
 }
コード例 #5
0
 public override bool OnHitTarget(out ModReturn modReturn, out bool cancelDamage)
 {
     cancelDamage = false;
     if (bounceOffTarget)
     {
         Bounce();
         modReturn = ModReturn.Keep;
         return(true);
     }
     modReturn = ModReturn.Pass;
     return(false);
 }
コード例 #6
0
 public override bool OnHitWall(out ModReturn modReturn)
 {
     if (pierceWall)
     {
         modReturn = ModReturn.Keep;
         Pierce();
     }
     else
     {
         modReturn = ModReturn.Pass;
     }
     return(false);
 }
コード例 #7
0
 public override bool OnHitTarget(out ModReturn modReturn, out bool cancelDamage)
 {
     cancelDamage = false;
     if (pierceTarget)
     {
         modReturn = ModReturn.Keep;
         Pierce();
     }
     else
     {
         modReturn = ModReturn.Pass;
     }
     return(false);
 }
コード例 #8
0
    private void OnUpdate()
    {
        ModReturn fate = ModReturn.Pass;

        for (int i = 0; i < container.mods.Count; i++)
        {
            bool boo = container.mods[i].OnFixedUpdate(out ModReturn _fate);

            if (fate == ModReturn.Pass)
            {
                fate = _fate;
            }
            if (boo)
            {
                break;
            }
        }
        if (fate == ModReturn.Remove)
        {
            OnRemove();
        }
    }
コード例 #9
0
    public void OnHitWall()
    {
        lastEvent = ProjLastEvent.HitWall;
        ModReturn fate = ModReturn.Pass;

        for (int i = 0; i < container.mods.Count; i++)
        {
            bool boo = container.mods[i].OnHitWall(out ModReturn _fate);

            if (fate == ModReturn.Pass)
            {
                fate = _fate;
            }
            if (boo)
            {
                break;
            }
        }
        if (fate == ModReturn.Remove || fate == ModReturn.Pass)
        {
            OnRemove();
        }
    }
コード例 #10
0
 /// <summary>
 /// Called whenever the projectile hits a valid target
 /// </summary>
 /// <returns>True to break mod loop</returns>
 public virtual bool OnHitTarget(out ModReturn modReturn, out bool cancelDamage)
 {
     modReturn    = ModReturn.Pass;
     cancelDamage = false;
     return(false);
 }
コード例 #11
0
 public override bool OnFixedUpdate(out ModReturn modReturn)
 {
     modReturn = ModReturn.Pass;
     return(false);
 }
コード例 #12
0
 /// <summary>
 /// Called every frame
 /// </summary>
 /// <returns>True to break mod loop</returns>
 public virtual bool OnFixedUpdate(out ModReturn modReturn)
 {
     modReturn = ModReturn.Pass;
     return(false);
 }
コード例 #13
0
 public override bool OnRangeMet(out ModReturn modReturn)
 {
     modReturn = rangeFate;
     return(false);
 }
コード例 #14
0
 public override bool OnHitTarget(out ModReturn modReturn, out bool cancelDamage)
 {
     modReturn    = targetFate;
     cancelDamage = false;
     return(true);
 }
コード例 #15
0
 /// <summary>
 /// Called when the projectile collides with a wall
 /// </summary>
 /// <returns>True to break mod loop</returns>
 public virtual bool OnHitWall(out ModReturn modReturn)
 {
     modReturn = ModReturn.Pass;
     return(false);
 }
コード例 #16
0
 /// <summary>
 /// Called when the projectile reaches its max range
 /// </summary>
 /// <returns>True to break mod loop</returns>
 public virtual bool OnRangeMet(out ModReturn modReturn)
 {
     modReturn = ModReturn.Pass;
     return(false);
 }
コード例 #17
0
 public override bool OnHitWall(out ModReturn modReturn)
 {
     modReturn = wallFate;
     return(false);
 }