fanvalen 发表于 2022-9-25 15:21

跨星系输电的电池(密码回帖私你)

本帖最后由 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);
      }
这样改动不影响其他电池的使用,只有这个电池有这功能。如果你不喜欢破坏原来的,可以创建一个新的电池添加到菜单中,可以复制普通电池的配方改个名



fanvalen 发表于 2022-9-25 15:51

由于不会写save我创建的变量不会保存,所以我偷懒,我把公共的电量存到电池里,独挡的时候把电池的电量给公共电量。由于每个电池的负载不同存在一个序列的差异,问题不大可以接受。

ATXYU 发表于 2022-9-29 18:58

感谢分享

fanvalen 发表于 2022-10-2 20:48

https://bbs.3dmgame.com/thread-6226681-1-2.html
此贴可以找到密码
页: [1]
查看完整版本: 跨星系输电的电池(密码回帖私你)