Mafi.Core.Mods.IMod

DevWiki
Devany (토론 | 기여)님의 2024년 4월 15일 (월) 17:22 판 (새 문서: == 개요 == 이 인터페이스로 표시되는 클래스는 게임 모드(게임에 대한 기능 및 데이터 세트)입니다. 모든 모드는 생성자의 인수로 나열된 종속성을 가질 수 있습니다. 모든 종속 모드는 하위 모드보다 먼저 인스턴스화됩니다. 순환 종속성은 지원되지 않습니다. 선택적 종속성은 Mafi.Option 클래스를 통해 지원됩니다. 모든 등록 및 초기화 메서드는 토폴로지 순서로...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)
둘러보기로 이동 검색으로 이동

개요

이 인터페이스로 표시되는 클래스는 게임 모드(게임에 대한 기능 및 데이터 세트)입니다. 모든 모드는 생성자의 인수로 나열된 종속성을 가질 수 있습니다. 모든 종속 모드는 하위 모드보다 먼저 인스턴스화됩니다.

순환 종속성은 지원되지 않습니다. 선택적 종속성은 Mafi.Option 클래스를 통해 지원됩니다. 모든 등록 및 초기화 메서드는 토폴로지 순서로 호출됩니다. 즉, mod의 메서드는 모든 종속성이 호출된 후에만 호출되므로 mod는 모든 종속성이 먼저 초기화되었는지 확인할 수 있습니다. 모드가 등록되고 인스턴스화되면 Mafi.Core.Mods.IMod.RegisterPrototypes(Mafi.Core.Mods.ProtoRegistrator) 메서드가 호출됩니다. 이 메서드에서 모드는 제공된 Mafi.Core.Mods.ProtoRegistrator 클래스를 사용하여 프로토타입을 등록해야 합니다. 기존 프로토타입을 제거하거나 다른 프로토타입으로 교체하는 것도 허용됩니다. 그런 다음 Mafi.GlobalDependencyAttribute로 표시된 모든 유형에 대해 mod의 어셈블리를 스캔합니다. 이러한 형식은 종속성 확인자 빌더에 자동으로 등록됩니다. 추가 유형 또는 인스턴스는 제공된 Mafi.DependencyResolverBuilder를 사용하여 Mafi.Core.Mods.IMod.RegisterDependencies(Mafi.DependencyResolverBuilder,Mafi.Core.Prototypes.ProtosDb,System.Boolean) 메서드로 등록할 수 있습니다. 전역 종속성의 자동 등록은 어셈블리당 하나 이상의 mod가 있는 경우 어셈블리당 한 번만 발생합니다. 구현된 모든 메서드는 종속 클래스에서 실수로 호출되는 것을 방지하기 위해 명시적으로 구현되어야 합니다. 모든 모드 구현은 봉인된 클래스여야 합니다.

인터페이스 구조

[MultiDependency]
public interface IMod
{
    //
    // 요약:
    //     사람이 읽을 수 있는 모드 이름입니다. 이 값은 게임 내에서 표시됩니다.
    string Name { get; }

    //
    // 요약:
    //     모드의 버전.
    int Version { get; }

    //
    // 요약:
    //     이 모드가 UI 전용이고 게임 상태에 영향을 미치지 않는지 여부입니다.
    //     UI가 아닌 모든 모드는 Unity에 의존하거나 사용해서는 안 되며
    //     UI 전용 모드는 게임 상태 변경에 영향을 주어서는 안 됩니다.
    //
    // 설명:
    //     결정성 검증과 같은 헤드리스 게임에서는 UI 모드가 인스턴스화되지 않습니다.
    bool IsUiOnly { get; }

    //
    // 요약:
    //     모드가 구성을 추가, 제거 또는 변경할 수 있습니다.
    //     프로토타입이 등록되기 전에 호출됩니다.
    void ChangeConfigs(Lyst<IConfig> configs);

    //
    // 요약:
    //     이 모드의 모든 프로토타입을 등록합니다.
    void RegisterPrototypes(ProtoRegistrator registrator);

    //
    // 요약:
    //     기본 동작을 재정의해야 하는 모든 종속성의 구성 요소 또는
    //     사용자 지정 구현과 같은 모든 종속성을 등록합니다.
    //     이 메서드가 호출되기 전에 모든 모드의 모든 프로토타입이 등록되고
    //     프로토타입 데이터베이스가 잠깁니다.
    void RegisterDependencies(DependencyResolverBuilder depBuilder, ProtosDb protosDb, bool gameWasLoaded);

    //
    // 요약:
    //     게임 시작 전과 모든 모드가 등록되고 종속성 빌더가 생성된 후에 정확히 한 번 호출됩니다.
    //
    // 설명:
    //     모드가 전체 게임이 로드되고 시작할 준비가 된 후 사전 처리,
    //     초기화 및 확인을 수행할 수 있는 유일한 곳입니다.
    //     모든 proto가 로드되지 않기 때문에 다른 단계에서는 수행할 수 없는 UI 로드에 이것을 사용합니다.
    void Initialize(DependencyResolver resolver, bool gameWasLoaded);
}

필드, 속성

public string Name => "MyMod";

모드의 이름을 설정한다. 게임 내에서 표시되는 것이므로 읽을 수 있도록 설정한다.

public int Version => 1;

모드의 버전을 설정한다.

public bool IsUiOnly => false;

모드 대부분이 UI 변경이 아닌 기능을 변경하는 것이므로 IsUiOnly 값은 false로 설정한다.

void ChangeConfigs(Lyst<IConfig> configs);

게임 요소들의 환경설정을 설정한다.

Lyst<>는 COI에서 C#의 List<>를 개량한 클래스이다.

foreach를 사용하여 configs를 분개한다.

foreach (IConfig config in configs)
{
}

config가 IStartingFactoryConfig 형식일 때,

시작 초기 설정 항목

InitialTrucks

트럭 수를 설정한다.

InitialExcavators

굴삭기 수를 설정한다.

InitialTreeHarvesters

벌목기 수를 설정한다.

config가 CoreModConfig 일 때, CoreModConfig 객체를 설정한다

void RegisterDependencies(DependencyResolverBuilder depBuilder, ProtosDb protosDb, bool gameWasLoaded);

DependencyResolverBuilder

ProtosDb