[dasher: 16/28] DemoFilter follows brachistochrone path with noise (from old DasherGameMode)
- From: Patrick Welche <pwelche src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [dasher: 16/28] DemoFilter follows brachistochrone path with noise (from old DasherGameMode)
- Date: Tue, 22 Nov 2011 17:04:00 +0000 (UTC)
commit 174a01351d047cbe019b365ff4c7019ca29eed58
Author: Alan Lawrence <acl33 inf phy cam ac uk>
Date: Thu Sep 8 09:25:25 2011 +0100
DemoFilter follows brachistochrone path with noise (from old DasherGameMode)
Reorganise startup - create alphabet before filter, then notify ControlMgr
Src/DasherCore/ControlManager.cpp | 2 +-
Src/DasherCore/DashIntfScreenMsgs.cpp | 2 +-
Src/DasherCore/DasherInterfaceBase.cpp | 14 ++-
Src/DasherCore/DasherInterfaceBase.h | 6 ++
Src/DasherCore/DemoFilter.cpp | 131 +++++++++++++++++++++++++++
Src/DasherCore/DemoFilter.h | 29 ++++++
Src/DasherCore/GameModule.h | 3 +-
Src/DasherCore/Makefile.am | 2 +
Src/DasherCore/OneButtonFilter.cpp | 1 +
Src/MacOSX/Dasher.xcodeproj/project.pbxproj | 8 ++
Src/iPhone/Dasher.xcodeproj/project.pbxproj | 6 ++
11 files changed, 197 insertions(+), 7 deletions(-)
---
diff --git a/Src/DasherCore/ControlManager.cpp b/Src/DasherCore/ControlManager.cpp
index 48cc5ae..d769333 100644
--- a/Src/DasherCore/ControlManager.cpp
+++ b/Src/DasherCore/ControlManager.cpp
@@ -403,7 +403,7 @@ void CControlManager::updateActions() {
//filter is pauseable, and either 'stop' would do something (so pause is different),
// or we're told to have a stop node but it would be indistinguishable from pause (=>have pause)
CInputFilter *pInput(m_pInterface->GetActiveInputMethod());
- if (pInput->supportsPause() && (m_pInterface->hasDone() || GetBoolParameter(BP_CONTROL_MODE_HAS_HALT)))
+ if (pInput && pInput->supportsPause() && (m_pInterface->hasDone() || GetBoolParameter(BP_CONTROL_MODE_HAS_HALT)))
vRootSuccessors.push_back(m_pPause);
if (it!=vOldRootSuccessors.end() && *it == m_pPause) it++;
diff --git a/Src/DasherCore/DashIntfScreenMsgs.cpp b/Src/DasherCore/DashIntfScreenMsgs.cpp
index 7ef8b30..4925cba 100644
--- a/Src/DasherCore/DashIntfScreenMsgs.cpp
+++ b/Src/DasherCore/DashIntfScreenMsgs.cpp
@@ -12,7 +12,7 @@ void CDashIntfScreenMsgs::Message(const string &strText, bool bInterrupt) {
CDasherScreen::Label *lab = m_DasherScreen->MakeLabel(strText,GetLongParameter(LP_MESSAGE_FONTSIZE));
if (bInterrupt) {
m_dqModalMessages.push_back(pair<CDasherScreen::Label*,bool>(lab,false));
- GetActiveInputMethod()->pause();
+ if (CInputFilter *fil=GetActiveInputMethod()) fil->pause();
}
else
m_dqAsyncMessages.push_back(pair<CDasherScreen::Label*,unsigned long>(lab, 0));
diff --git a/Src/DasherCore/DasherInterfaceBase.cpp b/Src/DasherCore/DasherInterfaceBase.cpp
index e51e938..bb39fb9 100644
--- a/Src/DasherCore/DasherInterfaceBase.cpp
+++ b/Src/DasherCore/DasherInterfaceBase.cpp
@@ -44,7 +44,7 @@
#include "ClickFilter.h"
#include "CompassMode.h"
#include "DefaultFilter.h"
-
+#include "DemoFilter.h"
#include "OneButtonFilter.h"
#include "OneButtonDynamicFilter.h"
#include "OneDimensionalFilter.h"
@@ -157,12 +157,17 @@ void CDasherInterfaceBase::Realize(unsigned long ulTime) {
CreateModules();
- CreateInput();
- CreateInputFilter();
-
ChangeAlphabet(); // This creates the NodeCreationManager, the Alphabet,
//and the tree of nodes in the model.
+ CreateInput();
+ CreateInputFilter();
+ //we may have created a control manager already; in which case, we need
+ // it to realize there's now an inputfilter (which may provide more actions).
+ // So tell it the setting has changed...
+ if (CControlManager *pCon = m_pNCManager->GetControlManager())
+ pCon->HandleEvent(SP_INPUT_FILTER);
+
HandleEvent(LP_NODE_BUDGET);
// FIXME - need to rationalise this sort of thing.
@@ -808,6 +813,7 @@ void CDasherInterfaceBase::CreateModules() {
RegisterModule(new CAlternatingDirectMode(this, this));
RegisterModule(new CCompassMode(this, this));
RegisterModule(new CStylusFilter(this, this, m_pFramerate));
+ RegisterModule(new CDemoFilter(this, this, m_pFramerate));
}
void CDasherInterfaceBase::GetPermittedValues(int iParameter, std::vector<std::string> &vList) {
diff --git a/Src/DasherCore/DasherInterfaceBase.h b/Src/DasherCore/DasherInterfaceBase.h
index 0a88681..671e201 100644
--- a/Src/DasherCore/DasherInterfaceBase.h
+++ b/Src/DasherCore/DasherInterfaceBase.h
@@ -360,6 +360,12 @@ public:
///
virtual int GetFileSize(const std::string &strFileName) = 0;
+ ///Gets a pointer to the game module. Will return null if game mode
+ /// is not on.
+ CGameModule *GetGameModule() {
+ return m_pGameModule;
+ }
+
protected:
/// @name Startup
diff --git a/Src/DasherCore/DemoFilter.cpp b/Src/DasherCore/DemoFilter.cpp
new file mode 100644
index 0000000..d1d5e96
--- /dev/null
+++ b/Src/DasherCore/DemoFilter.cpp
@@ -0,0 +1,131 @@
+#include "../Common/Common.h"
+#include "DemoFilter.h"
+#include "DasherInterfaceBase.h"
+#include "Event.h"
+
+#include "CircleStartHandler.h"
+#include "TwoBoxStartHandler.h"
+#include "GameModule.h"
+
+#include <iostream>
+
+using namespace Dasher;
+
+CDemoFilter::CDemoFilter(CSettingsUser *pCreator, CDasherInterfaceBase *pInterface, CFrameRate *pFramerate)
+ : CDynamicFilter(pCreator, pInterface, pFramerate, 19, _("Demo Mode (no input)")),
+m_dNoiseX(0.0), m_dNoiseY(0.0), m_iDemoX(0), m_iDemoY(0) {
+
+}
+
+CDemoFilter::~CDemoFilter() {
+}
+
+bool CDemoFilter::DecorateView(CDasherView *pView, CDasherInput *pInput) {
+
+ if(GetBoolParameter(BP_DRAW_MOUSE)) {
+ pView->DasherDrawCentredRectangle(m_iDemoX, m_iDemoY, 5, 2, false);
+ }
+
+ myint x[2];
+ myint y[2];
+
+ // Start of line is the crosshair location
+
+ x[0] = CDasherModel::ORIGIN_X;
+ y[0] = CDasherModel::ORIGIN_Y;
+
+ x[1] = m_iDemoX; y[1] = m_iDemoY;
+
+ // Actually plot the line
+ if (GetBoolParameter(BP_CURVE_MOUSE_LINE))
+ pView->DasherSpaceLine(x[0],y[0],x[1],y[1], GetLongParameter(LP_LINE_WIDTH), 1);
+ else
+ pView->DasherPolyline(x, y, 2, GetLongParameter(LP_LINE_WIDTH), 1);
+
+ return true;
+}
+
+void CDemoFilter::Activate() {
+ SetBoolParameter(BP_GAME_MODE, true);
+ HandleEvent(LP_FRAMERATE); //just to make sure!
+}
+
+void CDemoFilter::Deactivate() {
+ SetBoolParameter(BP_GAME_MODE, false);
+}
+
+std::pair<double,double> GaussianRand() // Is there a random number class already?
+{
+ double u1 = (double(rand())+1)/(double(RAND_MAX)+1.0);
+ double u2 = (double(rand())+1)/(double(RAND_MAX)+1.0);
+ double g1 = sqrt(-2.0*log(u1))*cos(6.283185307*u2);
+ double g2 = sqrt(-2.0*log(u1))*sin(6.283185307*u2);
+ // std::cout << u1 << " : " << u2 << " : " << g1 << std::endl;
+ return std::pair<double,double>(g1,g2);
+}
+
+void CDemoFilter::Timer(unsigned long Time, CDasherView *m_pDasherView, CDasherInput *pInput, CDasherModel *m_pDasherModel, CExpansionPolicy **pol) {
+ if (isPaused()) return;
+ CGameModule *mod = (CGameModule *)m_pInterface->GetGameModule();
+ const myint iTargetY(mod->m_iTargetY);
+ myint iCenterY = mod->ComputeBrachCenter();
+
+ // ...and now calculate the ideal direction...
+ double iIdealUnitVec[2];
+
+ iIdealUnitVec[0] = double(CDasherModel::ORIGIN_Y<iTargetY?(iCenterY-CDasherModel::ORIGIN_Y):(CDasherModel::ORIGIN_Y-iCenterY));
+ iIdealUnitVec[1] = double(CDasherModel::ORIGIN_Y<iTargetY ? CDasherModel::ORIGIN_X : -CDasherModel::ORIGIN_X);
+ double mag = sqrt((double)(iIdealUnitVec[0]*iIdealUnitVec[0]+iIdealUnitVec[1]*iIdealUnitVec[1]));
+ iIdealUnitVec[0] = iIdealUnitVec[0]/mag;
+ iIdealUnitVec[1] = iIdealUnitVec[1]/mag;
+
+ // ...and then modify for realism...
+ // ...by adding noise...
+ std::pair<double,double> noise = GaussianRand();
+ m_dNoiseX = m_dNoiseOld*m_dNoiseX + m_dNoiseNew*noise.first;
+ m_dNoiseY = m_dNoiseOld*m_dNoiseY + m_dNoiseNew*noise.second;
+
+ // ...and springy behaviour...
+ //if(!m_bSentenceFinished) {
+ const myint iNoiseMag(GetLongParameter(LP_DEMO_NOISE_MAG));
+ m_iDemoX = myint((CDasherModel::ORIGIN_X+(1500*iIdealUnitVec[0])+iNoiseMag*m_dNoiseX)*m_dSpring
+ +(1.0-m_dSpring)*m_iDemoX);
+ m_iDemoY = myint((CDasherModel::ORIGIN_Y+(1500*iIdealUnitVec[1])+iNoiseMag*m_dNoiseY)*m_dSpring
+ +(1.0-m_dSpring)*m_iDemoY);
+ //} else {
+ // m_iDemoX = myint(ORIGIN_X*m_DemoCfg.dSpring + (1.0-m_DemoCfg.dSpring)*m_iDemoX);
+ // m_iDemoY = myint(ORIGIN_Y*m_DemoCfg.dSpring + (1.0-m_DemoCfg.dSpring)*m_iDemoY);
+ //}
+
+ // ...and finally set the mouse coordinates.
+
+ OneStepTowards(m_pDasherModel, m_iDemoX, m_iDemoY, Time, 1.0);
+}
+
+void CDemoFilter::KeyDown(unsigned long iTime, int iId, CDasherView *pDasherView, CDasherInput *pInput, CDasherModel *pModel) {
+
+ if ((iId==0 && GetBoolParameter(BP_START_SPACE))
+ || (iId==100 && GetBoolParameter(BP_START_MOUSE))) {
+ if(isPaused())
+ run(iTime);
+ else
+ pause();
+ }
+}
+
+void CDemoFilter::HandleEvent(int iParameter) {
+ switch (iParameter) {
+ case LP_DEMO_SPRING:
+ case LP_DEMO_NOISE_MEM:
+ case LP_MAX_BITRATE:
+ case LP_FRAMERATE:
+ // Recalculates the parameters used in the demo following a change in framerate or speed.
+ double spring = GetLongParameter(LP_DEMO_SPRING)/100.0;
+ double noisemem = GetLongParameter(LP_DEMO_NOISE_MEM)/100.0;
+ double lambda = 0.7*GetLongParameter(LP_MAX_BITRATE)/(double)GetLongParameter(LP_FRAMERATE);
+
+ m_dSpring = (1-exp(-spring*lambda));
+ m_dNoiseNew = noisemem*(1-exp(-lambda));
+ m_dNoiseOld = sqrt(1.0-m_dNoiseNew*m_dNoiseNew);
+ }
+}
diff --git a/Src/DasherCore/DemoFilter.h b/Src/DasherCore/DemoFilter.h
new file mode 100644
index 0000000..ea8375a
--- /dev/null
+++ b/Src/DasherCore/DemoFilter.h
@@ -0,0 +1,29 @@
+#ifndef __DEMO_FILTER_H__
+#define __DEMO_FILTER_H__
+
+#include "DynamicFilter.h"
+
+namespace Dasher {
+/// \ingroup InputFilter
+/// @{
+class CDemoFilter : public CDynamicFilter {
+ public:
+ CDemoFilter(CSettingsUser *pCreator, CDasherInterfaceBase *pInterface, CFrameRate *pFramerate);
+ ~CDemoFilter();
+
+ virtual void HandleEvent(int iParameter);
+
+ virtual bool DecorateView(CDasherView *pView, CDasherInput *pInput);
+ virtual void Timer(unsigned long Time, CDasherView *m_pDasherView, CDasherInput *pInput, CDasherModel *m_pDasherModel, CExpansionPolicy **pol);
+ virtual void KeyDown(unsigned long iTime, int iId, CDasherView *pDasherView, CDasherInput *pInput, CDasherModel *pModel);
+ virtual void Activate();
+ virtual void Deactivate();
+ private:
+ double m_dSpring, m_dNoiseNew, m_dNoiseOld;
+ double m_dNoiseX, m_dNoiseY;
+ myint m_iDemoX, m_iDemoY;
+};
+}
+/// @}
+
+#endif
diff --git a/Src/DasherCore/GameModule.h b/Src/DasherCore/GameModule.h
index 8549cc3..6e6dda1 100644
--- a/Src/DasherCore/GameModule.h
+++ b/Src/DasherCore/GameModule.h
@@ -16,7 +16,7 @@ using namespace std;
#include "DasherTypes.h"
#include "DasherInterfaceBase.h"
#include "WordGeneratorBase.h"
-
+#include "DemoFilter.h"
namespace Dasher {
@@ -34,6 +34,7 @@ namespace Dasher {
*/
class CGameModule : protected CSettingsUser, protected TransientObserver<const CEditEvent *>, protected TransientObserver<CGameNodeDrawEvent*>, private TransientObserver<CDasherNode*>, private TransientObserver<CDasherView*> {
public:
+ friend class CDemoFilter;
/**
* Constructor
* @param pEventHandler A pointer to the event handler
diff --git a/Src/DasherCore/Makefile.am b/Src/DasherCore/Makefile.am
index 2b33044..f65426c 100644
--- a/Src/DasherCore/Makefile.am
+++ b/Src/DasherCore/Makefile.am
@@ -68,6 +68,8 @@ libdashercore_a_SOURCES = \
DasherViewSquare.inl \
DefaultFilter.cpp \
DefaultFilter.h \
+ DemoFilter.cpp \
+ DemoFilter.h \
DynamicButtons.cpp \
DynamicButtons.h \
DynamicFilter.cpp \
diff --git a/Src/DasherCore/OneButtonFilter.cpp b/Src/DasherCore/OneButtonFilter.cpp
index c09291b..7b728e3 100644
--- a/Src/DasherCore/OneButtonFilter.cpp
+++ b/Src/DasherCore/OneButtonFilter.cpp
@@ -4,6 +4,7 @@
#include "OneButtonFilter.h"
#include "Event.h"
#include "DasherScreen.h"
+#include "DasherModel.h"
using namespace Dasher;
diff --git a/Src/MacOSX/Dasher.xcodeproj/project.pbxproj b/Src/MacOSX/Dasher.xcodeproj/project.pbxproj
index 6592b6b..4155ef4 100755
--- a/Src/MacOSX/Dasher.xcodeproj/project.pbxproj
+++ b/Src/MacOSX/Dasher.xcodeproj/project.pbxproj
@@ -324,6 +324,8 @@
33135356102C6D8E00E28220 /* ButtonMode.h in Headers */ = {isa = PBXBuildFile; fileRef = 3313534E102C6D8E00E28220 /* ButtonMode.h */; };
3335F60013AB50E9004F9371 /* DashIntfSettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3335F5FE13AB50E9004F9371 /* DashIntfSettings.cpp */; };
3335F60113AB50E9004F9371 /* DashIntfSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 3335F5FF13AB50E9004F9371 /* DashIntfSettings.h */; };
+ 333B409412088AFA00235721 /* DemoFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 333B409212088AFA00235721 /* DemoFilter.cpp */; };
+ 333B409512088AFA00235721 /* DemoFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 333B409312088AFA00235721 /* DemoFilter.h */; };
3344F0691341297F001FACAB /* UserLogBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3344F0681341297F001FACAB /* UserLogBase.cpp */; };
334DE238135E3E68007C8D6D /* control.textlabels.xml in Resources */ = {isa = PBXBuildFile; fileRef = 334DE236135E3E68007C8D6D /* control.textlabels.xml */; };
334DE239135E3E68007C8D6D /* control.xml in Resources */ = {isa = PBXBuildFile; fileRef = 334DE237135E3E68007C8D6D /* control.xml */; };
@@ -728,6 +730,8 @@
3313534E102C6D8E00E28220 /* ButtonMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ButtonMode.h; sourceTree = "<group>"; };
3335F5FE13AB50E9004F9371 /* DashIntfSettings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DashIntfSettings.cpp; sourceTree = "<group>"; };
3335F5FF13AB50E9004F9371 /* DashIntfSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DashIntfSettings.h; sourceTree = "<group>"; };
+ 333B409212088AFA00235721 /* DemoFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DemoFilter.cpp; sourceTree = "<group>"; };
+ 333B409312088AFA00235721 /* DemoFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoFilter.h; sourceTree = "<group>"; };
3344F0681341297F001FACAB /* UserLogBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UserLogBase.cpp; sourceTree = "<group>"; };
334DE236135E3E68007C8D6D /* control.textlabels.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = control.textlabels.xml; sourceTree = "<group>"; };
334DE237135E3E68007C8D6D /* control.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = control.xml; sourceTree = "<group>"; };
@@ -955,6 +959,8 @@
1948BE3C0C226CFD001DFA32 /* DefaultFilter.h */,
33DDB9DE13B8AF360001C52D /* DynamicButtons.cpp */,
33DDB9DF13B8AF360001C52D /* DynamicButtons.h */,
+ 333B409212088AFA00235721 /* DemoFilter.cpp */,
+ 333B409312088AFA00235721 /* DemoFilter.h */,
3300115010A2EA7700D31B1D /* ExpansionPolicy.cpp */,
3300115110A2EA7700D31B1D /* ExpansionPolicy.h */,
1948BE3E0C226CFD001DFA32 /* DynamicFilter.cpp */,
@@ -1460,6 +1466,7 @@
33FC1D2C13ACE7E7007642CD /* ScreenGameModule.h in Headers */,
33C3BDD213854CC000C768E0 /* DasherTextView.h in Headers */,
33DDB9E113B8AF360001C52D /* DynamicButtons.h in Headers */,
+ 333B409512088AFA00235721 /* DemoFilter.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1816,6 +1823,7 @@
33FC1D2B13ACE7E7007642CD /* ScreenGameModule.cpp in Sources */,
33C3BDD313854CC000C768E0 /* DasherTextView.mm in Sources */,
33DDB9E013B8AF360001C52D /* DynamicButtons.cpp in Sources */,
+ 333B409412088AFA00235721 /* DemoFilter.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
diff --git a/Src/iPhone/Dasher.xcodeproj/project.pbxproj b/Src/iPhone/Dasher.xcodeproj/project.pbxproj
index ca50947..733f194 100755
--- a/Src/iPhone/Dasher.xcodeproj/project.pbxproj
+++ b/Src/iPhone/Dasher.xcodeproj/project.pbxproj
@@ -249,6 +249,7 @@
3378A23F1335425300A96C5D /* AbstractXMLParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3378A23D1335425200A96C5D /* AbstractXMLParser.cpp */; };
3378A267133543B800A96C5D /* control.xml in Resources */ = {isa = PBXBuildFile; fileRef = 3378A266133543B800A96C5D /* control.xml */; };
337ECC1B10DD5E0700D0C6A5 /* ExpansionPolicy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 337ECC1910DD5E0700D0C6A5 /* ExpansionPolicy.cpp */; };
+ 338B38FF1432071C0023A224 /* DemoFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 338B38FD1432071C0023A224 /* DemoFilter.cpp */; };
339E340E13C6206E007A2BCC /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = 339E340D13C6206E007A2BCC /* Default.png */; };
339F8A330FF5088000282847 /* CalibrationController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 339F8A320FF5088000282847 /* CalibrationController.mm */; };
33B3430813A8A927009AE0D5 /* DashIntfScreenMsgs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 33B3430613A8A927009AE0D5 /* DashIntfScreenMsgs.cpp */; };
@@ -693,6 +694,8 @@
3378A266133543B800A96C5D /* control.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = control.xml; path = ../../Data/control/control.xml; sourceTree = SOURCE_ROOT; };
337ECC1910DD5E0700D0C6A5 /* ExpansionPolicy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ExpansionPolicy.cpp; sourceTree = "<group>"; };
337ECC1A10DD5E0700D0C6A5 /* ExpansionPolicy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExpansionPolicy.h; sourceTree = "<group>"; };
+ 338B38FD1432071C0023A224 /* DemoFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DemoFilter.cpp; sourceTree = "<group>"; };
+ 338B38FE1432071C0023A224 /* DemoFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoFilter.h; sourceTree = "<group>"; };
339E340D13C6206E007A2BCC /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = "<group>"; };
339F8A310FF5088000282847 /* CalibrationController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CalibrationController.h; sourceTree = "<group>"; };
339F8A320FF5088000282847 /* CalibrationController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = CalibrationController.mm; sourceTree = "<group>"; };
@@ -1216,6 +1219,8 @@
3344FDAB0F71717C00506EAA /* DasherViewSquare.inl */,
3344FDAC0F71717C00506EAA /* DefaultFilter.cpp */,
3344FDAD0F71717C00506EAA /* DefaultFilter.h */,
+ 338B38FD1432071C0023A224 /* DemoFilter.cpp */,
+ 338B38FE1432071C0023A224 /* DemoFilter.h */,
33B6824E13CA4CC200F0A952 /* DynamicButtons.cpp */,
33B6824F13CA4CC200F0A952 /* DynamicButtons.h */,
3344FDAF0F71717C00506EAA /* DynamicFilter.cpp */,
@@ -1723,6 +1728,7 @@
33DFE416137AA32300F86CDE /* WordGeneratorBase.cpp in Sources */,
3360335813ABDF3700417DFE /* ScreenGameModule.cpp in Sources */,
33B6825013CA4CC300F0A952 /* DynamicButtons.cpp in Sources */,
+ 338B38FF1432071C0023A224 /* DemoFilter.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]