User: Аккумулятор должен работать 300 секунд, за включении, он будет создавать электричество, которое равняеться батарейке, и все что подключено к нему, должно будет активироваться сигналом, после того как он "разрядился" он выключаеться сам, и повторно подает сигнал всему, к чему он подключен, типо что без электричества они не работают, и выключаються. Если обьект подключаеться к нему, если аккумулятор включен, он посылает сигнал на включение обьекту. После 300 секунд, аккумулятор нельзя будет включить, потому что он будет разряжен. Как зарядить его, я скажу потом. Вот файлы мода сейчас:

Okay (Главная папка мода):
-> Sounds -> (Пусто)
-> Sprites -> Electic-Generator
-> Thumbnails -> Electic-Generator-thumb.png
-> CategoryBuilder.cs
-> mod.json
-> script.cs
-> thumb.png

Код:
CategoryBuilder.cs:
using System;using System.Linq;using System.Collections.Generic;using UnityEngine;public class CategoryBuilder{public static void Create(string name,string description, Sprite icon){CatalogBehaviour manager = UnityEngine.Object.FindObjectOfType<CatalogBehaviour>();if (manager.Catalog.Categories.FirstOrDefault((Category c) => c.name == name) == null){Category category = ScriptableObject.CreateInstance<Category>();category.name = name;category.Description = description;category.Icon = icon;Category[] NewCategories = new Category[manager.Catalog.Categories.Length + 1];Category[] categories = manager.Catalog.Categories;for (int i = 0; i < categories.Length; i++){NewCategories[i] = categories[i];}NewCategories[NewCategories.Length - 1] = category;manager.Catalog.Categories = NewCategories;}}/* Made in USSRAZULE */}

script.cs:
/* This mod has been generated with PPG-Mod-Creator (https://cheeteau.github.io/PPG-Mod-Creator/). You can remove this comment if you want to, but if someone ever sees this, hi! If you ever wanna support me, feel free to go on my Ko-fi! https://ko-fi.com/cheeteau */using UnityEngine;namespace Mod{public class Mod{public static void Main(){ModAPI.Register(new Modification(){OriginalItem = ModAPI.FindSpawnable("Metal Cube"),NameOverride = "Electic Generator",DescriptionOverride = "Powered Electric generator",CategoryOverride = ModAPI.FindCategory("Misc."),ThumbnailOverride = ModAPI.LoadSprite("Thumbnails/Electic-Generator-thumb.png"),AfterSpawn = (Instance) =>{Instance.GetComponent<PhysicalBehaviour>().InitialMass = 5f;Instance.GetComponent<PhysicalBehaviour>().TrueInitialMass = 5f;Instance.GetComponent<PhysicalBehaviour>().Properties = ModAPI.FindPhysicalProperties("Metal");Instance.GetComponent<PhysicalBehaviour>().IsWeightless = false;Instance.GetComponent<SpriteRenderer>().sprite = ModAPI.LoadSprite("Sprites/Electic-Generator.png");Instance.FixColliders();}});}}}

mod.json:
{"Name":"Okay","Author":"Oluni","Description":"Xz","ModVersion":"1.0","GameVersion":"1.22+","ThumbnailPath":"thumb.png","EntryPoint":"Mod.Mod","Scripts":["script.cs","CategoryBuilder.cs"]}



Assistant: Чтобы добавить функциональность, описанную вами для аккумулятора в игре, вам нужно будет внести изменения в скрипт `script.cs` и, возможно, добавить новый скрипт для обработки логики таймера и сигналов. К сожалению, из вашего кода неясно, как он интегрирован в конкретную игровую среду, но я постараюсь дать общее представление, как можно это реализовать.

### Шаги для реализации функциональности аккумулятора:

1. **Создайте новый скрипт `BatteryLogic.cs`**, чтобы отделить логику аккумулятора от основного скрипта регистрации.

2. **Добавьте новый компонент к вашему генератору**, который будет отвечать за таймер и сигналы:
   
```csharp
using UnityEngine;

namespace Mod
{
    public class BatteryLogic : MonoBehaviour
    {
        private float batteryTime = 300f; // Время работы в секундах
        private bool isPowered = false;
        private float currentTime = 0f;

        void Start()
        {
            currentTime = batteryTime;
            PowerOn();
        }

        void Update()
        {
            if (isPowered)
            {
                currentTime -= Time.deltaTime;
                if (currentTime <= 0)
                {
                    PowerOff();
                }
            }
        }

        public void PowerOn()
        {
            isPowered = true;
            currentTime = batteryTime;
            SendMessageToConnectedObjects(true);
        }

        public void PowerOff()
        {
            isPowered = false;
            SendMessageToConnectedObjects(false);
            // Можно добавить логику для перезарядки
        }

        private void SendMessageToConnectedObjects(bool state)
        {
            // Предположительно, вы присоединяете объекты динамически, можно обозреть их через теги или имя
            foreach (GameObject obj in FindObjectsOfType<GameObject>())
            {
                if (obj.CompareTag("ConnectedDevice")) // Или другой способ идентификации подключенных объектов
                {
                    obj.SendMessage("OnPowerStateChanged", state, SendMessageOptions.DontRequireReceiver);
                }
            }
        }
    }
}
```

3. **Регистрация нового компонента в вашем `script.cs`**:

В вашем методе `AfterSpawn` в `script.cs` добавьте компонент `BatteryLogic`:

```csharp
AfterSpawn = (Instance) =>
{
    var pb = Instance.GetComponent<PhysicalBehaviour>();
    pb.InitialMass = 5f;
    pb.TrueInitialMass = 5f;
    pb.Properties = ModAPI.FindPhysicalProperties("Metal");
    pb.IsWeightless = false;
    Instance.GetComponent<SpriteRenderer>().sprite = ModAPI.LoadSprite("Sprites/Electic-Generator.png");
    Instance.FixColliders();

    // Добавление компонента BatteryLogic
    Instance.AddComponent<Mod.BatteryLogic>();
}
```

4. **Обработка подключенных устройств**:

Убедитесь, что объекты, которые должны реагировать на сигналы аккумулятора, имеют соответствующие методы, например, `OnPowerStateChanged`, чтобы обрабатывать включение/выключение.

Это пример, чтобы начать. В зависимости от движка игры и API, который вы используете, могут потребоваться дополнительные шаги или изменения. Убедитесь, что объекты, которые должны реагировать на состояния питания, готовы принимать и обрабатывать посылаемые им сообщения.
User: Напиши полный скрипт script.cs, и скажи мне пошагово, что делать и куда.
Assistant: Чтобы создать функциональность аккумулятора, как вы описали, нам нужно будет обновить скрипт `script.cs` и создать новый скрипт для логики батареи. Я предоставлю полный скрипт `script.cs` и объясню пошаговые действия.

### Полный скрипт `script.cs`

```csharp
using UnityEngine;

namespace Mod
{
    public class Mod
    {
        public static void Main()
        {
            ModAPI.Register(new Modification()
            {
                OriginalItem = ModAPI.FindSpawnable("Metal Cube"),
                NameOverride = "Electric Generator",
                DescriptionOverride = "Powered Electric generator",
                CategoryOverride = ModAPI.FindCategory("Misc."),
                ThumbnailOverride = ModAPI.LoadSprite("Thumbnails/Electric-Generator-thumb.png"),
                AfterSpawn = (Instance) =>
                {
                    var pb = Instance.GetComponent<PhysicalBehaviour>();
                    pb.InitialMass = 5f;
                    pb.TrueInitialMass = 5f;
                    pb.Properties = ModAPI.FindPhysicalProperties("Metal");
                    pb.IsWeightless = false;
                    Instance.GetComponent<SpriteRenderer>().sprite = ModAPI.LoadSprite("Sprites/Electric-Generator.png");
                    Instance.FixColliders();

                    // Добавление компонента BatteryLogic
                    Instance.AddComponent<BatteryLogic>();
                }
            });
        }
    }

    public class BatteryLogic : MonoBehaviour
    {
        private float batteryTime = 300f; // Время работы в секундах
        private bool isPowered = false;
        private float currentTime = 0f;

        void Start()
        {
            currentTime = batteryTime;
            PowerOn();
        }

        void Update()
        {
            if (isPowered)
            {
                currentTime -= Time.deltaTime;
                if (currentTime <= 0)
                {
                    PowerOff();
                }
            }
        }

        public void PowerOn()
        {
            isPowered = true;
            currentTime = batteryTime;
            SendMessageToConnectedObjects(true);
        }

        public void PowerOff()
        {
            isPowered = false;
            SendMessageToConnectedObjects(false);
            // Логика для перезарядки будет добавлена позже
        }

        private void SendMessageToConnectedObjects(bool state)
        {
            foreach (GameObject obj in FindObjectsOfType<GameObject>())
            {
                if (obj.CompareTag("ConnectedDevice"))
                {
                    obj.SendMessage("OnPowerStateChanged", state, SendMessageOptions.DontRequireReceiver);
                }
            }
        }
    }
}
```

### Что делать дальше

1. **Создайте новый скрипт `BatteryLogic.cs` или оставьте его в `script.cs`.**
   - В нашем примере мы интегрировали `BatteryLogic` непосредственно в `script.cs`, поэтому отдельный скрипт не требуется.

2. **Проверьте организованность папок и файлов.**
   - Убедитесь, что у вас есть все нужные ассеты (например, изображения) по правильным путям в папках `Sprites` и `Thumbnails`.

3. **Настройте объекты, которые должны реагировать на изменения состояния питания.**
   - Любой объект, который вы хотите подключить к генератору, должен иметь метод `OnPowerStateChanged`, который обрабатывает параметры включения и выключения.

4. **Перепроверьте `mod.json`.**
   - Убедитесь, что `mod.json` правильно указывает путь к `script.cs`.

5. **Загрузите мод в вашу игровую среду.**
   - Используйте встроенные в игру инструменты или любой вручную созданный способ, чтобы активировать мод.

6. **Тестируйте в игре изменения.**
   - Запустите игру и создайте ваш генератор, чтобы убедиться, что он правильно активирует и деактивирует подключенные устройства.

Теперь у вас должно быть общее представление о том, как внедрить аккумулятор как объект в вашей игре с функциональностью включения и выключения подключенных устройств. Если у вас будут дальнейшие вопросы или необходимость развить идеи, не стесняйтесь спрашивать!
User: Добавь, чтобы зарядить генератор, нужно будет подключить к нему источник питания, тоесть, генератор должен быть выключен, когда к нему поступает электричество, то над генератором, появиться текст с процентом заряда. Чтоб зарядить его до полного, нужно 30 секунд.
Assistant: