Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions MCMBuilderClientTestMod/MCMBuilderClientTestMod.XCOM_sln
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# XCOM ModBuddy Solution File, Format Version 11.00
VisualStudioVersion = 12.0.21005.1
MinimumVisualStudioVersion = 10.0.40219.1
Project("{5DAE07AF-E217-45C1-8DE7-FF99D6011E8A}") = "MCMBuilderClientTestMod", "MCMBuilderClientTestMod\MCMBuilderClientTestMod.x2proj", "{9431E66B-C62F-45C5-AFDB-9F51743A224E}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|XCOM 2 = Debug|XCOM 2
Default|XCOM 2 = Default|XCOM 2
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{9431E66B-C62F-45C5-AFDB-9F51743A224E}.Debug|XCOM 2.ActiveCfg = Debug|XCOM 2
{9431E66B-C62F-45C5-AFDB-9F51743A224E}.Debug|XCOM 2.Build.0 = Debug|XCOM 2
{9431E66B-C62F-45C5-AFDB-9F51743A224E}.Default|XCOM 2.ActiveCfg = Default|XCOM 2
{9431E66B-C62F-45C5-AFDB-9F51743A224E}.Default|XCOM 2.Build.0 = Default|XCOM 2
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
[ModPackages]
+ModPackages=MCMBuilderClientTestMod
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[Engine.ScriptPackages]
+NonNativePackages=ModConfigMenuBuilderAPI_1_0_0
+NonNativePackages=MCMBuilderClientTestMod

[UnrealEd.EditorEngine]
+ModEditPackages=ModConfigMenuBuilderAPI_1_0_0
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
[MCMBuilderClientTestMod.X2DownloadableContentInfo_MCMBuilderClientTestMod]
DLCIdentifier="MCMBuilderClientTestMod"
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[MCMBuilderClientTestModConfigManager JsonConfig_ManagerDefault]
+ConfigProperties = {"HUNGRY":{"Value":"true"}}
+ConfigProperties = {"HUNGER_SCALE":{"Value":"1"}}
+ConfigProperties = {"HUNGER_SCALE_NERD":{"Value":"0.1"}}
+ConfigProperties = {"FOOD":{"Value":"Apple"}}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
[ModConfigMenuBuilder.MCM_Builder_Screen]
+MCMBuilder="MCMBuilderClientTestMod"

