Files
MinecraftConsoles/Minecraft.Client/Common/GameRules/GameRuleDefinition.cpp
Loki Rautio 087b7e7abf Revert "Project modernization (#630)"
This code was not tested and breaks in Release builds, reverting to restore
functionality of the nightly. All in-game menus do not work and generating
a world crashes.

This reverts commit a9be52c41a.
2026-03-07 21:12:22 -06:00

151 lines
4.1 KiB
C++

#include "stdafx.h"
#include "..\..\WstringLookup.h"
#include "..\..\..\Minecraft.World\StringHelpers.h"
#include "ConsoleGameRules.h"
GameRuleDefinition::GameRuleDefinition()
{
m_descriptionId = L"";
m_promptId = L"";
m_4JDataValue = 0;
}
void GameRuleDefinition::write(DataOutputStream *dos)
{
// Write EGameRuleType.
ConsoleGameRules::EGameRuleType eType = getActionType();
assert( eType != ConsoleGameRules::eGameRuleType_Invalid );
ConsoleGameRules::write(dos, eType); // stringID
writeAttributes(dos, 0);
// 4J-JEV: Get children.
vector<GameRuleDefinition *> *children = new vector<GameRuleDefinition *>();
getChildren( children );
// Write children.
dos->writeInt( children->size() );
for ( auto& it : *children )
it->write(dos);
}
void GameRuleDefinition::writeAttributes(DataOutputStream *dos, UINT numAttributes)
{
dos->writeInt(numAttributes + 3);
ConsoleGameRules::write(dos, ConsoleGameRules::eGameRuleAttr_descriptionName);
dos->writeUTF(m_descriptionId);
ConsoleGameRules::write(dos, ConsoleGameRules::eGameRuleAttr_promptName);
dos->writeUTF(m_promptId);
ConsoleGameRules::write(dos, ConsoleGameRules::eGameRuleAttr_dataTag);
dos->writeUTF(std::to_wstring(m_4JDataValue));
}
void GameRuleDefinition::getChildren(vector<GameRuleDefinition *> *children) {}
GameRuleDefinition *GameRuleDefinition::addChild(ConsoleGameRules::EGameRuleType ruleType)
{
#ifndef _CONTENT_PACKAGE
wprintf(L"GameRuleDefinition: Attempted to add invalid child rule - %d\n", ruleType );
#endif
return NULL;
}
void GameRuleDefinition::addAttribute(const wstring &attributeName, const wstring &attributeValue)
{
if(attributeName.compare(L"descriptionName") == 0)
{
m_descriptionId = attributeValue;
#ifndef _CONTENT_PACKAGE
wprintf(L"GameRuleDefinition: Adding parameter descriptionId=%ls\n",m_descriptionId.c_str());
#endif
}
else if(attributeName.compare(L"promptName") == 0)
{
m_promptId = attributeValue;
#ifndef _CONTENT_PACKAGE
wprintf(L"GameRuleDefinition: Adding parameter m_promptId=%ls\n",m_promptId.c_str());
#endif
}
else if(attributeName.compare(L"dataTag") == 0)
{
m_4JDataValue = _fromString<int>(attributeValue);
app.DebugPrintf("GameRuleDefinition: Adding parameter m_4JDataValue=%d\n",m_4JDataValue);
}
else
{
#ifndef _CONTENT_PACKAGE
wprintf(L"GameRuleDefinition: Attempted to add invalid attribute: %ls\n", attributeName.c_str());
#endif
}
}
void GameRuleDefinition::populateGameRule(GameRulesInstance::EGameRulesInstanceType type, GameRule *rule)
{
GameRule::ValueType value;
value.b = false;
rule->setParameter(L"bComplete",value);
}
bool GameRuleDefinition::getComplete(GameRule *rule)
{
GameRule::ValueType value;
value = rule->getParameter(L"bComplete");
return value.b;
}
void GameRuleDefinition::setComplete(GameRule *rule, bool val)
{
GameRule::ValueType value;
value = rule->getParameter(L"bComplete");
value.b = val;
rule->setParameter(L"bComplete",value);
}
vector<GameRuleDefinition *> *GameRuleDefinition::enumerate()
{
// Get Vector.
vector<GameRuleDefinition *> *gRules;
gRules = new vector<GameRuleDefinition *>();
gRules->push_back(this);
getChildren(gRules);
return gRules;
}
unordered_map<GameRuleDefinition *, int> *GameRuleDefinition::enumerateMap()
{
unordered_map<GameRuleDefinition *, int> *out
= new unordered_map<GameRuleDefinition *, int>();
int i = 0;
vector<GameRuleDefinition *> *gRules = enumerate();
for ( auto& it : *gRules )
out->emplace(it, i++);
return out;
}
GameRulesInstance *GameRuleDefinition::generateNewGameRulesInstance(GameRulesInstance::EGameRulesInstanceType type, LevelRuleset *rules, Connection *connection)
{
GameRulesInstance *manager = new GameRulesInstance(rules, connection);
rules->populateGameRule(type, manager);
return manager;
}
wstring GameRuleDefinition::generateDescriptionString(ConsoleGameRules::EGameRuleType defType, const wstring &description, void *data, int dataLength)
{
wstring formatted = description;
switch(defType)
{
case ConsoleGameRules::eGameRuleType_CompleteAllRule:
formatted = CompleteAllRuleDefinition::generateDescriptionString(description,data,dataLength);
break;
default:
break;
};
return formatted;
}