示例#1
0
 public void RemoveNextEffect()
 {
     if (nextElement != null)
     {
         nextElement = nextElement.nextElement;
     }
 }
示例#2
0
 private void AnotherEffectDeadlockCheck(GraphicalEffect anotherEffect)
 {
     if (this == anotherEffect)
     {
         throw new ApplicationException("Critical error in EffectScheduler, call Epholl. " + this + ", " + gameObject + " " + gameObject.name);
     }
 }
示例#3
0
	public void AddAnotherEffect(GraphicalEffect next) {
		AnotherEffectDeadlockCheck (next);
		if (nextElement != null) {
			nextElement.AddAnotherEffect(next);
		} else {
			nextElement = next;
		}
	}
示例#4
0
 private void UpdateFirst(GraphicalEffect newElement, float occurTime)
 {
     if (occurTime < firstElementOccurTime)
     {
         firstElement          = newElement;
         firstElementOccurTime = occurTime;
     }
 }
示例#5
0
	private void CheckTargetObjectHasEffect() {
		if (targetObject != null || targetObject.GetComponent<GraphicalEffect> () != null) {

			effect = targetObject.GetComponent<GraphicalEffect> ();
		} else {

			Debug.LogWarning("Target object is not a Graphical Effect. Cannot run it.");
		}
	}
示例#6
0
 private void ActivateNext()
 {
     if (nextElement != null)
     {
         var next = nextElement;
         nextElement = null;
         next.Activate();
     }
 }
示例#7
0
	public void Schedule(GraphicalEffect effect, float waitTime){
		float occurTime = Time.time + waitTime;
		if (events.ContainsKey(occurTime)){
			GraphicalEffect found = events[occurTime];
			found.AddAnotherEffect(effect);
		} else {
			events.Add (occurTime, effect);
		}
		UpdateFirst (effect, occurTime);
	}
示例#8
0
 private void CheckTargetObjectHasEffect()
 {
     if (targetObject != null || targetObject.GetComponent <GraphicalEffect> () != null)
     {
         effect = targetObject.GetComponent <GraphicalEffect> ();
     }
     else
     {
         Debug.LogWarning("Target object is not a Graphical Effect. Cannot run it.");
     }
 }
示例#9
0
	private void UpdateFirst() {

		if (events.Count == 0) {
			firstElement = null;
			firstElementOccurTime = float.MaxValue;
		} else {
			var first = events.First();
			firstElement = first.Value;
			firstElementOccurTime = first.Key;
		}
	}
示例#10
0
	private void PrepareAndScheduleEffect(GraphicalEffect effect) {

		if (rescheduling && effect.rescheduling) {
			effect.rescheduling = false;
		}
		if (runAtStart) {
			effect.runAtStart = false;
		}
		
		effect.EnqueueToScheduler();
	}
示例#11
0
	private void PrepareAndScheduleEffect(GraphicalEffect effect, float delay) {

		if (rescheduling && effect.rescheduling) {
			effect.rescheduling = false;
		}
		if (runAtStart) {
			effect.runAtStart = false;
		}
		
		effect.EnqueueToScheduler(effect.occurTimeDelay + delay);
	}
示例#12
0
	private bool SearchAndRemoveFromLinkedList(GraphicalEffect listHead, GraphicalEffect removed) {
		while (listHead.HasNextEffect()) {
			if (listHead.GetNextEffect() == removed) {
				listHead.RemoveNextEffect();
				return true;
			} else {
				listHead = listHead.GetNextEffect();
			}
		}
		return false;
	}
示例#13
0
 public void AddAnotherEffect(GraphicalEffect next)
 {
     AnotherEffectDeadlockCheck(next);
     if (nextElement != null)
     {
         nextElement.AddAnotherEffect(next);
     }
     else
     {
         nextElement = next;
     }
 }
示例#14
0
    private void PrepareAndScheduleEffect(GraphicalEffect effect, float delay)
    {
        if (rescheduling && effect.rescheduling)
        {
            effect.rescheduling = false;
        }
        if (runAtStart)
        {
            effect.runAtStart = false;
        }

        effect.EnqueueToScheduler(effect.occurTimeDelay + delay);
    }
示例#15
0
    private void PrepareAndScheduleEffect(GraphicalEffect effect)
    {
        if (rescheduling && effect.rescheduling)
        {
            effect.rescheduling = false;
        }
        if (runAtStart)
        {
            effect.runAtStart = false;
        }

        effect.EnqueueToScheduler();
    }
示例#16
0
	public override void PerformChange () {
		CheckAtLeastOneEffect ();

		GraphicalEffect next = PickRandomEffect ();
		if (!allowImmediateRepeat && CheckAtLeastTwoEffects()) {

			while (next == lastEffect) {
				next = PickRandomEffect();
			}
		}

		lastEffect = next;
		next.EnqueueToScheduler ();
	}
示例#17
0
 private void UpdateFirst()
 {
     if (events.Count == 0)
     {
         firstElement          = null;
         firstElementOccurTime = float.MaxValue;
     }
     else
     {
         var first = events.First();
         firstElement          = first.Value;
         firstElementOccurTime = first.Key;
     }
 }
