Вот такая проблема появилась: у меня есть, так сказать, база данных эффектов (то бишь всякие там баффы/дебаффы, отравления, благословения), откуда при помощи метода GetEffectByID(int ID) перебором самого списка эффектов достается эффект с требуемым ID, каждый эффект - отдельный класс, который наследуется от главного класса Effect.
Происходит следующее, когда вызывается вот этот вот метод (который хранится в самом классе Effect)
Синтаксис:
Используется csharp
public static void ApplyEffect(Effect effectToApply, Creature effectHandler, Creature effectSender, int duration, int level)
{
effectHandler.currentEffects.Add(effectToApply);
effectHandler.currentEffects[effectHandler.currentEffects.Count - 1].effectDuration = duration;
effectHandler.currentEffects[effectHandler.currentEffects.Count - 1].effectLevel = level;
effectHandler.currentEffects[effectHandler.currentEffects.Count - 1].effectSender = effectSender;
effectHandler.currentEffects[effectHandler.currentEffects.Count - 1].effectHandler = effectHandler;
effectHandler.currentEffects[effectHandler.currentEffects.Count - 1].OnEffectBegin();
}
{
effectHandler.currentEffects.Add(effectToApply);
effectHandler.currentEffects[effectHandler.currentEffects.Count - 1].effectDuration = duration;
effectHandler.currentEffects[effectHandler.currentEffects.Count - 1].effectLevel = level;
effectHandler.currentEffects[effectHandler.currentEffects.Count - 1].effectSender = effectSender;
effectHandler.currentEffects[effectHandler.currentEffects.Count - 1].effectHandler = effectHandler;
effectHandler.currentEffects[effectHandler.currentEffects.Count - 1].OnEffectBegin();
}
все выходит нормально, на врага накладывается эффект (то есть добавляется в список действующих эффектов на враге и назначается тот, кто его сотворил (то бишь игрок) и жертва эффекта (то бишь сам враг). Враг, атакуя, накладывает такой же эффект на игрока, и вот что случается: у врага меняются местами жертва эффекта и его творец, у игрока же все нормально в этом плане.
Проверка через
Синтаксис:
Используется csharp
MonoBehaviour.print(EffectsDatabase.GetEffectByID(0).effectHandler);
Синтаксис:
Используется csharp
effectHandler.currentEffects.Add(effectToApply);
Судя по всему, проблема в методе, потому что он возвращает, как я понимаю, ссылку на эффект в базе данных, а не его копию:
Синтаксис:
Используется csharp
public static Effect GetEffectByID(int ID)
{
for (int i = 0; i < registeredEffects.Count; i++)
if (registeredEffects[i].effectID == ID)
return registeredEffects[i];
return registeredEffects[0];
}
{
for (int i = 0; i < registeredEffects.Count; i++)
if (registeredEffects[i].effectID == ID)
return registeredEffects[i];
return registeredEffects[0];
}
Сама база данных эффектов прилагается:
Синтаксис:
Используется csharp
public class EffectsDatabase
{
public static List<Effect> registeredEffects = new List<Effect>();
public static string effectsIconsDirectory;
public static void InitializeDatabase()
{
effectsIconsDirectory = "EffectsSprites/";
registeredEffects.Add(new EffectPoison(0, "effect_poison"));
registeredEffects.Add(new EffectBleeding(1, "effect_bleeding"));
}
public static Effect GetEffectByID(int ID)
{
for (int i = 0; i < registeredEffects.Count; i++)
if (registeredEffects[i].effectID == ID)
return registeredEffects[i];
return registeredEffects[0];
}
}
{
public static List<Effect> registeredEffects = new List<Effect>();
public static string effectsIconsDirectory;
public static void InitializeDatabase()
{
effectsIconsDirectory = "EffectsSprites/";
registeredEffects.Add(new EffectPoison(0, "effect_poison"));
registeredEffects.Add(new EffectBleeding(1, "effect_bleeding"));
}
public static Effect GetEffectByID(int ID)
{
for (int i = 0; i < registeredEffects.Count; i++)
if (registeredEffects[i].effectID == ID)
return registeredEffects[i];
return registeredEffects[0];
}
}
Вот и вопрос, что мне нужно сделать? Каким образом передавать копию эффекта?