Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Create customization-user-stories.md #140

Draft
wants to merge 6 commits into
base: nickmaltbie/api-requirements
Choose a base branch
from

Conversation

MTrecozzi
Copy link

Created a rough draft of example customization user stories, I plan to update this document as development on the new API continues

Description

Created a markdown file to discuss user stories

How Has This Been Tested?

N/A

Copy link
Owner

@nicholas-maltbie nicholas-maltbie left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall, this looks great, thanks for the submission and feedback!

Wrote up some notes and suggestions for the document.

Make sure to add the document to Documentation\manual\toc.yml (or make a sub toc.yml for this folder). We may want to move this document to a sub folder like Documentation\manual\kcc-design\user-stories and link to it form the main Documentation\manual\kcc-design\kcc-user-stories.md file.


User Story:

As a Customization User with an existing project, I’m interested in having my development studio switch to OpenKCC from a paid asset for the following reasons
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think as a requirement for linting the markdown flies with markdownlint I have a constraint that lines shouldn't be more than 80 characters long. The markdown preview will auto join lines that don't have a newline between them.

You can install an extension in vscode to view the errors in style rules and make correcting them easier :)

Name: markdownlint
Id: DavidAnson.vscode-markdownlint
Description: Markdown linting and style checking for Visual Studio Code
Version: 0.49.0
Publisher: David Anson
VS Marketplace Link: https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint


While we are interested in the the higher level features of OpenKCC, as a pre-existing studio we already have our own high level code that enables us to reach a high velocity of output with our designers who are already accustomed to our tools

Ideally, our game architecture programmer will be able to use the API of the KCCMovementEngine to make it compatible with our high level code which already handles things such as state switching, etc.
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed, that's why it's important we disconnect the KCCMovementEngine from my existing state machine API!


Ideally, our game architecture programmer will be able to use the API of the KCCMovementEngine to make it compatible with our high level code which already handles things such as state switching, etc.

We could probably be convinced to let KCC handle things like gravity for us if the API were well defined and the customization was robust enough, but for the foreseeable future it’s best to think that we are glued to our custom state solution.
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With this thought, maybe it's best we have a default behaviour defined with a flag that allows the user to override it if they wish!

————————————————————————————————————————————————————————————————————————

**Example Use Case:** For example, a character controller like this is something we would hope to be able to achieve while handling states, input, and events ourselves:
https://www.youtube.com/watch?v=ylG72jvo_2s&ab_channel=CaptainRipley
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Look at my other files if you want to see how to embed a youtube video with a thumbnail so the user can play them more easily!


**Example Use Case:** For example, a character controller like this is something we would hope to be able to achieve while handling states, input, and events ourselves:
https://www.youtube.com/watch?v=ylG72jvo_2s&ab_channel=CaptainRipley
- In fact I intend to start implementing a character controller with equivalent features, that way we could focus on porting it to Open KCC and developing the KCCMovementEngine API alongside it
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That would be awesome, could we add it as a Sample for the OpenKCC repo or would it be using your custom authoring components you're writing on top of it?


Upon reflecting on my “Customization User” user stories, I think that the API that solves most of my immediate problems might look something like this, where I can set the velocity of the KCC Movement engine either directly or through a callback that the KCCMovementEngine provides. (Proper architecture withheld for brevity)

```c#
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I really like the inclusion of example code here as a sample!

_movementEngine.PerformMove();

// Read Object State Post-Move to Update Client Velocity In Response to Being Groudned or Not
var postMoveGroundedState = _movementEngine.GroundedState;
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We could have these returned as an argument of calling _movementEngine.PerformMove(); by returning a tuple (GroundedState, Collisions).

- I can then read that 0 value from the KCC Movement Engine, and re-apply it to my Client Side State
- This basically keeps the client side velocity and the KCC Movement Engine state in sync, since with this state definition the user should have to Reaccelerate again once more after colliding, they shouldn’t instantly snap back to 15 meters per second if the wall were suddenly removed

- Collision Phase Callbacks Extended
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like this, right now we can also override the collision data and change how the player moves based on the result of collisions.

I want to change it so that pushing objects works like this as well! I'll add more notes in another PR.

@@ -0,0 +1,138 @@
**Expanding on ‘Customization User’ Scenarios**
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use hierarchal titles for the document so they convert to HTML for easy reading!

like this:

# Title

info here

## Section 1

more info...

### Section 1.1

## Section 2


**Example #1: Planar 3D Platformer Character Controller**

————————————————————————————————————————————————————————————————————————
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We probably can remove these horizontal lines as the hierarchal titles make good divisions and add them in the final result anyway!

@nicholas-maltbie nicholas-maltbie marked this pull request as draft March 29, 2023 03:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants