- Added field to conditionally enable/disable chunk generation (useful for testmaps)
- Re-added projectiles from the FirstPersonCPP template to the Galavant FPCharacter while I'm deciding what I want to do for combat. Backspace is the fire button (testing only, this would be a dumb bind)
- Added footstep sound to several animations to hopefully make things feel a bit more solid
- Added janky explicit audio playing in FPCharacter for walking sounds. This will be taken out once a full body is used instead of floating arms
- Visual Studio Code project is now the Unreal GenerateProjectFiles output
- Removed some assets which weren't being used
- The skeletal mesh I was using for my characters was 41,000 triangles, so my framerate was terrible with twenty of them on screen and animated. I created a low poly version that makes the game run smoothly. It was useful to learn how the skeletal mesh pipeline operates with Blender. The game runs at around 180 fps on my machine now (up from 40 fps)
- I added some LOD settings from the internet which may or may not work
- Added a "Minimal" map which deletes things like the NavMesh volume. This was while I was trying to figure out what was so slow
- Added simple keybinds for exiting the game (Escape), pausing Galavant simulation (P), and toggling mouselook (which doesn't work yet)
- Attempted to hook a collision sphere to a bone so as to simulate melee combat, but failed. The sphere doesn't seem to send collision events, despite my best efforts in telling it to
- HUD minimap now updates every 15 seconds. It is pretty performance intensive; I'm going to have to come up with a better solution at some point
- UnrealMovementComponent now disallows movement if an Agent is unconscious. It does this instead of making AgentComponentManager tell it what speeds things should go. I haven't yet removed that feature from the MovementManager API; maybe it'll be useful in the future?
- CharacterManager now handles ragdoll for Characters based on their conscious states. I removed all the ComponentManager shit because it doesn't need to be a ComponentManager
- CombatFX can no longer handle ragdoll states because CharacterManager will stomp on it. This is fine for now
- Visual Studio Code debug launch configuration now has standalone options
- I fucked with various options in order to get the standalone game client working. Event Driven Loader is now disabled, Anonymous Usage Data is now disabled (this is more because I didn't want to wait for it at shutdown), and Oculus and SteamVR are disabled
- Added some Input Bindings for controlling Standalone game client which are not yet hooked up
- Did some work on getting a player HUD set up. At the moment it doesn't do anything
- Added GalavantUnreal command for pausing/resuming Galavant tick (Gameplay time)
- Commented my Slate High DPI hack and moved it into a command instead. This hack broke cooking and packaging
- Hooked GalavantUnreal update into Gameplay time system for pausing etc.
- Added CharacterManager. The idea is that this system will manage things like setting ragdoll etc. on Unreal ACharacters. It doesn't do anything yet
- Removed std::cout debug stuff for the pointer stuff
- Added ability to get the Unreal Actor from Entity ID
- Added some hacks to get ragdolls working. I'll be refactoring the entire interface eventually. It doesn't completely work (entities still move around), but is a good starting point
I have finally, finally fixed the dangling pointer issue. It turned out that using TSharedPtr and TWeakPtr instead of TWeakObjectPtr was a terrible mistake. Changing everything over to TWeakObjectPtr has fixed the issue. This should also fix the segfault that I've been encountering since UnrealMovementComponent was a thing, which is awesome.
I added the ability to toggle Debug logging for UnrealMovementComponent, which offers more information regarding actor spawning
I learned from [this page](https://wiki.unrealengine.com/How_To_Prevent_Crashes_Due_To_Dangling_Actor_Pointers) that I was segfaulting in UnrealMovementComponent::Update() because storing raw pointers to UObjects is treacherous. I converted everything in UnrealMovementComponentManager to use Shared and Weak pointers for Actors and Characters.
This seemed all fine and dandy, but now I'm running into an infuriating ensure assert where ACharacter can't be constructed because it's already registered. What is perplexing about this is that I can construct the AgentCharacters just fine in GalavantUnrealMain::Tick(), but as soon as I do it in UnrealMovementComponent::Update() with the same exact parameters everything goes to shit.
I'm at a loss as to what is broken as it seems impossible that my changes could've broken things the way they've been broken.
- Increase initial hunger level for faster debugging of need/goal pipeline
- UnrealMovementComponent only spawns Actors if they have a hit point on the world. It'll spam tons of messages at the moment
- Added an Entity field to AActor; this change needs to be applied to the UE4 code manually. The patch is in Source/UnrealEnginePatches/AActorEntityIntegration.patch
- DPI scaling for the editor is now done explictly by GalavantUnrealMain; this is so I automatically have my desired DPI settings. This is a hack and will probably trip up anyone else who uses GalavantUnreal
- Fixed segfault involving UnrealMovementComponent having dead Entities subscribed to it after Play In Editor has stopped and restarted. This occurred because I had transitioned to using static initialization to auto-register ComponentManagers, but for some reason (hotreloading or library separation) UnrealMovementComponent wasn't being added to the static ComponentManagers list. ComponentManagers are now explicitly added, like before
- Made small changes to test Needs: death now happens through conscious state; blood need has trigger to make fainting happen if blood level is low
- CombatComponentManager's Update() is now actually executed. I must've forgotten to add it before
- Big refactor of ActorEntityManagement. Due to AActor Entity integration, the exact entity can be notified. I removed all the code which iterates over all actors as it is now unneeded. All Actor creation should now be done through ActorEntityManagement::CreateActorForEntity(). ActorEntities can now only have one callback, which is set during creation. At the moment, lifetime is managed via callback as well as the ability to check all Actor pointers to ensure it is a tracked actor. The latter option should be removed once the callback solution proves its robustness. I'm not going to do it right now because I want to work on other things
- Made several changes to UnrealMovementComponent's actor management in order to prevent the segfault from happening. I added a debug display which is useful for seeing discrepancies in display/spawning at runtime. More work is needed on actor management. I'm noticing sometimes Actors should be right in front of player but are gone; they don't think they should exist either, which is perplexing
- Added keyboard binds for primary, secondary, and tertiary attacks (E, Q, and R respectively)
- Refactored ComponentManagers to conform to the new interface; updated all call sites as well
- Added UnrealCombatFxHandler for playing combat animations etc. as requested by CombatComponentManager
- Added FindFood AgentGoalDef and some small changes to the Hunger need (desperation trigger)
- Hooked Unreal GetTimeSeconds() up as Galavant's GetWorldTime()
- Added first pass CombatActionDef for punch and hooked it into the Player combat system
- Added VS Code configuration for debugging
- Fixed problem in combat code where you couldn't perform actions after using play in editor twice
- Added block animation and hooked it up
- Added some test melee animations. I'm still getting the workflow figured out
- Added hookups for player primary, secondary, and tertiary attacks. They don't do anything but play animations currently
- Updated *.Build.cs and *.Target.cs to work with UE 4.17 API changes
- Updated Needs to use the cleaner constructor syntax
- Deleted old attachmentRules code which was commented out anyways
- I mistakenly forgot to put UnrealLogOutput() in the right file. It's there now, so all should be well
- GalavauntUnrealMain::InitGame() now sets KillZ. This probably isn't the proper place, but I put it there so I wouldn't forget that it's important
- Add core to .gitignore. You people don't want my core dumps
- Hooked up ResourceDictionaries
- Made @callback tags consistent
(I'm committing right now because I've got a big change I'm unsure about that should be separate)
- Minimap is now rotated on the FP character such that X and Y are window space, which makes more sense when drawing to it
- Improved range checking in DynamicTexture::GetPixel()
- Logging now has coloring for warnings and errors
- Player is now registered as a WorldResource
- HUD Minimap now draws WorldResource positions we care about as well as the direction the player is facing. There's some WIP code in there involving rotating the entire map relative to the player instead of just a player rotation indicator
- GalavantUnrealMain is now a GameMode rather than a plain old actor. This ensures that A) every map will have it and B) I can initialize Galavant at the correct time. This partially fixed Player not being able to interact because it was being initialized before Galavant
- TrackActorLifetime now works thanks to a more brute-force way to know when actors are destroyed
- UnrealMovementComponent can now move things around even if their Actors/Characters do not exist. Spawning also works fully, though I need to make a raycast thing of some sort to store last good position for spawning
- Fixed Player Interact. It had two problems: the first was that I had the Entity parameters switched in the call to PickupDirect() and the second was that it was being initialized before Galavant, so it couldn't register its AgentComponent
- TestMovementComponent is now UnrealMovementComponent
- Added gitignore entry for Medieval town, an asset pack I purchased
- ActorLifetimeManagement now has a more versatile TrackActorLifetime system which runs a callback when an actor is being killed. It doesn't seem to work properly yet
- Added ConversionHelpers to go from FVector to gv::Position etc.
- UnrealMovementComponent now spawns actors according to whether or not the player would see them. It is also hooked into TrackActorLifetime to hopefully stop the SceneComponent crash, though it isn't completely working
- GalavantUnrealFPCharacter now is hooked into the ECS and provides data as the Player. I added the Hunger need as well as the ability to interact like Agents do, though it isn't 100% working yet
- ProceduralWorld hooked up, which broke chunks in strange ways.
- Added DynamicTexture, which allows pixel-by-pixel procedural texture generation
- Added HUDMinimapActor, which uses noise to make a map. The noise doesn't match the map in terms of color, scale, and position, but I'll hook that in later
- FPCharacter now has the Minimap in view. This will eventually become a HUD element, but it's an actor for now
- Added ActorEntityManager. This module tracks Actor-Entity pairs and ensures that if an Actor was destroyed the associated Entity will also get destroyed. This is to fix the problem where Unreal can destroy an Actor without our Entity system knowing about it
- Conscious states now output in debug strings below Agents
- GalavantUnrealMain now should tick before any other Actors
- Added EndPlay() entity destruction to some actors in hopes that it would curb the segfault which occurs when an actor is destroyed without the Entity system knowing. I'm not 100% sure if this fixed anything or not
- Added code to hook up missing things InteractPickup needs to work
- Experimented with the scale of voxel chunks. I'm still very unsure where I want to go with the world. It's a difficult problem
-
- I added InteractComponentManager and created some Pickups for food. It's still basically unimplemented
- TestMovementComponent only creates and manages WorldResources if a resource type was actually specified
- Fixed a crash which would occur when Unreal freed actors during a TestMovementComponent update. All Entities are now destroyed during EndPlay() which should prevent my entity tracking from becoming out of sync with Unreal's. This is assuming GalavantUnrealMain is the last Actor to be destroyed and/or EndPlay is called before other Actor destruction, so if the crash occurs again this assumption is likely false
- Food Pickup position now comes from a physics-based sphere capsule, fixing the bug from last commit where resource positions wouldn't match mesh position
- Added WIP debug output for agent states. This is going to be for states like "Sleeping" so I can test needs without implementing animations and such
- TestMovementComponent can now take either a charactor or an actor
- TestMovementComponent Update is now clearer. World position is actually used, resources are only moved if necessary, and other small refactoring
- Added Food placeholder art
- Added food needs, entities, and placed them in the world to test.
- Removed TestWorldResourceLocator (moved to WorldResourceLocator in galavant)
- For some mysterious reason, rebooting the computer made my Agent Characters magically start working. I have no idea why this is the case. It is especially concerning because I won't know if this is the fix if it happens again! At any rate, I'm very happy that they are working; it makes the game look way more legitimate (though they are still default Unreal assets)
- I don't know if AgentAIController was actually needed to get AgentCharacters working, but I'm keeping it in, even if based only on superstition
- Hooked up AgentComponentManager and gave Agents the curse of mortality. They "die" after ten seconds of hunger, which at the moment just causes a log message to display
- Removed SubjectObserver and replaced with CallbackContainer, which should be better in the long run
- I finally got HTNs to go from Goal to agent actually reaching their objectives, which is great
- TestMovementComponent is currently broken right now because I am checking in during mid-switch of agents
- Added Plog appender which appends to UE_LOG. This is super handy for making a standard interface across tests, libs, and Unreal
- GalavantUnrealMain now handles initialization of logging
- I replaced more instances of std::cout with LOG*
- Fixed a potential bug in TestWorldResourceLocator where the thing searching could be in the things searched. I added a flag that allows the caller to specify whether results can be in the same exact position or not
- Fixed AttachTo calls by replacing with SetupAttachment. This doesn't seem to have broken anything, though it's possible it did and is just subtle (due to the different attachment types)
- Attempted (and failed) to get my entities to follow their plans. More investigation is needed
- Added TestWorldResourceLocator which is for locating game resources
- Added TestMovementTasks (Find Resource, Go to target, Get Resource compound)
- TestMovementComponent now more closely resembles how the actual component might behave. It's pretty awful, but the idea is there
- My initial slice isn't quite working yet; I am checking in now to make sure everything is safely in
Implemented the first person character from the Unreal FPS C++ template in Galavant.
It looks like chunk manager may be broken in some way judging by the holes etc. when walking around.
TestAgent will be used by Galavant for AI testing. Use3DNoise allows users to dynamically swap between 2D and 3D noise on a per-chunk and per-chunk manager basis.