From d2f3e718a72f44db6e21df592ac8f320db1a5346 Mon Sep 17 00:00:00 2001 From: Modnark <66146584+Modnark@users.noreply.github.com> Date: Tue, 11 Oct 2022 10:03:04 -0400 Subject: [PATCH] Very basic implementation of OnTouch --- content/sounds/bass.wav | Bin 0 -> 6380 bytes content/sounds/victory.wav | Bin 0 -> 26680 bytes src/include/DataModelV2/PartInstance.h | 25 ++++-- src/source/DataModelV2/LevelInstance.cpp | 4 +- src/source/DataModelV2/PartInstance.cpp | 107 +++++++++++++++++++++++ src/source/XplicitNgine/XplicitNgine.cpp | 27 ++++-- 6 files changed, 149 insertions(+), 14 deletions(-) create mode 100644 content/sounds/bass.wav create mode 100644 content/sounds/victory.wav diff --git a/content/sounds/bass.wav b/content/sounds/bass.wav new file mode 100644 index 0000000000000000000000000000000000000000..5f4b7913ba5c493f74c13fd17a7fc50ddfef659f GIT binary patch literal 6380 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 j4EMDkdDFij8hMhoP1wLdEqs&}Q*<@EXn3sb# getProperties(); virtual void PropUpdate(LPPROPGRIDITEM &pItem); @@ -87,4 +92,12 @@ private: bool dragging; Box itemBox; GLuint glList; + + // OnTouch + bool singleShot; + int touchesToTrigger; + int uniqueObjectsToTrigger; + int changeScore; + float changeTimer; + bool _touchedOnce; }; \ No newline at end of file diff --git a/src/source/DataModelV2/LevelInstance.cpp b/src/source/DataModelV2/LevelInstance.cpp index cd51b6d..9aea060 100644 --- a/src/source/DataModelV2/LevelInstance.cpp +++ b/src/source/DataModelV2/LevelInstance.cpp @@ -123,7 +123,7 @@ std::vector LevelInstance::getProperties() (LPARAM)scoreTxt, PIT_EDIT)); - properties.push_back(createPGI("Gameplay", + properties.push_back(createPGI("Gameplay", "TimerUpAction", "Some temporary string here", (LPARAM)strActionType(TimerUpAction), @@ -131,7 +131,7 @@ std::vector LevelInstance::getProperties() TEXT("Nothing\0Pause\0Lose\0Draw\0Win\0") )); - properties.push_back(createPGI("Gameplay", + properties.push_back(createPGI("Gameplay", "TimerAffectsScore", "Some temporary string here", (LPARAM)strAffectType(TimerAffectsScore), diff --git a/src/source/DataModelV2/PartInstance.cpp b/src/source/DataModelV2/PartInstance.cpp index 290fa0c..defcd56 100644 --- a/src/source/DataModelV2/PartInstance.cpp +++ b/src/source/DataModelV2/PartInstance.cpp @@ -4,6 +4,8 @@ #include #include #include "Faces.h" +#include "AudioPlayer.h" +#include "StringFunctions.h" PartInstance::PartInstance(void) { @@ -27,6 +29,7 @@ PartInstance::PartInstance(void) left = Enum::SurfaceType::Smooth; bottom = Enum::SurfaceType::Smooth; shape = Enum::Shape::Block; + _touchedOnce = false; // OnTouch singleShot = true; @@ -34,6 +37,7 @@ PartInstance::PartInstance(void) uniqueObjectsToTrigger = 1; changeScore = 0; changeTimer = 0; + singleShot = true; } bool PartInstance::isDragging() @@ -67,6 +71,32 @@ Vector3 PartInstance::getRotVelocity() return rotVelocity; } +// OnTouch +bool PartInstance::isSingleShot() +{ + return singleShot; +} + +int PartInstance::getTouchesToTrigger() +{ + return touchesToTrigger; +} + +int PartInstance::getUniqueObjectsToTrigger() +{ + return uniqueObjectsToTrigger; +} + +int PartInstance::getChangeScore() +{ + return changeScore; +} + +float PartInstance::getChangeTimer() +{ + return changeTimer; +} + void PartInstance::setVelocity(Vector3 v) { velocity = v; @@ -197,6 +227,8 @@ PartInstance::PartInstance(const PartInstance &oinst) changeTimer = oinst.changeTimer; OnTouchAction = oinst.OnTouchAction; OnTouchSound = oinst.OnTouchSound; + singleShot = oinst.singleShot; + _touchedOnce = false; } void PartInstance::setSize(Vector3 newSize) @@ -459,6 +491,46 @@ static Enum::Sound::Value EnumOnTouchSoundType(TCHAR* option) return Enum::Sound::NoSound; } +void PartInstance::onTouch() +{ + if(singleShot && _touchedOnce) + return; + + if(singleShot && !_touchedOnce) + _touchedOnce = true; + + g_dataModel->getLevel()->score += changeScore; + g_dataModel->getLevel()->timer += changeTimer; + + switch(OnTouchAction) + { + case Enum::ActionType::Nothing: + break; + case Enum::ActionType::Pause: + break; + case Enum::ActionType::Lose: + g_dataModel->getLevel()->loseCondition(); + break; + case Enum::ActionType::Draw: + break; + case Enum::ActionType::Win: + g_dataModel->getLevel()->winCondition(); + break; + } + + switch(OnTouchSound) + { + case Enum::Sound::NoSound: + break; + case Enum::Sound::Victory: + AudioPlayer::playSound(GetFileInPath("/content/sounds/victory.wav")); + break; + case Enum::Sound::Boing: + AudioPlayer::playSound(GetFileInPath("/content/sounds/boing.wav")); + break; + } +} + void PartInstance::PropUpdate(LPPROPGRIDITEM &item) { setChanged(); @@ -526,9 +598,25 @@ void PartInstance::PropUpdate(LPPROPGRIDITEM &item) { OnTouchSound = EnumOnTouchSoundType((TCHAR*)item->lpCurValue); } + else if (strcmp(item->lpszPropName, "ChangeScore") == 0) + { + changeScore = atoi((LPSTR)item->lpCurValue); + } + else if (strcmp(item->lpszPropName, "ChangeTimer") == 0) + { + changeTimer = atof((LPSTR)item->lpCurValue); + } + else if (strcmp(item->lpszPropName, "SingleShot") == 0) + { + singleShot = item->lpCurValue == TRUE; + } else PVInstance::PropUpdate(item); } +// This needs to be changed, buffer size of 12 is way too small +// Crash occurs if you put a huge number in +char changeTimerTxt[12]; +char changeScoreTxt[12]; std::vector PartInstance::getProperties() { std::vector properties = PVInstance::getProperties(); @@ -581,6 +669,25 @@ std::vector PartInstance::getProperties() PIT_COMBO, TEXT("NoSound\0Victory\0Boing\0") )); + + sprintf_s(changeScoreTxt, "%d", changeScore); + sprintf_s(changeTimerTxt, "%g", changeTimer); + properties.push_back(createPGI("OnTouch", + "ChangeScore", + "How the score is affected when touched", + (LPARAM)changeScoreTxt, + PIT_EDIT)); + properties.push_back(createPGI("OnTouch", + "ChangeTimer", + "How the timer is affected when touched", + (LPARAM)changeTimerTxt, + PIT_EDIT)); + properties.push_back(createPGI("OnTouch", + "SingleShot", + "Whether or not Action happens only once", + (LPARAM)singleShot, + PIT_CHECK + )); return properties; } diff --git a/src/source/XplicitNgine/XplicitNgine.cpp b/src/source/XplicitNgine/XplicitNgine.cpp index 7421fb7..8373c8f 100644 --- a/src/source/XplicitNgine/XplicitNgine.cpp +++ b/src/source/XplicitNgine/XplicitNgine.cpp @@ -25,10 +25,10 @@ XplicitNgine::~XplicitNgine() dCloseODE(); } -void XplicitNgine::resetBody(PartInstance* partInstance) -{ - deleteBody(partInstance); - createBody(partInstance); +void XplicitNgine::resetBody(PartInstance* partInstance) +{ + deleteBody(partInstance); + createBody(partInstance); } void collisionCallback(void *data, dGeomID o1, dGeomID o2) @@ -37,10 +37,12 @@ void collisionCallback(void *data, dGeomID o1, dGeomID o2) dBodyID b1 = dGeomGetBody(o1); dBodyID b2 = dGeomGetBody(o2); - + if (b1 && b2 && dAreConnected(b1, b2)) return; + + const int N = 4; dContact contact[N]; n = dCollide (o1,o2,N,&contact[0].geom,sizeof(dContact)); @@ -62,8 +64,17 @@ void collisionCallback(void *data, dGeomID o1, dGeomID o2) g_xplicitNgine->contactgroup, contact+i ); - + dJointAttach (c,b1,b2); + + if(b1 != NULL) + { + PartInstance* touched = (PartInstance*)dGeomGetData(o2); + if(touched != NULL) + { + touched->onTouch(); + } + } } } } @@ -123,6 +134,7 @@ void XplicitNgine::createBody(PartInstance* partInstance) partInstance->physBody = dBodyCreate(physWorld); dBodySetData(partInstance->physBody, partInstance); + // Create geom if(partInstance->shape == Enum::Shape::Block) { @@ -140,6 +152,9 @@ void XplicitNgine::createBody(PartInstance* partInstance) partInstance->physGeom[0] = dCreateSphere(physSpace, partSize[0]/2); } + if(partInstance->physGeom[0]) + dGeomSetData(partInstance->physGeom[0], partInstance); + dMass mass; mass.setBox(sqrt(partSize.x*2), sqrt(partSize.y*2), sqrt(partSize.z*2), 0.7F); dBodySetMass(partInstance->physBody, &mass);