游戏达人
  
- 贡献度
- 270
- 金元
- 17914
- 积分
- 2871
- 精华
- 0
- 注册时间
- 2014-11-30
|
本帖最后由 fanvalen 于 2024-7-7 21:47 编辑
首先在Battery里创建一个变量
public bool istotal;//用以判断是否是公用
然后再到tuning.storage下创建两个变量
public static float toaljoulesAvailable;//总的可用电量
public static float toaljoulesConsumed;//总的可消耗电量
dnspy编辑需要创建保存重载一次才能使用,别问为啥我也不知道
然后回到Battery写实现功能
由于改动较多我建议复制替换
AddEnergy和ConsumeEnergypublic void AddEnergy(float joules)
{
if (TUNING.STORAGE.toaljoulesAvailable == 0f)
{
TUNING.STORAGE.toaljoulesAvailable = this.joulesAvailable;
}
if (TUNING.STORAGE.toaljoulesConsumed == 0f)
{
TUNING.STORAGE.toaljoulesConsumed = this.joulesConsumed;
}
if (this.istotal)
{
TUNING.STORAGE.toaljoulesAvailable += joules;
TUNING.STORAGE.toaljoulesConsumed += joules;
this.joulesAvailable = TUNING.STORAGE.toaljoulesAvailable;
this.joulesConsumed = TUNING.STORAGE.toaljoulesConsumed;
this.ChargeCapacity -= joules;
this.WattsUsed = TUNING.STORAGE.toaljoulesConsumed / this.dt;
return;
}
this.joulesAvailable = Mathf.Min(this.capacity, this.JoulesAvailable + joules);
this.joulesConsumed += joules;
this.ChargeCapacity -= joules;
this.WattsUsed = this.joulesConsumed / this.dt;
}
public void ConsumeEnergy(float joules, bool report = false)
{
if (report)
{
float num = Mathf.Min(this.JoulesAvailable, joules);
ReportManager.Instance.ReportValue(ReportManager.ReportType.EnergyWasted, -num, StringFormatter.Replace(STRINGS.BUILDINGS.PREFABS.BATTERY.CHARGE_LOSS, "{Battery}", this.GetProperName()), null);
}
if (TUNING.STORAGE.toaljoulesAvailable == 0f)
{
TUNING.STORAGE.toaljoulesAvailable = this.joulesAvailable;
}
if (TUNING.STORAGE.toaljoulesConsumed == 0f)
{
TUNING.STORAGE.toaljoulesConsumed = this.joulesConsumed;
}
if (this.istotal)
{
TUNING.STORAGE.toaljoulesAvailable -= joules;
this.joulesAvailable = TUNING.STORAGE.toaljoulesAvailable;
return;
}
this.joulesAvailable = Mathf.Max(0f, this.JoulesAvailable - joules);
}
准备好功能需要给一个电池设置属性
我就拿普通电池作为星际传输电池将其改成下面样子
BatteryConfig.DoPostConfigureComplete
public override void DoPostConfigureComplete(GameObject go)
{
Battery battery = go.AddOrGet<Battery>();
battery.capacity = float.MaxValue;
battery.istotal = true;
battery.joulesLostPerSecond = 0f;
base.DoPostConfigureComplete(go);
}
这样改动不影响其他电池的使用,只有这个电池有这功能。如果你不喜欢破坏原来的,可以创建一个新的电池添加到菜单中,可以复制普通电池的配方改个名
|
|