aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/Common/Tutorial/ControllerTask.cpp
diff options
context:
space:
mode:
authordaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
committerdaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
commitb691c43c44ff180d10e7d4a9afc83b98551ff586 (patch)
tree3e9849222cbc6ba49f2f1fc6e5fe7179632c7390 /Minecraft.Client/Common/Tutorial/ControllerTask.cpp
parentdef8cb415354ac390b7e89052a50605285f1aca9 (diff)
Initial commit
Diffstat (limited to 'Minecraft.Client/Common/Tutorial/ControllerTask.cpp')
-rw-r--r--Minecraft.Client/Common/Tutorial/ControllerTask.cpp123
1 files changed, 123 insertions, 0 deletions
diff --git a/Minecraft.Client/Common/Tutorial/ControllerTask.cpp b/Minecraft.Client/Common/Tutorial/ControllerTask.cpp
new file mode 100644
index 00000000..c5fe071b
--- /dev/null
+++ b/Minecraft.Client/Common/Tutorial/ControllerTask.cpp
@@ -0,0 +1,123 @@
+#include "stdafx.h"
+#include <string>
+#include <unordered_map>
+#include "..\..\Minecraft.h"
+#include "..\..\MultiplayerLocalPlayer.h"
+#include "Tutorial.h"
+#include "TutorialConstraints.h"
+#include "ControllerTask.h"
+
+ControllerTask::ControllerTask(Tutorial *tutorial, int descriptionId, bool enablePreCompletion, bool showMinimumTime,
+ int mappings[], unsigned int mappingsLength, int iCompletionMaskA[], int iCompletionMaskACount, int iSouthpawMappings[], unsigned int uiSouthpawMappingsCount)
+ : TutorialTask( tutorial, descriptionId, enablePreCompletion, NULL, showMinimumTime )
+{
+ for(unsigned int i = 0; i < mappingsLength; ++i)
+ {
+ constraints.push_back( new InputConstraint( mappings[i] ) );
+ completedMappings[mappings[i]] = false;
+ }
+ if(uiSouthpawMappingsCount > 0 ) m_bHasSouthpaw = true;
+ for(unsigned int i = 0; i < uiSouthpawMappingsCount; ++i)
+ {
+ southpawCompletedMappings[iSouthpawMappings[i]] = false;
+ }
+
+ m_iCompletionMaskA= new int [iCompletionMaskACount];
+ for(int i=0;i<iCompletionMaskACount;i++)
+ {
+ m_iCompletionMaskA[i]=iCompletionMaskA[i];
+ }
+ m_iCompletionMaskACount=iCompletionMaskACount;
+ m_uiCompletionMask=0;
+
+ // If we don't want to be able to complete it early..then assume we want the constraints active
+ //if( !enablePreCompletion )
+ // enableConstraints( true );
+}
+
+ControllerTask::~ControllerTask()
+{
+ delete[] m_iCompletionMaskA;
+}
+
+bool ControllerTask::isCompleted()
+{
+ if( bIsCompleted )
+ return true;
+
+ bool bAllComplete = true;
+
+ Minecraft *pMinecraft = Minecraft::GetInstance();
+
+ int iCurrent=0;
+
+ if(m_bHasSouthpaw && app.GetGameSettings(pMinecraft->player->GetXboxPad(),eGameSetting_ControlSouthPaw))
+ {
+ for(AUTO_VAR(it, southpawCompletedMappings.begin()); it != southpawCompletedMappings.end(); ++it)
+ {
+ bool current = (*it).second;
+ if(!current)
+ {
+ // TODO Use a different pad
+ if( InputManager.GetValue(pMinecraft->player->GetXboxPad(), (*it).first) > 0 )
+ {
+ (*it).second = true;
+ m_uiCompletionMask|=1<<iCurrent;
+ }
+ else
+ {
+ bAllComplete = false;
+ }
+ }
+ iCurrent++;
+ }
+ }
+ else
+ {
+ for(AUTO_VAR(it, completedMappings.begin()); it != completedMappings.end(); ++it)
+ {
+ bool current = (*it).second;
+ if(!current)
+ {
+ // TODO Use a different pad
+ if( InputManager.GetValue(pMinecraft->player->GetXboxPad(), (*it).first) > 0 )
+ {
+ (*it).second = true;
+ m_uiCompletionMask|=1<<iCurrent;
+ }
+ else
+ {
+ bAllComplete = false;
+ }
+ }
+ iCurrent++;
+ }
+ }
+
+ // If this has a list of completion masks then check if there is a matching one to mark the task as complete
+ if(m_iCompletionMaskA && CompletionMaskIsValid())
+ {
+ bIsCompleted = true;
+ }
+ else
+ {
+ bIsCompleted = bAllComplete;
+ }
+
+ return bIsCompleted;
+}
+
+bool ControllerTask::CompletionMaskIsValid()
+{
+ for(int i=0;i<m_iCompletionMaskACount;i++)
+ {
+ if(m_uiCompletionMask==m_iCompletionMaskA[i]) return true;
+ }
+
+ return false;
+}
+void ControllerTask::setAsCurrentTask(bool active /*= true*/)
+{
+ TutorialTask::setAsCurrentTask(active);
+ enableConstraints(!active);
+} \ No newline at end of file