コード例 #1
0
    /// <summary>
    /// Removes the projectile
    /// </summary>
    /// <param name="timeBehind">How long ago this should have happened, in seconds</param>
    public void OnRemove()
    {
        #region Debug
#if UNITY_EDITOR
        if (GameManager.Utility._bulletDrawMode != 0)
        {
            GameManager.Utility.DrawX(transform.position, Color.red, radius: GetColliderRadius(), rayDuration);
            GameManager.Utility.DrawDirectionalCircle(transform.position, velocity, Color.red, radius: GetColliderRadius(), rayDuration, 31);
        }
#endif
        #endregion

        if (lastEvent != ProjLastEvent.RangeMet)
        {
            CancelRangeTrigger();
        }

        for (int i = 0; i < container.mods.Count; i++)
        {
            container.mods[i].OnRemove();
        }

        lastEvent = ProjLastEvent.Removed;
        source.RemoveProjectile(gameObject);
        gameObject.SetActive(false);
    }
コード例 #2
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();
        }
    }
コード例 #3
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();
        }
    }
コード例 #4
0
    public void OnReflected(ReflectionType type)
    {
        Debug.Log("OnReflected()");
        lastEvent = ProjLastEvent.Reflected;
        for (int i = 0; i < container.mods.Count; i++)
        {
            container.mods[i].OnReflected();
        }

        container.stats.faction = Entity.GetReflectedFaction(container.stats.faction);
        switch (type)
        {
        case ReflectionType.None:
            break;

        case ReflectionType.Random360:
            velocity = Random.insideUnitCircle * velocity.magnitude;
            break;

        case ReflectionType.ReverseDirection:
            velocity = -velocity;
            break;

        case ReflectionType.ReverseDirection90:
            velocity = Quaternion.Euler(0, 0, Random.Range(-45, 45)) * -velocity;
            break;

        case ReflectionType.TargetSource:
            velocity = (source.transform.position - transform.position).normalized * velocity.magnitude;
            break;

        case ReflectionType.TargetSource30:
            velocity = Quaternion.Euler(0, 0, Random.Range(-15, 15)) * (source.transform.position - transform.position).normalized * velocity.magnitude;
            break;

        case ReflectionType.TargetSource90:
            velocity = Quaternion.Euler(0, 0, Random.Range(-45, 45)) * (source.transform.position - transform.position).normalized * velocity.magnitude;
            break;

        default:
            #region DebugAlerts
            Debug.LogWarning("Uh oh! Looks wike someone made a Big Ol' fucky-wucky >w<\n Go ywell at StaikyWaiky to impwement these fweatures: " + type);
            #endregion
            break;
        }
    }
コード例 #5
0
    public void Initialize()
    {
        lastEvent = ProjLastEvent.Fired;

        for (int i = 0; i < container.mods.Count; i++)
        {
            container.mods[i].Initialize(this);
        }

        ApplyGraphics(container.graphics);
        if (renderer != null)
        {
            renderer.enabled = true;
        }

        gameObject.SetActive(true);
        StartMovement();
    }
コード例 #6
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();
        }
    }