How to run the same script multiple times in code but with different instances of it
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
public class Timer : MonoBehaviour
{
private bool doReturn = false;
private float time = 0.0f;
public bool Ability(Action action, float time, string key,bool DoLoop)
{
if (Input.GetKeyDown(key)&&!DoLoop)
{
doReturn = true;
StartCoroutine(LateCall(time, action));
}
else if(Input.GetKeyDown(key)&&DoLoop)
{
doReturn = true;
StartLoop(action, time);
}
return doReturn;
}
private IEnumerator LateCall(float Duration, Action action)
{
action();
yield return new WaitForSeconds(Duration);
doReturn = false;
}
void StartLoop(Action action,float Duration)
{
StartCoroutine(DoLoop(action, Duration));
}
IEnumerator DoLoop(Action action, float Duration)
{
do
{
action();
time += Time.deltaTime;
yield return new WaitForEndOfFrame();
} while (time < Duration);
doReturn = false;
time = 0.0f;
}
}
This is the full code, and if for example this code is used in another script
Timer.Ability(RandomAbility, 3, "q", false);
if (!Timer.Ability(RandomAbility, 3, "q", false))
{
DefaultValues();
}
Timer.Ability(RandomAbility2, 3, "w", false);
if (!Timer.Ability(RandomAbility2, 3, "w", false))
{
DefaultValues2();
}
The "Ability" won't run right because the doReturn would be changed at the first use of the script, also if doReturn would become a local variable for "Ability" there would be no way to set it False because it would require IEnumerator LateCall and IEnumerator DoLoop to do so. I tried creating a local variable and tried to pass it as an argument on the other functions but because I couldn't use pointers to change the original value of it which is given in the Ability function for I would get "UNSAFE USE" so pointer weren't an option either!
The problem here is: I need a way to make a local variable and change it in other functions, so I could run that function in another script and it wouldn't be affected by how many times I use it, more of a universal function.
Your answer
Follow this Question
Related Questions
How do you copy an image from the clipboard into an ui image? 0 Answers
Bullet not inheriting speed of player. 0 Answers
Audiosource unlinks 1 Answer
how do i rotate an object? C# 1 Answer