[MCMBuilderClientTestMod JsonConfig_MCM_Builder]
+MCMPages = { \\
"TESTMOD_SETTINGS_PAGE":{ \\
"SaveConfigManager": "MCMBuilderClientTestModConfigManager",\\
"EnableResetButton": "true", \\
"TESTMOD_SETTINGS_GROUP_1":{ \\
"HUNGRY": { "Type": "Checkbox" }, \\
"HUNGER_SCALE_NERD": { "Type": "Slider", "SliderMin": "0.0", "SliderMax": "1.0", "SliderStep":"0.1" }, \\
"HUNGER_SCALE": { "Type": "Spinner", "Options": "1, 2, 3, 4, 5, 6, 7, 8, 9, 10" }, \\
"FOOD": { "Type": "Dropdown", "Options": "Apple, Chocolate, Burger" }, \\
}, \\
"TESTMOD_SETTINGS_GROUP_2":{ \\
"A_LABEL": { "Type": "Label" }, \\
}, \\
}, \\
}
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Default" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Guid>91050dba-9f3c-4243-90d9-f6bdef9ad716</Guid>
<Name>MCMBuilderClientTestMod</Name>
<Description>Description of My XCOM 2 Mod.</Description>
<SteamPublishID>0</SteamPublishID>
<AssemblyName>MCMBuilderClientTestMod</AssemblyName>
<RootNamespace>MCMBuilderClientTestMod</RootNamespace>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<OutputPath>bin\Debug\</OutputPath>
</PropertyGroup>
<ItemGroup>
<Folder Include="Config\" />
<Folder Include="Localization\" />
<Folder Include="Src\" />
<Folder Include="Src\MCMBuilderClientTestMod\" />
<Folder Include="Src\MCMBuilderClientTestMod\Classes\" />
<Folder Include="Src\ModConfigMenuBuilderAPI_1_0_0" />
<Folder Include="Src\ModConfigMenuBuilderAPI_1_0_0\Classes" />
</ItemGroup>
<ItemGroup>
<Content Include="Config\XComJsonConfigManager.ini">
<SubType>Content</SubType>
</Content>
<Content Include="Config\XComMCMBuilder.ini">
<SubType>Content</SubType>
</Content>
<Content Include="Localization\ModConfigMenu.int">
<SubType>Content</SubType>
</Content>
<Content Include="ReadMe.txt" />
<Content Include="ModPreview.jpg" />
<Content Include="Config\XComEditor.ini" />
<Content Include="Config\XComEngine.ini" />
<Content Include="Config\XComGame.ini" />
<Content Include="Src\MCMBuilderClientTestMod\Classes\Helper.uc">
<SubType>Content</SubType>
</Content>
<Content Include="Src\MCMBuilderClientTestMod\Classes\X2DownloadableContentInfo_MCMBuilderClientTestMod.uc" />
<Content Include="Src\MCMBuilderClientTestMod\Classes\X2EventListener_TestMod.uc">
<SubType>Content</SubType>
</Content>
<Content Include="Src\ModConfigMenuBuilderAPI_1_0_0\Classes\ConfigFactory.uc">
<SubType>Content</SubType>
</Content>
<Content Include="Src\ModConfigMenuBuilderAPI_1_0_0\Classes\JsonConfig_ManagerInterface.uc">
<SubType>Content</SubType>
</Content>
<Content Include="Src\ModConfigMenuBuilderAPI_1_0_0\Classes\MCM_Builder_Interface.uc">
<SubType>Content</SubType>
</Content>
<Content Include="Src\ModConfigMenuBuilderAPI_1_0_0\Classes\MCM_Builder_SingletonFactoryInterface.uc">
<SubType>Content</SubType>
</Content>
</ItemGroup>
<Import Project="$(MSBuildLocalExtensionPath)\XCOM2.targets" />
</Project>
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions MCMBuilderClientTestMod/MCMBuilderClientTestMod/ReadMe.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
You created an XCOM 2 Mod Project!
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
//-----------------------------------------------------------
// Class: Helper
// Author: Musashi
//
//-----------------------------------------------------------


class Helper extends Object;

const CONFIG_MANAGER = "MCMBuilderClientTestModConfigManager";

public static final function JsonConfig_ManagerInterface GetConfig()
{
return class'ConfigFactory'.static.GetConfigManager(CONFIG_MANAGER);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
//---------------------------------------------------------------------------------------
// FILE: XComDownloadableContentInfo_MCMBuilderClientTestMod.uc
//
// Use the X2DownloadableContentInfo class to specify unique mod behavior when the
// player creates a new campaign or loads a saved game.
//
//---------------------------------------------------------------------------------------
// Copyright (c) 2016 Firaxis Games, Inc. All rights reserved.
//---------------------------------------------------------------------------------------

class X2DownloadableContentInfo_MCMBuilderClientTestMod extends X2DownloadableContentInfo;

static function bool AbilityTagExpandHandler(string InString, out string OutString)
{
local string PossibleValue;

PossibleValue = class'Helper'.static.GetConfig().GetConfigTagValue(InString);
if (PossibleValue != "")
{
OutString = PossibleValue;
return true;
}

return false;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
class X2EventListener_TestMod extends X2EventListener;

static function array<X2DataTemplate> CreateTemplates()
{
local array<X2DataTemplate> Templates;

Templates.AddItem(CreateListenerTemplate_MCMBuilderListener());

return Templates;
}

static function CHEventListenerTemplate CreateListenerTemplate_MCMBuilderListener()
{
local CHEventListenerTemplate Template;

`CREATE_X2TEMPLATE(class'CHEventListenerTemplate', Template, 'MCMBuilderClientTestMod_MCMBuilderListener');

Template.RegisterInStrategy = true;
Template.RegisterInTactical = true;

Template.AddCHEvent('MCM_ButtonClick', OnMCM_ButtonClick, ELD_Immediate);
Template.AddCHEvent('MCM_ChangeHandler', OnMCM_ChangeHandler, ELD_Immediate);
Template.AddCHEvent('MCM_SaveHandler', OnMCM_SaveHandler, ELD_Immediate);
Template.AddCHEvent('MCM_SaveButtonClicked', OnMCM_SaveButtonClicked, ELD_Immediate);
Template.AddCHEvent('MCM_ConfigSaved', OnMCM_ConfigSaved, ELD_Immediate);
Template.AddCHEvent('MCM_ResetButtonClicked', OnMCM_ResetButtonClicked, ELD_Immediate);
Template.AddCHEvent('MCM_ConfigResetted', OnMCM_ConfigResetted, ELD_Immediate);

return Template;
}


static function EventListenerReturn OnMCM_ButtonClick(Object EventData, Object EventSource, XComGameState GameState, Name EventName, Object CallbackData)
{
if (EventSource != none)
{
`LOG(default.class @ GetFuncName() @ EventSource,, 'MCMBuilderClientTestMod');
}

return ELR_NoInterrupt;
}

static function EventListenerReturn OnMCM_ChangeHandler(Object EventData, Object EventSource, XComGameState GameState, Name EventName, Object CallbackData)
{
local MCM_Builder_Interface Builder;
local JsonObject Tuple;

Tuple = JsonObject(EventSource);
Builder = MCM_Builder_Interface(Tuple.GetObject("MCMBuilder"));

if (Builder != none && Builder.GetBuilderName() == "MCMBuilderClientTestMod")
{
`LOG(default.class @ GetFuncName() @
Tuple.GetObject("MCMBuilder") @
Tuple.GetStringValue("SettingLabel") @
Tuple.GetStringValue("SettingValue") @
Tuple.GetBoolValue("bOverrideDefaultHandler")
,, 'MCMBuilderClientTestMod');

MakePopup(EventName, Tuple.GetStringValue("SettingLabel") $ "(" $ Tuple.GetStringValue("SettingName") $ ")" $ ":" @ Tuple.GetStringValue("SettingValue"));
}

return ELR_NoInterrupt;
}


static function EventListenerReturn OnMCM_SaveHandler(Object EventData, Object EventSource, XComGameState GameState, Name EventName, Object CallbackData)
{
local MCM_Builder_Interface Builder;
local JsonObject Tuple;

Tuple = JsonObject(EventSource);
Builder = MCM_Builder_Interface(Tuple.GetObject("MCMBuilder"));

if (Builder != none && Builder.GetBuilderName() == "MCMBuilderClientTestMod")
{
`LOG(default.class @ GetFuncName() @
Tuple.GetObject("MCMBuilder") @
Tuple.GetStringValue("SettingLabel") @
Tuple.GetStringValue("SettingValue") @
Tuple.GetBoolValue("bOverrideDefaultHandler")
,, 'MCMBuilderClientTestMod');

MakePopup(EventName, Tuple.GetStringValue("SettingLabel") $ "(" $ Tuple.GetStringValue("SettingName") $ ")" $ ":" @ Tuple.GetStringValue("SettingValue"));
}

return ELR_NoInterrupt;
}

static function EventListenerReturn OnMCM_SaveButtonClicked(Object EventData, Object EventSource, XComGameState GameState, Name EventName, Object CallbackData)
{
local MCM_Builder_Interface Builder;
local JsonObject Tuple;

Tuple = JsonObject(EventSource);
Builder = MCM_Builder_Interface(Tuple.GetObject("MCMBuilder"));

`LOG(default.class @ GetFuncName() @
Builder @
Tuple.GetBoolValue("bOverrideDefaultHandler")
,, 'MCMBuilderClientTestMod');

if (Builder != none && Builder.GetBuilderName() == "MCMBuilderClientTestMod")
{
MakePopup(EventName, "bOverrideDefaultHandler:" @ Tuple.GetBoolValue("bOverrideDefaultHandler"));
}

return ELR_NoInterrupt;
}

static function EventListenerReturn OnMCM_ConfigSaved(Object EventData, Object EventSource, XComGameState GameState, Name EventName, Object CallbackData)
{
local MCM_Builder_Interface Builder;

Builder = MCM_Builder_Interface(EventSource);

if (Builder != none && Builder.GetBuilderName() == "MCMBuilderClientTestMod")
{
`LOG(default.class @ GetFuncName() @ Builder.GetBuilderName() @ Builder,, 'MCMBuilderClientTestMod');
MakePopup(EventName);
}

return ELR_NoInterrupt;
}

static function EventListenerReturn OnMCM_ResetButtonClicked(Object EventData, Object EventSource, XComGameState GameState, Name EventName, Object CallbackData)
{
local MCM_Builder_Interface Builder;

Builder = MCM_Builder_Interface(EventSource);

if (Builder != none && Builder.GetBuilderName() == "MCMBuilderClientTestMod")
{
`LOG(default.class @ GetFuncName() @ EventSource,, 'MCMBuilderClientTestMod');
MakePopup(EventName);
}

return ELR_NoInterrupt;
}

static function EventListenerReturn OnMCM_ConfigResetted(Object EventData, Object EventSource, XComGameState GameState, Name EventName, Object CallbackData)
{
local MCM_Builder_Interface Builder;

Builder = MCM_Builder_Interface(EventSource);

if (Builder != none && Builder.GetBuilderName() == "MCMBuilderClientTestMod")
{
`LOG(default.class @ GetFuncName() @ EventSource,, 'MCMBuilderClientTestMod');
MakePopup(EventName);
}

return ELR_NoInterrupt;
}

simulated static function MakePopup(Name EventName, optional string Text = "")
{
local TDialogueBoxData kDialogData;
local JsonConfig_ManagerInterface ConfigManager;

ConfigManager = class'Helper'.static.GetConfig();

kDialogData.eType = eDialog_Normal;
kDialogData.strTitle = string(EventName);
kDialogData.strText = Text != "" ? Text :
"HUNGRY:" @ ConfigManager.GetConfigBoolValue("HUNGRY") $ "\n" $
"HUNGER_SCALE:" @ ConfigManager.GetConfigIntValue("HUNGER_SCALE") $ "\n" $
"HUNGER_SCALE_NERD:" @ ConfigManager.GetConfigFloatValue("HUNGER_SCALE_NERD") $ "\n" $
"FOOD:" @ ConfigManager.GetConfigStringValue("FOOD");
//kDialogData.fnCallback = OKClickedGeneric;

kDialogData.strAccept = class'UIUtilities_Text'.default.m_strGenericContinue;

`PRESBASE.UIRaiseDialog(kDialogData);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
//-----------------------------------------------------------
// Class: ConfigFactory
// Author: Musashi
// DO NOT MAKE ANY CHANGES TO THIS CLASS
//-----------------------------------------------------------
class ConfigFactory extends Object;

static function JsonConfig_ManagerInterface GetConfigManager(string ManagerName)
{
local MCM_Builder_SingletonFactoryInterface SingletonFactoryInterface;
local object SingletonFactoryCDO;

SingletonFactoryCDO = class'XComEngine'.static.GetClassDefaultObjectByName('MCM_Builder_SingletonFactory');
SingletonFactoryInterface = MCM_Builder_SingletonFactoryInterface(SingletonFactoryCDO);
return SingletonFactoryInterface.static.GetManagerInstance(ManagerName);
}

static function MCM_Builder_Interface GetMCMBuilder(string BuilderName)
{
local MCM_Builder_SingletonFactoryInterface SingletonFactoryInterface;
local object SingletonFactoryCDO;

SingletonFactoryCDO = class'XComEngine'.static.GetClassDefaultObjectByName('MCM_Builder_SingletonFactory');
SingletonFactoryInterface = MCM_Builder_SingletonFactoryInterface(SingletonFactoryCDO);
return SingletonFactoryInterface.static.GetMCMBuilderInstance(BuilderName);
}
Loading