示例#18
0
    public void Schedule(GraphicalEffect effect, float waitTime)
    {
        float occurTime = Time.time + waitTime;

        if (events.ContainsKey(occurTime))
        {
            GraphicalEffect found = events[occurTime];
            found.AddAnotherEffect(effect);
        }
        else
        {
            events.Add(occurTime, effect);
        }
        UpdateFirst(effect, occurTime);
    }
示例#19
0
文件: EffectGroup.cs 项目: Epholl/pot
	private void PrepareAndScheduleEffect(GraphicalEffect effect) {
		if (effect == this) {
			return;
		}

		if (rescheduling && effect.rescheduling) {
			effect.rescheduling = false;
		}
		if (runAtStart) {
			effect.runAtStart = false;
		}
		SetEffectTargetObject(effect);
		
		effect.EnqueueToScheduler();
	}
示例#20
0
 private bool SearchAndRemoveFromLinkedList(GraphicalEffect listHead, GraphicalEffect removed)
 {
     while (listHead.HasNextEffect())
     {
         if (listHead.GetNextEffect() == removed)
         {
             listHead.RemoveNextEffect();
             return(true);
         }
         else
         {
             listHead = listHead.GetNextEffect();
         }
     }
     return(false);
 }
示例#21
0
	public bool Unschedule(GraphicalEffect effect) {
		bool found = false;
		foreach (KeyValuePair<float, GraphicalEffect> kvp in events)
		{
			if (kvp.Value == effect) {
				events.Remove(kvp.Key);
				found = true;
				if (effect.HasNextEffect()) {
					events.Add(kvp.Key, effect.GetNextEffect());
				}
			} else if (SearchAndRemoveFromLinkedList(kvp.Value, effect)){
				found = true;
			}
		}
		return found;
	}
示例#22
0
    public override void PerformChange()
    {
        CheckAtLeastOneEffect();

        GraphicalEffect next = PickRandomEffect();

        if (!allowImmediateRepeat && CheckAtLeastTwoEffects())
        {
            while (next == lastEffect)
            {
                next = PickRandomEffect();
            }
        }

        lastEffect = next;
        next.EnqueueToScheduler();
    }
示例#23
0
文件: EffectGroup.cs 项目: Epholl/pot
	private void SetEffectTargetObject(GraphicalEffect effect) {
		switch (childTargetObjectsMode) {

			case ChildTargetsMode.noChange: {
				break;
			}
			case ChildTargetsMode.setWhenEmpty: {
				if (effect.targetObject == null) {
					effect.targetObject = GetTargetObject ();
				}
				break;
			}
			case ChildTargetsMode.setEverywhere: {
				effect.targetObject = GetTargetObject ();
				break;
			}
		}
	}
示例#24
0
    private void PrepareAndScheduleEffect(GraphicalEffect effect)
    {
        if (effect == this)
        {
            return;
        }

        if (rescheduling && effect.rescheduling)
        {
            effect.rescheduling = false;
        }
        if (runAtStart)
        {
            effect.runAtStart = false;
        }
        SetEffectTargetObject(effect);

        effect.EnqueueToScheduler();
    }
示例#25
0
    private void SetEffectTargetObject(GraphicalEffect effect)
    {
        switch (childTargetObjectsMode)
        {
        case ChildTargetsMode.noChange: {
            break;
        }

        case ChildTargetsMode.setWhenEmpty: {
            if (effect.targetObject == null)
            {
                effect.targetObject = GetTargetObject();
            }
            break;
        }

        case ChildTargetsMode.setEverywhere: {
            effect.targetObject = GetTargetObject();
            break;
        }
        }
    }
示例#26
0
    public bool Unschedule(GraphicalEffect effect)
    {
        bool found = false;

        foreach (KeyValuePair <float, GraphicalEffect> kvp in events)
        {
            if (kvp.Value == effect)
            {
                events.Remove(kvp.Key);
                found = true;
                if (effect.HasNextEffect())
                {
                    events.Add(kvp.Key, effect.GetNextEffect());
                }
            }
            else if (SearchAndRemoveFromLinkedList(kvp.Value, effect))
            {
                found = true;
            }
        }
        return(found);
    }
 public void SetEffect(GraphicalEffect effect)
 {
     Effect = effect;
 }
示例#28
0
	private void ActivateNext(){
		if (nextElement != null) {
			var next = nextElement;
			nextElement = null;
			next.Activate ();
		}
	}
示例#29
0
	public void RemoveNextEffect() {
		if (nextElement != null) {
			nextElement = nextElement.nextElement;
		}
	}
示例#30
0
	private void AnotherEffectDeadlockCheck(GraphicalEffect anotherEffect) {
		if (this == anotherEffect) {
			throw new ApplicationException("Critical error in EffectScheduler, call Epholl. " + this + ", " + gameObject + " " + gameObject.name);
		}
	}
示例#31
0
	private void UpdateFirst(GraphicalEffect newElement, float occurTime) {
		if (occurTime < firstElementOccurTime) {
			firstElement = newElement;
			firstElementOccurTime = occurTime;
		}
	}