Repository navigation
v0.5.0
Changelog for v.0.4.0 (07.05.2024)
[Changed] Globals Class:
-[Changed] TotalSeconds is now renamed to DeltaTime to better represent the purpose.
[Changed] Camera class:
-[Removed] LookAtTheTargetMatrix, World, View and Projection matrice properties.
-[Removed] Position, Forward, Up, LookAtDirection, TargetPostionToLookAt vector properties.
-[Removed] UpdateProjectionMatrix, UpdateWorldAndView, RotateUpDown methods.
-[Removed] name, up, angle, cameraType fields.
-[Added] MoveCamera method that read the movement inputs from input manager and aplies them to camera.
-[Added] UpdateCameraMatrices method to update global View and Projection matrices using camera data.
-[Added] cameraSpeed field.
-[Changed] Update method to use newly added methods.
[Changed] Game1 class:
-[Added] Debug option to disable DEBUG mode camera.
[Changed] PickingManager class:
-[Changed] Picking result is now stored in list instead of single field. It's to prepare for the future box picking.
Changelog for v.0.4.1 (08.05.2024)
[Changed] SceneManager class:
-[Added] OnLoad method to load all scene's static assets to Renderer when scene is loaded.
[Changed] Camera Component class:
-[Added] UpdateFov method to update zoom of the camera using scroll wheel value form InputManager. This method also uses Lerp to make zooming smooth.
-[Added] ZoomSpeed, LerpSpeed, previousScrollValue, TargetFov, ZoomMin and ZoomMax fields.
-[Changed] UpdateCameraMatrices now also updates ZoomDegrees and ViewPos global fields.
[Changed] Globals class:
-[Added] ZoomDegrees global field.
Changelog for v.0.4.2 (08.05.2024)
[Changed] WorldRenderer Component:
-[Changed] VertexPositionColorNormal is no more - welcome VertexMultitextured - the struct that has a position, normal, texCoords and texWeights or the vertices and also VertexDeclaration for the elements
-[Added] Textures to the terrain
-[Changed] Draw() method now uses seperate drawing functions for the terrain and water
-[Added] LoadTextures() and LoadVertices() methods
-[Changed] SetUpVertices() is no longer a void, and the function works differently
-[Changed] SetUpIndices() return a short array
-[Deleted] Inspector options to change the color of the terrain
[Changed] Terrain_Shader.fx - it now has techniques to make a textured and multitextured terrain - tried making a reflection shader, but doesn't work yet
Changelog for v.0.4.3 (08.05.2024)
[Changed] AssetManager class:
-[Changed] LoadNames method now ignores duplicate models that result from LOD configuration.
[Changed] Camera Component:
-[Changed] ZoomMax from 70 to 75.
[Changed] Models now require config.xml file to access LOD and Multimesh options.
[Changed] Globals class:
-[Added] MainPath string field that stores relative path to project directory regardles of OS differences.
[Changed] ModelData class:
-[Changed] ModelData now stores List of model instead of singular model to support LOD.
-[Changed] ModelData now stores List of boundingSpheres instead of singular boundingSphere to support LOD.
-[Changed] ModelData now stores Textures in 3D List to support LOD and Multimesh texturing*. The structure is as follows: Textures[LOD_ID][Mesh][MapID] where MapID is: 0 - albedo, 1 - normal, 2 - roughness, 3 - metalness, 4 - ambient occlusion
-[Added] _isMultimesh and _lodUsed booleans to store model configuration.
-[Added] CurrentModelIndex stores index of current LOD model to draw.
-[Changed] Draw method to support LOD and Multimesh model drawing.
-[Changed] LoadModel method to support loading LOD and Multimesh models.
[Changed] PickingManager, Renderer, AssetMmanager, MeshRenderer to support ModelData changes.
*Multimesh texturing - Texturing a model that has seperate texture maps for it's meshes.
Changelog for v.0.4.4 (08.05.2024)
[Added] AnimationClip Class:
-[Added] Two nested classes: Keyframe and Bone, because an animation clip is just a set of keyframes with associated bones
-[Added] Time, Rotation, Translation and Transform properties in Keyframe Class
-[Added] Name, List of keyframes properties in the Bone Class
-[Added] List of bones, name and the duration in the Keyframe Class
[Added] Bone Class:
-[Added] Basic hierarchy system of the bones
-[Added] Transformations matrix and vectors for scale and translation, and a quaternion for the rotation
-[Added] Same properties for the fields
[Added] AnimationClipReader Class:
-[Added] Inheritance from the ContentTypeReader<T> which can help reading the AnimationClips from the Content Pipeline - that's nice
Changelog for v.0.4.5 (09.05.2024)
[Added] ModelProperties Class:
-[Added] Skeleton list and AnimationClip list properties
[Added] ModelPropertiesReader Class:
-[Added] Inheritance of the ContentTypeReader<T> for loading custom data from the models needed for animation
[Added] AnimationProcessor Class - need implementation
Changelog for v.0.4.6 (10.05.2024)
[Added] New Models:
-[Added] Archer model.
-[Added] Peasant model.
-[Added] knight model.
-[Added] Cupboard model.
-[Added] Baby Cupboard model.
-[Added] Chair model.
-[Added] Wardrobe model.
[Changed] Scene class:
-[Added] TempName field.
[Changed] SceneManager class:
-[Changed] Changing scene name uses TempName now and saves name only after clicking 'Apply name' button.
Changelog for v.0.4.7 (10.05.2024)
[Added] InstancedRendererController Component class:
-[Added] InstanceData struct that hold world and normal transformation matrices of single instance.
-[Added] Model field.
-[Added] WorldMatrices List to hold world matrices of all instances.
-[Added] Draw method that uses Instancing to draw multiple copies of the same mesh using only one draw call.
-[Implementd] RemoveComponent to remove all linked InstanceRendererUnit components.
-[Implemented] All component methods.
-[Added] AddToAllChildren private method to setup scenes more quickly in DEBUG mode. It iterates through all child objects and adds InstanceRendererUnit to them.
[Added] InstanceRendererUnit Component class:
-[Added] Controller field to store reference to linked InstancedRendererController.
-[Implemented] Update method to check if this Instance should be drawn. If yes add their World matrix to List in linked InstancedRendererController.
-[Implemented] Initialize method to try to link with InstancedRendererController in parent object. If linking failed disable this component.
-[Implemented] The rest of component methods.
[Changed] PBR and ShadowMaps shaders:
-[Added] Vertex shader for Instance rendering.
-[Added] Techniques to use Instancing.
[Changed] Globals class:
-[Added] VertexDeclarations for Instance rendering.
-[Added] DEBUG boolean option to draw wireframe.
[Changed] ModelData class:
-[Moved] LOD check to it's own method: ApplyLOD
-[Moved] Passing textures to the shaders to it's own method: PassTextures
[Changed] Renderer class:
-[Changed] Shadow rending now also uses Instances.
-[Added] Instance rendering.
[Changed] SceneManager class:
-[Changed] OnLoad method now also loads InstancedRendererControllers into Renderer.
Changelog for v.0.4.8 (11.05.2024)
[Changed] InstancedRendererController Component class:
-[Changed] WorldMatrices List now holds InstaceData instead of Matrices. Updated all uses accordingly.
[Changed] InstanceRendererUnit Component class:
-[Added] _data field to hold Instance data.
Changelog for v.0.4.9 (12.05.2024)
[Changed] ModelData class:
-[Changed] Reverted the boundingSphere change from v.0.4.3 because it was deemed unnesesary. Updated all uses accordingly.
[Changed] Globals class:
-[Added] Solid and Wireframe RasterizerStates to make toggling wireframe mode easier.
[Changed] PickingManager class:
-[Added] PickingFrustum struct to represent picking volume of box picking.
-[Added] CalculatePickingFrustum method.
-[Changed] CalculateMouseRay method now uses current window dimensions instead of being hardcoded.
-[Changed] CheckForRay method now also checks for box picking if LMB was held long enough.
-[Added] On screen visualization of picking rectangle.
[Changed] Renderer class:
-[Added] Option to draw Box picking frustum volume.
Changelog for v.0.4.10 (12.05.2024)
[Changed] SkinnedAnimationAux directory is now named AnimationPipeline
[Added] AnimationProcessor Class for the logic of the played animation
-[Added] Process() and ProcessSkeleton() method to process the loaded animation and the rig of the model
[Added] AnimationPlayer Class, which is responsible for playing the animation
-[Added] Update() method to get the duration of the animation
-[Added] Internal BoneInfo Class, to get the info about the changing rig bones in the model
[Added] AnimatedModelRenderer Class - will be a component in the future
-[Added] LoadContent() method to load up the necessary properties for the model
-[Added] PlayClip() method to play the animation
-[Added] Update() method to update the model in the runtime
-[Added] Draw() method - not yet implemented
Changelog for v.0.4.11 (13.05.2024)
[Deleted] Previous implementation of the pipeline - it didn't work and now I know why
[Added] New solution and added it's reference to the RTS_Engine - Animation
-[Added] Animations Class responsible for the animations of the models
-[Added] Clip Class responsible for keyframes and duration of the animation
-[Added] Keyframe Class, which has all the data about the bones of the rig, time of the keyframe and transforms
-[Added] AnimationReader Class - custom reading process for the monogame content builder
-[Added] ClipReader Class - custom reading process for the mgcb
[Added] New AnimationPipeline solution
-[Added] AnimationsContent Class - has all the information of the loaded animation in content
-[Added] ClipContent Class - has all information of the clip in the content
-[Added] KeyframeContent Class - has all information of the keyframe in the content
[Added] Gangnam Style.fbx - test animation
Changelog for v.0.4.12 (13.05.2024)
[Changed] GameObject class:
-[Added] DEBUG option to save GameObject to file as 'prefab'.
-[Added] Loading and attaching prefabs to GameObejcts
Changelog for v.0.4.13 (14.05.2024)
[Added] DynamicIndexBuffer Classes:
- [Added]
BufferContent,ModelContent,ModelMeshContent,ModelMeshPartContentand alsoVertexBufferContentClasses for dynamically changing buffers of the animation, so at works smoothly
[Added] CpuAnimatedVertexBuffer Class to get the CPU animation of the model
[Added] CpuAnimatedProcessor Class - custom processor for the mgcb to load the CPU animation from the .fbx file
Changelog for v.0.4.14 (14.05.2024)
[Removed] Unnesesary 'using' statements from all classes.
[Added] #if DEBUG statments in many parts of the code.
[Changed] ModelData class:
-[Changed] LoadModel method now loads default model if it can't load a model.
[Changed] SpiteRenderer Component class:
-[Fixed] Initialize method is no longer responsible for adding this renderer to Renderer. This caused spites to render even if the scene they were on wasn't loaded.
-[Changed] Draw now uses Transform's Z position to determine drawing layering.
[Changed] TextRenderer Component class:
-[Fixed] Initialize method is no longer responsible for adding this renderers to Renderer. This caused text to render even if the scene they were on wasn't loaded.
-[Changed] Draw now uses Transform's Z position to determine drawing layering.
-[Changed] Serialization now saves text color.
[Fixed] MeshRenderer crashing the game in RELEASE mode due to NullReferenceException.
-[Fixed] BoundingFrustum in Globals class is now initialized as identity matrix.
[Changed] AnimatedSpriteRenderer Component class:
-[Added] Init method that is nearly identical to Initialize method with only difference being that Init does not add this AnimatedSpriteRenderer to Renderer. Replaced Initialize method in nessesary places.
[Added] Button Component class:
-[Added] ButtonVisual field that holds the SpiteRenderer that draws the button background. Drawn background is also used for click detection.
-[Added] _buttonAction field that holds GameAction enum describing button function.
-[Implemented] Update method that checks if button was clicked on. If yes add _buttonAction to InputManager's action List.
-[Implemented] Initialize method that links SpiteRenderer to this button.
-[Implemented] Remaining component methods.
[Changed] Pickable Component class:
-[Changed] Serialization now also stores Active field.
[Changed] SpiteRenderer Component class:
-[Changed] RemoveComponent method now also attempts to remove linked Button component.
[Changed] GameObject class:
-[Added] ClearObject method that recursivly clears entire scene graph below the object removed in RemoveGameObject method.
[Changed] Globals class:
-[Added] HitUI boolean that stores if UI was clicked in current frame. It's used in picking because, if user clicked on UI, picking shouldn't happen.
[Changed] InputManager class:
-[Changed] ActionData List changed from private to public.
Changelog for v.0.4.15 (14.05.2024)
[Added] Pathfinder Component class:
-[Implemented] Some component methods.
[Added] Node and SearchParameters pathfinding classes.
Changelog for v.0.4.16 (14.05.2024)
[Changed] Structure of the AnimationPipeline:
- [Added] Separate projects of the solutions:
AnimationPipeline- responsible for creating custom processors for the Content.mgcb file and also reading all necessary animation data from the .fbx files (was created in earlier version)Animation- creates an animation from the loaded content that can be drawn on to the scene (was also in previous version)Graphics- responsible for dynamic vertex and index buffers to smoothly render out the animation without any lags (was also in previous version but in one project)
This solution is crucial, because different projects use different references from projects and they shouldn't be in one singular project, because it ends up with a big red error.
[Added] Generated DLLS to add to main project - now animations work fine!
Changelog for v.0.4.16.1 (15.05.2024)
[Fixed] Camera cliping into boundingFrustum near plane when moving forward. This caused problems with box picking.
[Fixed] 2D elements drawing ignoring layering.
Changelog for v.0.4.17 (15.05.2024)
[Changed] Globals class:
-[Added] Nodes global array.
-[Added] CreateNodes method.
[Changed] Node class:
-[Added] GetTraversalCost method
[Changed] SearchParameters class:
-[Added] Search method.
-[Added] GetAdjacentWalkableNodes method.
-[Added] GetAdjacentLocations method.
-[Added] assignCosts method.
Changelog for v.0.4.18 (16.05.2024)
[Changed] Game1 class:
-[Added] DEBUG option to disable Box and Single picking.
-[Added] Temporary scene changing using GameActions.
-[Changed] Scenes that are loaded on startup.
[Changed] InputManager class:
-[Added] New GameActions: SCENE0, SCENE1, SCENE2, SCENE3
[Changed] PickingManager class:
-[Added] SinglePickingActive and BoxPickingActive boolean that enable/disable their respective picking options.
[Changed] SpiteRenderer and TextRenderer Component classes:
-[Added] useLocalPosition boolean that determines if either global or local coordinates should be used.
-[Added] DEBUG option to toggle useLocalPosition boolean.
[Changed] SceneManager class:
-[Added] CheckForSceneChanges method that check InputManager for any scene changing GameActions and changes the scene accordingly.
[Changed] Renderer class:
-[Changed] Render method now uses separate SpriteBatches for text and sprites.
-[Changed] Instance rendering to use new InstanceData storage system.
[Changed] InstancedRendererController Component class:
-[Removed] WorldMatrices List.
-[Added] _instanceData private array.
-[Added] Matrices public array.
-[Added] CurrentIndex public field.
-[Added] _currentBufferSize private field.
-[Added] Add method that inserts InstanceData provided as argument into the _instanceData array at CurrentIndex index then increments CurrentIndex by 1.Then checks if CurrentIndex is equal to _currentBufferSize.
If yes it resizes the array to double the current size. This replaces list and avoids excessive memory allocations during rendering.
[Changed] ModelData class:
-[Implemented] Mutlimesh textured model loading.
Changelog for v.0.4.19 (16.05.2024)
[Changed] Pathfinder Component class:
-[Implemented] Temporary Initialize method.
[Changed] Globals class:
-[Removed] Reverted additions from v.0.4.17
[Changed] SearchParameters class:
-[Changed] Search method.
-[Changed] assignCosts method to accept size parameters instead of them being hardcoded.
-[Added] FindPath method.
Changelog for v.0.4.20 (17.05.2024)
[Added] AnimatedMeshRenderer Component class:
-[Added] _model, _animations and IsVisible public fields.
-[Added] ConfigureEffectMatrices method.
-[Added] ConfigureEffectLighting method.
-[Implemented] All Component methods.
[Changed] Globals class:
-[Added] Content global field.
-[Added] ElapsedGameTime global field.
[Changed] Renderer class:
-[Added] AnimatedMeshRenderer rendering support.