diff --git a/BuildingEscape/BuildingEscape.sln b/BuildingEscape/BuildingEscape.sln index 804376a..c803f4b 100644 --- a/BuildingEscape/BuildingEscape.sln +++ b/BuildingEscape/BuildingEscape.sln @@ -3,13 +3,13 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 14 VisualStudioVersion = 14.0.24720.0 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Engine", "Engine", "{A6FCF90C-3A4A-41C3-A8C4-80B2F8984CF2}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Engine", "Engine", "{0BBA4F71-35E7-47D8-87C5-3BE82444DA1F}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Games", "Games", "{458EC926-0BF6-4925-8E33-1E73ADF4263C}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Games", "Games", "{1491E6F1-7FD3-443B-BB46-EF53DBBE5B8A}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UE4", "Intermediate\ProjectFiles\UE4.vcxproj", "{48B335D4-FA7B-4487-BFDD-F41DE73A23DA}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UE4", "Intermediate\ProjectFiles\UE4.vcxproj", "{3407FE20-2BF8-407A-B69A-63F532E05A2D}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BuildingEscape", "Intermediate\ProjectFiles\BuildingEscape.vcxproj", "{86132F41-CC19-4924-AF3E-803F2FBE6A83}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BuildingEscape", "Intermediate\ProjectFiles\BuildingEscape.vcxproj", "{22955E52-E99F-4F8E-9A61-119B697F1196}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -25,52 +25,52 @@ Global Shipping|Win64 = Shipping|Win64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {48B335D4-FA7B-4487-BFDD-F41DE73A23DA}.DebugGame Editor|Win32.ActiveCfg = BuiltWithUnrealBuildTool|Win32 - {48B335D4-FA7B-4487-BFDD-F41DE73A23DA}.DebugGame Editor|Win32.Build.0 = BuiltWithUnrealBuildTool|Win32 - {48B335D4-FA7B-4487-BFDD-F41DE73A23DA}.DebugGame Editor|Win64.ActiveCfg = BuiltWithUnrealBuildTool|Win32 - {48B335D4-FA7B-4487-BFDD-F41DE73A23DA}.DebugGame Editor|Win64.Build.0 = BuiltWithUnrealBuildTool|Win32 - {48B335D4-FA7B-4487-BFDD-F41DE73A23DA}.DebugGame|Win32.ActiveCfg = BuiltWithUnrealBuildTool|Win32 - {48B335D4-FA7B-4487-BFDD-F41DE73A23DA}.DebugGame|Win32.Build.0 = BuiltWithUnrealBuildTool|Win32 - {48B335D4-FA7B-4487-BFDD-F41DE73A23DA}.DebugGame|Win64.ActiveCfg = BuiltWithUnrealBuildTool|Win32 - {48B335D4-FA7B-4487-BFDD-F41DE73A23DA}.DebugGame|Win64.Build.0 = BuiltWithUnrealBuildTool|Win32 - {48B335D4-FA7B-4487-BFDD-F41DE73A23DA}.Development Editor|Win32.ActiveCfg = BuiltWithUnrealBuildTool|Win32 - {48B335D4-FA7B-4487-BFDD-F41DE73A23DA}.Development Editor|Win32.Build.0 = BuiltWithUnrealBuildTool|Win32 - {48B335D4-FA7B-4487-BFDD-F41DE73A23DA}.Development Editor|Win64.ActiveCfg = BuiltWithUnrealBuildTool|Win32 - {48B335D4-FA7B-4487-BFDD-F41DE73A23DA}.Development Editor|Win64.Build.0 = BuiltWithUnrealBuildTool|Win32 - {48B335D4-FA7B-4487-BFDD-F41DE73A23DA}.Development|Win32.ActiveCfg = BuiltWithUnrealBuildTool|Win32 - {48B335D4-FA7B-4487-BFDD-F41DE73A23DA}.Development|Win32.Build.0 = BuiltWithUnrealBuildTool|Win32 - {48B335D4-FA7B-4487-BFDD-F41DE73A23DA}.Development|Win64.ActiveCfg = BuiltWithUnrealBuildTool|Win32 - {48B335D4-FA7B-4487-BFDD-F41DE73A23DA}.Development|Win64.Build.0 = BuiltWithUnrealBuildTool|Win32 - {48B335D4-FA7B-4487-BFDD-F41DE73A23DA}.Shipping|Win32.ActiveCfg = BuiltWithUnrealBuildTool|Win32 - {48B335D4-FA7B-4487-BFDD-F41DE73A23DA}.Shipping|Win32.Build.0 = BuiltWithUnrealBuildTool|Win32 - {48B335D4-FA7B-4487-BFDD-F41DE73A23DA}.Shipping|Win64.ActiveCfg = BuiltWithUnrealBuildTool|Win32 - {48B335D4-FA7B-4487-BFDD-F41DE73A23DA}.Shipping|Win64.Build.0 = BuiltWithUnrealBuildTool|Win32 - {86132F41-CC19-4924-AF3E-803F2FBE6A83}.DebugGame Editor|Win32.ActiveCfg = DebugGame_Editor|Win32 - {86132F41-CC19-4924-AF3E-803F2FBE6A83}.DebugGame Editor|Win32.Build.0 = DebugGame_Editor|Win32 - {86132F41-CC19-4924-AF3E-803F2FBE6A83}.DebugGame Editor|Win64.ActiveCfg = DebugGame_Editor|x64 - {86132F41-CC19-4924-AF3E-803F2FBE6A83}.DebugGame Editor|Win64.Build.0 = DebugGame_Editor|x64 - {86132F41-CC19-4924-AF3E-803F2FBE6A83}.DebugGame|Win32.ActiveCfg = DebugGame_Game|Win32 - {86132F41-CC19-4924-AF3E-803F2FBE6A83}.DebugGame|Win32.Build.0 = DebugGame_Game|Win32 - {86132F41-CC19-4924-AF3E-803F2FBE6A83}.DebugGame|Win64.ActiveCfg = DebugGame_Game|x64 - {86132F41-CC19-4924-AF3E-803F2FBE6A83}.DebugGame|Win64.Build.0 = DebugGame_Game|x64 - {86132F41-CC19-4924-AF3E-803F2FBE6A83}.Development Editor|Win32.ActiveCfg = Development_Editor|Win32 - {86132F41-CC19-4924-AF3E-803F2FBE6A83}.Development Editor|Win32.Build.0 = Development_Editor|Win32 - {86132F41-CC19-4924-AF3E-803F2FBE6A83}.Development Editor|Win64.ActiveCfg = Development_Editor|x64 - {86132F41-CC19-4924-AF3E-803F2FBE6A83}.Development Editor|Win64.Build.0 = Development_Editor|x64 - {86132F41-CC19-4924-AF3E-803F2FBE6A83}.Development|Win32.ActiveCfg = Development_Game|Win32 - {86132F41-CC19-4924-AF3E-803F2FBE6A83}.Development|Win32.Build.0 = Development_Game|Win32 - {86132F41-CC19-4924-AF3E-803F2FBE6A83}.Development|Win64.ActiveCfg = Development_Game|x64 - {86132F41-CC19-4924-AF3E-803F2FBE6A83}.Development|Win64.Build.0 = Development_Game|x64 - {86132F41-CC19-4924-AF3E-803F2FBE6A83}.Shipping|Win32.ActiveCfg = Shipping_Game|Win32 - {86132F41-CC19-4924-AF3E-803F2FBE6A83}.Shipping|Win32.Build.0 = Shipping_Game|Win32 - {86132F41-CC19-4924-AF3E-803F2FBE6A83}.Shipping|Win64.ActiveCfg = Shipping_Game|x64 - {86132F41-CC19-4924-AF3E-803F2FBE6A83}.Shipping|Win64.Build.0 = Shipping_Game|x64 + {3407FE20-2BF8-407A-B69A-63F532E05A2D}.DebugGame Editor|Win32.ActiveCfg = BuiltWithUnrealBuildTool|Win32 + {3407FE20-2BF8-407A-B69A-63F532E05A2D}.DebugGame Editor|Win32.Build.0 = BuiltWithUnrealBuildTool|Win32 + {3407FE20-2BF8-407A-B69A-63F532E05A2D}.DebugGame Editor|Win64.ActiveCfg = BuiltWithUnrealBuildTool|Win32 + {3407FE20-2BF8-407A-B69A-63F532E05A2D}.DebugGame Editor|Win64.Build.0 = BuiltWithUnrealBuildTool|Win32 + {3407FE20-2BF8-407A-B69A-63F532E05A2D}.DebugGame|Win32.ActiveCfg = BuiltWithUnrealBuildTool|Win32 + {3407FE20-2BF8-407A-B69A-63F532E05A2D}.DebugGame|Win32.Build.0 = BuiltWithUnrealBuildTool|Win32 + {3407FE20-2BF8-407A-B69A-63F532E05A2D}.DebugGame|Win64.ActiveCfg = BuiltWithUnrealBuildTool|Win32 + {3407FE20-2BF8-407A-B69A-63F532E05A2D}.DebugGame|Win64.Build.0 = BuiltWithUnrealBuildTool|Win32 + {3407FE20-2BF8-407A-B69A-63F532E05A2D}.Development Editor|Win32.ActiveCfg = BuiltWithUnrealBuildTool|Win32 + {3407FE20-2BF8-407A-B69A-63F532E05A2D}.Development Editor|Win32.Build.0 = BuiltWithUnrealBuildTool|Win32 + {3407FE20-2BF8-407A-B69A-63F532E05A2D}.Development Editor|Win64.ActiveCfg = BuiltWithUnrealBuildTool|Win32 + {3407FE20-2BF8-407A-B69A-63F532E05A2D}.Development Editor|Win64.Build.0 = BuiltWithUnrealBuildTool|Win32 + {3407FE20-2BF8-407A-B69A-63F532E05A2D}.Development|Win32.ActiveCfg = BuiltWithUnrealBuildTool|Win32 + {3407FE20-2BF8-407A-B69A-63F532E05A2D}.Development|Win32.Build.0 = BuiltWithUnrealBuildTool|Win32 + {3407FE20-2BF8-407A-B69A-63F532E05A2D}.Development|Win64.ActiveCfg = BuiltWithUnrealBuildTool|Win32 + {3407FE20-2BF8-407A-B69A-63F532E05A2D}.Development|Win64.Build.0 = BuiltWithUnrealBuildTool|Win32 + {3407FE20-2BF8-407A-B69A-63F532E05A2D}.Shipping|Win32.ActiveCfg = BuiltWithUnrealBuildTool|Win32 + {3407FE20-2BF8-407A-B69A-63F532E05A2D}.Shipping|Win32.Build.0 = BuiltWithUnrealBuildTool|Win32 + {3407FE20-2BF8-407A-B69A-63F532E05A2D}.Shipping|Win64.ActiveCfg = BuiltWithUnrealBuildTool|Win32 + {3407FE20-2BF8-407A-B69A-63F532E05A2D}.Shipping|Win64.Build.0 = BuiltWithUnrealBuildTool|Win32 + {22955E52-E99F-4F8E-9A61-119B697F1196}.DebugGame Editor|Win32.ActiveCfg = DebugGame_Editor|Win32 + {22955E52-E99F-4F8E-9A61-119B697F1196}.DebugGame Editor|Win32.Build.0 = DebugGame_Editor|Win32 + {22955E52-E99F-4F8E-9A61-119B697F1196}.DebugGame Editor|Win64.ActiveCfg = DebugGame_Editor|x64 + {22955E52-E99F-4F8E-9A61-119B697F1196}.DebugGame Editor|Win64.Build.0 = DebugGame_Editor|x64 + {22955E52-E99F-4F8E-9A61-119B697F1196}.DebugGame|Win32.ActiveCfg = DebugGame_Game|Win32 + {22955E52-E99F-4F8E-9A61-119B697F1196}.DebugGame|Win32.Build.0 = DebugGame_Game|Win32 + {22955E52-E99F-4F8E-9A61-119B697F1196}.DebugGame|Win64.ActiveCfg = DebugGame_Game|x64 + {22955E52-E99F-4F8E-9A61-119B697F1196}.DebugGame|Win64.Build.0 = DebugGame_Game|x64 + {22955E52-E99F-4F8E-9A61-119B697F1196}.Development Editor|Win32.ActiveCfg = Development_Editor|Win32 + {22955E52-E99F-4F8E-9A61-119B697F1196}.Development Editor|Win32.Build.0 = Development_Editor|Win32 + {22955E52-E99F-4F8E-9A61-119B697F1196}.Development Editor|Win64.ActiveCfg = Development_Editor|x64 + {22955E52-E99F-4F8E-9A61-119B697F1196}.Development Editor|Win64.Build.0 = Development_Editor|x64 + {22955E52-E99F-4F8E-9A61-119B697F1196}.Development|Win32.ActiveCfg = Development_Game|Win32 + {22955E52-E99F-4F8E-9A61-119B697F1196}.Development|Win32.Build.0 = Development_Game|Win32 + {22955E52-E99F-4F8E-9A61-119B697F1196}.Development|Win64.ActiveCfg = Development_Game|x64 + {22955E52-E99F-4F8E-9A61-119B697F1196}.Development|Win64.Build.0 = Development_Game|x64 + {22955E52-E99F-4F8E-9A61-119B697F1196}.Shipping|Win32.ActiveCfg = Shipping_Game|Win32 + {22955E52-E99F-4F8E-9A61-119B697F1196}.Shipping|Win32.Build.0 = Shipping_Game|Win32 + {22955E52-E99F-4F8E-9A61-119B697F1196}.Shipping|Win64.ActiveCfg = Shipping_Game|x64 + {22955E52-E99F-4F8E-9A61-119B697F1196}.Shipping|Win64.Build.0 = Shipping_Game|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution - {48B335D4-FA7B-4487-BFDD-F41DE73A23DA} = {A6FCF90C-3A4A-41C3-A8C4-80B2F8984CF2} - {86132F41-CC19-4924-AF3E-803F2FBE6A83} = {458EC926-0BF6-4925-8E33-1E73ADF4263C} + {3407FE20-2BF8-407A-B69A-63F532E05A2D} = {0BBA4F71-35E7-47D8-87C5-3BE82444DA1F} + {22955E52-E99F-4F8E-9A61-119B697F1196} = {1491E6F1-7FD3-443B-BB46-EF53DBBE5B8A} EndGlobalSection EndGlobal diff --git a/BuildingEscape/Content/DefaultPawn_BP.uasset b/BuildingEscape/Content/DefaultPawn_BP.uasset index 2bf3ef6..51c7d70 100644 Binary files a/BuildingEscape/Content/DefaultPawn_BP.uasset and b/BuildingEscape/Content/DefaultPawn_BP.uasset differ diff --git a/BuildingEscape/Content/IsoLock_BP.uasset b/BuildingEscape/Content/IsoLock_BP.uasset new file mode 100644 index 0000000..4442919 Binary files /dev/null and b/BuildingEscape/Content/IsoLock_BP.uasset differ diff --git a/BuildingEscape/Content/My_Pulse.uasset b/BuildingEscape/Content/My_Pulse.uasset new file mode 100644 index 0000000..4c86c84 Binary files /dev/null and b/BuildingEscape/Content/My_Pulse.uasset differ diff --git a/BuildingEscape/Content/NewMap.umap b/BuildingEscape/Content/NewMap.umap index 4722470..432ab5b 100644 Binary files a/BuildingEscape/Content/NewMap.umap and b/BuildingEscape/Content/NewMap.umap differ diff --git a/BuildingEscape/Content/Opening_Door.uasset b/BuildingEscape/Content/Opening_Door.uasset new file mode 100644 index 0000000..96d0c39 Binary files /dev/null and b/BuildingEscape/Content/Opening_Door.uasset differ diff --git a/BuildingEscape/Content/StarterContent/Architecture/Floor_400x400.uasset b/BuildingEscape/Content/StarterContent/Architecture/Floor_400x400.uasset index b51b70f..dc7047b 100644 Binary files a/BuildingEscape/Content/StarterContent/Architecture/Floor_400x400.uasset and b/BuildingEscape/Content/StarterContent/Architecture/Floor_400x400.uasset differ diff --git a/BuildingEscape/Content/StarterContent/Props/SM_Door.uasset b/BuildingEscape/Content/StarterContent/Props/SM_Door.uasset index 7ccfb77..cf15f19 100644 Binary files a/BuildingEscape/Content/StarterContent/Props/SM_Door.uasset and b/BuildingEscape/Content/StarterContent/Props/SM_Door.uasset differ diff --git a/BuildingEscape/Source/BuildingEscape/FBullCowGame.cpp b/BuildingEscape/Source/BuildingEscape/FBullCowGame.cpp new file mode 100644 index 0000000..d3804bb --- /dev/null +++ b/BuildingEscape/Source/BuildingEscape/FBullCowGame.cpp @@ -0,0 +1,125 @@ +// Copyright Ben Tristem 2016. + +#include "BuildingEscape.h" +#include "FBullCowGame.h" + +FBullCowGame::FBullCowGame() { Reset(); } // default constructor + +int32 FBullCowGame::GetCurrentTry() const { return MyCurrentTry; } +int32 FBullCowGame::GetHiddenWordLength() const { return MyHiddenWord.Len(); } +bool FBullCowGame::IsGameWon() const { return bGameIsWon; } + +int32 FBullCowGame::GetMaxTries() const +{ + TMap WordLengthToMaxTries; + WordLengthToMaxTries.Add(3, 4); + WordLengthToMaxTries.Add(4, 7); + WordLengthToMaxTries.Add(5, 10); + WordLengthToMaxTries.Add(6, 16); + WordLengthToMaxTries.Add(7, 20); + return WordLengthToMaxTries[MyHiddenWord.Len()]; +} + +void FBullCowGame::Reset() +{ + const FString HIDDEN_WORD = "plane"; // this MUST be an isogram + MyHiddenWord = HIDDEN_WORD; + + MyCurrentTry = 1; + bGameIsWon = false; + return; +} + + +EGuessStatus FBullCowGame::CheckGuessValidity(FString Guess) const +{ + if (!IsIsogram(Guess)) // if the guess isn't an isogram + { + return EGuessStatus::Not_Isogram; + } + else if (!IsLowercase(Guess)) // if the guess isn't all lowercase + { + return EGuessStatus::Not_Lowercase; + } + else if (Guess.Len() != GetHiddenWordLength()) // if the guess length is wrong + { + return EGuessStatus::Wrong_Length; + } + else + { + return EGuessStatus::OK; + } +} + + +// receives a VALID guess, incriments turn, and returns count +FBullCowCount FBullCowGame::SubmitValidGuess(FString Guess) +{ + MyCurrentTry++; + FBullCowCount BullCowCount; + int32 WordLength = MyHiddenWord.Len(); // assuming same length as guess + + // loop through all letters in the hidden word + for (int32 MHWChar = 0; MHWChar < WordLength; MHWChar++) + { + // compare letters against the guess + for (int32 GChar = 0; GChar < WordLength; GChar++) + { + // if they match then + if (Guess[GChar] == MyHiddenWord[MHWChar]) + { + if (MHWChar == GChar) + { // if they're in the same place + BullCowCount.Bulls++; // incriment bulls + } + else + { + BullCowCount.Cows++; // must be a cow + } + } + } + } + if (BullCowCount.Bulls == WordLength) + { + bGameIsWon = true; + } + else + { + bGameIsWon = false; + } + return BullCowCount; +} + +bool FBullCowGame::IsIsogram(FString Word) const +{ + // treat 0 and 1 letter words as isograms + if (Word.Len() <= 1) { return true; } + + TMap LetterSeen; // setup our map + for (auto Letter : Word) // for all letters of the word + { + Letter = tolower(Letter); // handle mixed case + if (LetterSeen[Letter]) + {// if the letter is in the map + return false; // we do NOT have an isogram + } + else + { + LetterSeen[Letter] = true;// add the letter to the map + } + } + + return true; // for example in cases where /0 is entered +} + +bool FBullCowGame::IsLowercase(FString Word) const +{ + for (auto Letter : Word) + { + if (!islower(Letter)) // if not a lowercase letter + { + return false; + } + } + return true; +} diff --git a/BuildingEscape/Source/BuildingEscape/FBullCowGame.h b/BuildingEscape/Source/BuildingEscape/FBullCowGame.h new file mode 100644 index 0000000..e5d5d9a --- /dev/null +++ b/BuildingEscape/Source/BuildingEscape/FBullCowGame.h @@ -0,0 +1,44 @@ +// Copyright Ben Tristem 2016. + +#pragma once + +struct FBullCowCount +{ + int32 Bulls = 0; + int32 Cows = 0; +}; + +enum class EGuessStatus +{ + Invalid_Status, + OK, + Not_Isogram, + Wrong_Length, + Not_Lowercase +}; + +class BUILDINGESCAPE_API FBullCowGame +{ +public: + FBullCowGame(); // constructor + + int32 GetMaxTries() const; + int32 GetCurrentTry() const; + int32 GetHiddenWordLength() const; + bool IsGameWon() const; + EGuessStatus CheckGuessValidity(FString) const; + + void Reset(); + FBullCowCount SubmitValidGuess(FString); + + + // ^^ Please try and ignore this and focus on the interface above ^^ +private: + // see constructor for initialisation + int32 MyCurrentTry; + FString MyHiddenWord; + bool bGameIsWon; + + bool IsIsogram(FString) const; + bool IsLowercase(FString) const; +}; diff --git a/BuildingEscape/Source/BuildingEscape/IsoLock.cpp b/BuildingEscape/Source/BuildingEscape/IsoLock.cpp new file mode 100644 index 0000000..1ace564 --- /dev/null +++ b/BuildingEscape/Source/BuildingEscape/IsoLock.cpp @@ -0,0 +1,28 @@ +// Copyright Ben Tristem 2016. + +#include "BuildingEscape.h" +#include "IsoLock.h" + + +// Sets default values +AIsoLock::AIsoLock() +{ + // Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it. + PrimaryActorTick.bCanEverTick = true; + +} + +// Called when the game starts or when spawned +void AIsoLock::BeginPlay() +{ + Super::BeginPlay(); + +} + +// Called every frame +void AIsoLock::Tick( float DeltaTime ) +{ + Super::Tick( DeltaTime ); + +} + diff --git a/BuildingEscape/Source/BuildingEscape/IsoLock.h b/BuildingEscape/Source/BuildingEscape/IsoLock.h new file mode 100644 index 0000000..a47cc89 --- /dev/null +++ b/BuildingEscape/Source/BuildingEscape/IsoLock.h @@ -0,0 +1,25 @@ +// Copyright Ben Tristem 2016. + +#pragma once + +#include "GameFramework/Actor.h" +#include "IsoLock.generated.h" + +UCLASS() +class BUILDINGESCAPE_API AIsoLock : public AActor +{ + GENERATED_BODY() + +public: + // Sets default values for this actor's properties + AIsoLock(); + + // Called when the game starts or when spawned + virtual void BeginPlay() override; + + // Called every frame + virtual void Tick( float DeltaSeconds ) override; + + + +}; diff --git a/BuildingEscape/Source/BuildingEscape/OpenDoor.cpp b/BuildingEscape/Source/BuildingEscape/OpenDoor.cpp index b8f2039..b0c6ca0 100644 --- a/BuildingEscape/Source/BuildingEscape/OpenDoor.cpp +++ b/BuildingEscape/Source/BuildingEscape/OpenDoor.cpp @@ -26,7 +26,8 @@ void UOpenDoor::BeginPlay() void UOpenDoor::OpenDoor() { - Owner->SetActorRotation(FRotator(0.f, OpenAngle, 0.f)); + // Owner->SetActorRotation(FRotator(0.f, OpenAngle, 0.f)); + DonkeyEvent.Broadcast(); } void UOpenDoor::CloseDoor() @@ -57,16 +58,22 @@ float UOpenDoor::GetTotalMassOfActorsOnPlate() { float TotalMass = 0.f; - // Find all the overlapping actors - TArray OverlappingActors; - PressurePlate->GetOverlappingActors(OUT OverlappingActors); - - // Iterate through them adding their masses - for (const auto& Actor : OverlappingActors) + if (!PressurePlate) { - TotalMass += Actor->FindComponentByClass()->GetMass(); - UE_LOG(LogTemp, Warning, TEXT("%s on pressure plate"), *Actor->GetName()) + UE_LOG(LogTemp, Error, TEXT("%s not linked to a pressure plate"), *GetOwner()->GetName()) } + else + { + // Find all the overlapping actors + TArray OverlappingActors; + PressurePlate->GetOverlappingActors(OUT OverlappingActors); + // Iterate through them adding their masses + for (const auto& Actor : OverlappingActors) + { + TotalMass += Actor->FindComponentByClass()->GetMass(); + UE_LOG(LogTemp, Warning, TEXT("%s on pressure plate"), *Actor->GetName()) + } + } return TotalMass; } \ No newline at end of file diff --git a/BuildingEscape/Source/BuildingEscape/OpenDoor.h b/BuildingEscape/Source/BuildingEscape/OpenDoor.h index 23cbf27..3825f92 100644 --- a/BuildingEscape/Source/BuildingEscape/OpenDoor.h +++ b/BuildingEscape/Source/BuildingEscape/OpenDoor.h @@ -5,6 +5,7 @@ #include "Components/ActorComponent.h" #include "OpenDoor.generated.h" +DECLARE_DYNAMIC_MULTICAST_DELEGATE(FDonkeyEvent); UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) ) class BUILDINGESCAPE_API UOpenDoor : public UActorComponent @@ -24,11 +25,13 @@ class BUILDINGESCAPE_API UOpenDoor : public UActorComponent // Called every frame virtual void TickComponent( float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction ) override; + UPROPERTY(BluePrintAssignable) + FDonkeyEvent DonkeyEvent; private: UPROPERTY(EditAnywhere) float OpenAngle = -90.0f; - + UPROPERTY(EditAnywhere) ATriggerVolume* PressurePlate; @@ -41,4 +44,5 @@ class BUILDINGESCAPE_API UOpenDoor : public UActorComponent // Returns total mass in kg float GetTotalMassOfActorsOnPlate(); + };