整理一下
This commit is contained in:
@@ -1,146 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
using Verse;
|
||||
|
||||
namespace WulaFallenEmpire
|
||||
{
|
||||
public enum DescriptionSelectionMode
|
||||
{
|
||||
Random,
|
||||
Sequential
|
||||
}
|
||||
|
||||
public class EventDef : Def
|
||||
{
|
||||
public string portraitPath;
|
||||
public string characterName;
|
||||
|
||||
// New system: list of descriptions
|
||||
public List<string> descriptions;
|
||||
public DescriptionSelectionMode descriptionMode = DescriptionSelectionMode.Random;
|
||||
public bool hiddenWindow = false;
|
||||
|
||||
// Backwards compatibility: old single description field
|
||||
public new string description = null;
|
||||
|
||||
public Vector2 windowSize = Vector2.zero;
|
||||
|
||||
public List<EventOption> options;
|
||||
public string backgroundImagePath;
|
||||
public List<ConditionalEffects> immediateEffects;
|
||||
public List<ConditionalEffects> dismissEffects;
|
||||
public List<ConditionalDescription> conditionalDescriptions;
|
||||
|
||||
public override void PostLoad()
|
||||
{
|
||||
base.PostLoad();
|
||||
#pragma warning disable 0618
|
||||
// If the old description field is used, move its value to the new list for processing.
|
||||
if (!description.NullOrEmpty())
|
||||
{
|
||||
if (descriptions.NullOrEmpty())
|
||||
{
|
||||
descriptions = new List<string>();
|
||||
}
|
||||
descriptions.Insert(0, description);
|
||||
description = null; // Clear the old field to prevent confusion
|
||||
}
|
||||
#pragma warning restore 0618
|
||||
// If hiddenWindow is true, merge immediateEffects into dismissEffects at load time.
|
||||
if (hiddenWindow && !immediateEffects.NullOrEmpty())
|
||||
{
|
||||
if (dismissEffects.NullOrEmpty())
|
||||
{
|
||||
dismissEffects = new List<ConditionalEffects>();
|
||||
}
|
||||
dismissEffects.AddRange(immediateEffects);
|
||||
immediateEffects = null; // Clear to prevent double execution
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class EventOption
|
||||
{
|
||||
public string label;
|
||||
public List<ConditionalEffects> optionEffects;
|
||||
public List<Condition> conditions;
|
||||
public string disabledReason;
|
||||
public bool hideWhenDisabled = false;
|
||||
}
|
||||
|
||||
public class LoopEffects
|
||||
{
|
||||
public int count = 1;
|
||||
public string countVariableName;
|
||||
public List<Effect> effects;
|
||||
}
|
||||
|
||||
public class ConditionalEffects
|
||||
{
|
||||
public List<Condition> conditions;
|
||||
public List<Effect> effects;
|
||||
public List<Effect> randomlistEffects;
|
||||
public List<LoopEffects> loopEffects;
|
||||
|
||||
public void Execute(Dialog_CustomDisplay dialog)
|
||||
{
|
||||
// Execute all standard effects
|
||||
if (!effects.NullOrEmpty())
|
||||
{
|
||||
foreach (var effect in effects)
|
||||
{
|
||||
effect.Execute(dialog);
|
||||
}
|
||||
}
|
||||
|
||||
// Execute one random effect from the random list
|
||||
if (!randomlistEffects.NullOrEmpty())
|
||||
{
|
||||
float totalWeight = randomlistEffects.Sum(e => e.weight);
|
||||
float randomPoint = Rand.Value * totalWeight;
|
||||
|
||||
foreach (var effect in randomlistEffects)
|
||||
{
|
||||
if (randomPoint < effect.weight)
|
||||
{
|
||||
effect.Execute(dialog);
|
||||
break;
|
||||
}
|
||||
randomPoint -= effect.weight;
|
||||
}
|
||||
}
|
||||
|
||||
// Execute looped effects
|
||||
if (!loopEffects.NullOrEmpty())
|
||||
{
|
||||
var eventVarManager = Find.World.GetComponent<EventVariableManager>();
|
||||
foreach (var loop in loopEffects)
|
||||
{
|
||||
int loopCount = loop.count;
|
||||
if (!loop.countVariableName.NullOrEmpty() && eventVarManager.HasVariable(loop.countVariableName))
|
||||
{
|
||||
loopCount = eventVarManager.GetVariable<int>(loop.countVariableName);
|
||||
}
|
||||
|
||||
for (int i = 0; i < loopCount; i++)
|
||||
{
|
||||
if (!loop.effects.NullOrEmpty())
|
||||
{
|
||||
foreach (var effect in loop.effects)
|
||||
{
|
||||
effect.Execute(dialog);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class ConditionalDescription
|
||||
{
|
||||
public List<Condition> conditions;
|
||||
public string text;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user