コード例 #1
0
 private void DestroyDistortionInstance(DistortionInstance delInstance)
 {
     delInstance.OnUpdate    = null;               // Clear reference
     delInstance.OnGetCenter = null;
     ResetSlot(delInstance.slotIndex);             // Hide effect
     distortionSlot[delInstance.slotIndex] = null; // Reset record
 }
コード例 #2
0
    public void StartEffect(Func <Vector2> onGetCenter)
    {
        DistortionInstance instance = new DistortionInstance();

        instance.timeLimited = 0.5f;
        instance.distance    = 200;
        instance.Force       = 0.1f;
        instance.Radius      = 50f;
        instance.OnUpdate    = OnUpdate;
        instance.OnGetCenter = onGetCenter;
        heatDistortion.TaskEnqueue(instance);
    }
コード例 #3
0
    void OnUpdate(DistortionInstance instance)
    {
        float progress = instance.timeElapsed / instance.timeLimited;

        float distance = instance.distance * distanceCurve.Evaluate(progress);
        float Force    = instance.Force * forceCurve.Evaluate(progress);
        float Radius   = instance.Radius * RradiusCurve.Evaluate(progress);

        heatDistortion.SetCenter(instance.slotIndex, instance.OnGetCenter());
        heatDistortion.SetDistance(instance.slotIndex, distance);
        heatDistortion.SetForce(instance.slotIndex, Force);
        heatDistortion.SetRadius(instance.slotIndex, Radius);
    }
コード例 #4
0
    public void TaskEnqueue(DistortionInstance distotion)
    {
        foreach (int i in distortionSlot.Keys)
        {
            if (distortionSlot[i] == null)
            {
                // Assign data
                distotion.slotIndex = i;
                distortionSlot[i]   = distotion;
                return;
            }
        }

#if UNITY_EDITOR
        Debug.Log("HeatDistortion:: no Slots, cancel task");
#endif
    }