Git Product home page Git Product logo

gateengine's Issues

Audio Audit

  • macOS/iOS/tvOS
  • Positional Sounds
  • Multitrack Music
  • Fading In/Out
  • Windows
  • Positional Sounds
  • Multitrack Music
  • Fading In/Out
  • Linux
  • Positional Sounds
  • Multitrack Music
  • Fading In/Out
  • HTML5
  • Positional Sounds
  • Multitrack Music
  • Fading In/Out

Rework File Importers

TODO:

  • Temporarily Cache any importer object
    - Some can load multiple things from the same file, causing the file to be reloaded multiple times.

New Importers

  • #44
  • FBX Skin
  • FBX Texture
  • glTF Texture
  • Apple ModelIO Geometry
  • Apple ModelIO Skin
  • Apple CoreImage Texture

Audit Mouse Inputs

GateEngine API

  • Create Scroll API (Ticks, Smooth)
  • Mouse mode API (standard, locked)
  • Multi-Click Gestures

Platform Audit

  • Windows
    • Mouse Buttons (1, 2, 3, 4, 5)
    • Mouse Hide/Unhide
    • Mouse Set Position
    • Scroll Ticks (x, y)
    • Scroll Smooth (x, y)
    • Multi-Click User Time
  • macOS
    • Mouse Buttons (1, 2, 3, 4, 5)
    • Mouse Hide/Unhide
    • Mouse Set Position
    • Scroll Ticks (x, y)
    • Scroll Smooth (x, y)
    • Multi-Click User Time
  • Linux
    • Mouse Buttons (1, 2, 3, 4, 5)
    • Mouse Hide/Unhide
    • Mouse Set Position
    • Scroll Ticks (x, y)
      Scroll Smooth (x, y)
      Multi-Click User Time
  • iOS/tvOS
    • Mouse Buttons (1, 2, 3, 4, 5)
    • Mouse Hide/Unhide
    • Mouse Set Position
      Scroll Ticks (x, y)
      Scroll Smooth (x, y)
      Multi-Click User Time
  • HTML5
    • Mouse Buttons (1, 2, 3, 4, 5)
    • Mouse Hide/Unhide
    • Mouse Lock/Unlock
    • Scroll Ticks (x, y)
      Scroll Smooth (x, y)
      Multi-Click User Time

Android Deferred #16

2D_01_AnimatedSprite Demo Nof Working

I'm a Fedora user, running swift 5.8.1. The target shows as x86_64-unknown-linux-gnu.

When I run the 2D animation window the window is black with no animation. When I run it from the command line it presents 2 unhandled event warnings (21 and 19) and I don't know if that's significant.

I'm not understanding how resource pathing works. I see the "Earth rotating 32 x 32.png' file, and I see it referenced from a relative path of "Resources/Earth rotating 32 x 32.png", from the Source location, but don't know how the engine uses this information, in relationship to the executable under the target directory for my platform. I get the same result when attempting to do "swift run 2D_01_AnimatedSprite".

I apologize if this is a new user error and would appreciate some direction if this isn't a bug. None of the demos are displaying anything. The multiple windows examples open windows, but they're all blank.

I also have a Win 10 system, so I'm tempted to install swift to work with the demos there to compare the behaviors.

Thanks!

Graphics Audit v1.1.0

Rendering

  • #19
  • RenderTarget destinations
    • ColorN, Depth, Stencil
  • RenderTarget Options
    • DepthFailDiscard
    • StencilFailDiscard
  • 3D Lighting
    • Point, Spot, Directional

APIs

Bug Fixes

Add SwiftLint and configure for Style

Hi! Did not find any references to a linter and code style guides in the repo. It would be nice to have while the project does not become large and many other contributors joined the repository.

To not go too hard on a code style I would suggest using the existing one https://google.github.io/swift/ and for the linter SwiftLint. These two are battle-tested and used in many projects.

Feel free to close this issue without a response.

Add Shader Cache

Shaders are generated every launch. Speed up loading and reduce lag.

  • Generate IDs using a checksum
  • Async generate/compile shaders
    • WebGL2
    • OpenGL
    • Metal
    • DirectX 12
  • Cache generated shaders on platform FileSystem
    • WebGL2
    • OpenGL
    • Metal
    • DirectX 12

Shader API

Rework Shader API for public consumption.

  • Use a result builder for shader construction
  • Attempt to prevent instance dependent build objects from being used on other shader instances at the compile stage.
    • These objects include custom uniforms, buffer attachments, and buffer destinations.
    • Type constraints?
  • Give shaders a unique identifier that will allow for static caching of generated/built shaders.
  • Give shaders the ability to be changed at runtime and auto recompile, even while being used.
    • Possibly with a MutableXXXXXShader type variant as these won't be cacheable.
  • Fully document and include examples as markdown sheets in SwiftDocC library.

User Interface API

Design:
Support standard views and controls. Users should be able to easily build complex apps.

Standard MVC Hierarchy:

  • ViewControllers (as Systems?)
  • Nest-able Views
  • Constraint Layout

Should also have a SwiftUI style API so GateEngine can easily be used for things like companion apps, or custom level editors.

Gravity Tests Crash on HTML5

The test executable crashes during tests involving Gravity scripts at WASIPlatform.fetch()
Deferring solving this bug until it gets hit in a GateEngine project where more information might be available in output.

Debugging Discoveries
The crash occurs after JSPromise.value returns and before the retuned value is stored.

Thoughts:

  • The debugging results could indicate an exception on another thread
  • Sometimes fetch does return once, so again probably a threading issue
  • SwiftWASM doesn't support threading, but does use a Javascript worker.

The crash trace:

<?>.wasm-function[swift_task_asyncMainDrainQueueImpl()]@[wasm code]
<?>.wasm-function[swift_task_asyncMainDrainQueue]@[wasm code]
<?>.wasm-function[XCTMainRunLoopMain]@[wasm code]
<?>.wasm-function[$s6XCTest7XCTMain_9arguments9observersySayAA0A4CaseCm04testE5Class_SaySS_yAFKctG8allTeststG_SaySSGSayAA0A11Observation_pGtF]@[wasm code]
<?>.wasm-function[$s6XCTest7XCTMainyySayAA0A4CaseCm04testC5Class_SaySS_yADKctG8allTeststGF]@[wasm code]
<?>.wasm-function[$s22GateEnginePackageTests6RunnerV4mainyyFZ]@[wasm code]
<?>.wasm-function[$s22GateEnginePackageTests6RunnerV5$mainyyFZ]@[wasm code]
<?>.wasm-function[main]@[wasm code]
wasm-stub@[wasm code]
49869@[native code]
@http://127.0.0.1:8080/test.js:8948:30

Tests involving gravity are disabled on HTML5 using a package define DISABLE_GRAVITY_TESTS

Add XAudio Backend

XAudio2 is C++ only. Going to give Windows OpenAL as a fallback while C++ Interop is completed.

Audit Platform Window

  • macOS
    • interfaceScale updates with user preference
    • size in pixels and points
    • Resize does reshape
    • Can open multiple windows
  • iOS/tvOS
    • interfaceScale updates with user preference
    • size in pixels and points
    • Resize does reshape
    • Can open multiple windows on iPadOS
  • Windows
    • interfaceScale updates with user preference
    • size in pixels and points
    • Resize does reshape
    • Can open multiple windows
  • Linux
    • interfaceScale updates with user preference
    • size in pixels and points
    • Resize does reshape
    • Can open multiple windows
  • HTML5
    • interfaceScale updates with user preference
    • size in pixels and points
    • Resize does reshape

Audit Keyboard Inputs

Modifiers as actual keys for keyDown/keyUp
Add media keys (play, pause, etc...)
Add number pad
Differentiate key for controls and character for text input

  • Windows
  • macOS
  • Linux
  • iOS/tvOS
  • HTML5

Android Deferred #14

FBX Geometry Importer

Create a new GeometryImporter for FBX files.
This is a moderate difficulty issue.
If you have no experience working with geometry data there will be a learning curve.

Use the uFBX module which is already a part of GateEngine.
import uFBX

Name this new importer FBXImporter.

Add your loader to the geometry importers here. This is where built-in importers are located.

Use only GateEngine APIs for data loading, do not use any file APIs included in the uFBX module.
See the OBJ loader as an example of how a geometry importer works.

Use Blender to create an FBX file to test with. It can simply be the default cube or whatever you wish.

Create an executable package to test with. It would be easy to copy the RotatingCube code to your test package and replace the cube with your fbx test file.

Xcode Tip:
In Xcode if your project package and the GateEngine package exist in the same xcworkspace document, then it will build with that local copy of GateEngine as you make changes.
Make a new workspace in Xcode then open your package in Xcode, and drag the package icon into the workspace.
Repeat for your GateEngine fork.
Dragging the Package.swift file does not work, you need to open it then drag the package icon in the project navigator.

Add Gravity Scripting

Add Gravity as GateEngine's scripting language.

  • #33
  • Create shared modules to hook into GateEngine
    • GameMath types and functions
    • Game, Entity, System functions
    • AudioSystem hooks
    • HID hooks

Rework Skeletal Rig/Animation

Skeletal animations and RigSystem are cumbersome and difficult to use. Rework into something more friendly and approachable.

Documentation Audit

  • Full public API DocC coverage
  • Refactor all SwiftLint errors and warnings

Special DocC Pages

  • Explain in detail: Game Lifecycle
  • Explain in detail: Window Management
  • Explain in detail: Entity, Component, System
  • Explain in detail: Resource Loading, Lifecycle (Cache)
  • Explain in detail: Custom File Importers
  • Explain in detail: Audio Playback
  • Explain in detail: Rendering
  • Explain in detail: UserInput

Mouse Lock Broken

Chrome doesn't appear to finish locking
Safari is reporting delta changes when the cursor doesn't move

FireFox is working correctly

Standardize Async Loading

Give Entity a state and allow users to check if it's completely loaded

Things that need loaded checking:

  • configure() blocks
    • Add a failure check for the async varient
  • components with resources
    • Give components a protocol to conform to

Design a LoadingSystem and LoadingSystemComponent with easy access to progress indicator and gracefully handles failure states.
Possibly use a LoadingDescriptionComponent to handle configuring an entity for loading itself.

Build fails with many “No such module” errors

Build fails on macOS Sonoma 14.2.1 with Xcode 15.2 building for iOS/iPadOS 17.2 device with many repeated “No such module” many repeated errors looking for modules “DOM”, “ECMAScript”, & “JavaScriptEventLoop”. Issues seem to occur both on main (77889f0) and latest version tag (0.1.2) via both this repo and the GateEngineDemos repo (which pulls down GateEngine 0.1.2). Fresh git clone (I've never used GateEngine before today).

Audit Android Mouse Inputs

  • Mouse Buttons (1, 2, 3, 4, 5)
  • Mouse Hide/Unhide
  • Mouse Lock/Unlock
  • Scroll Ticks (x, y)
  • Scroll Smooth (x, y)

Add OpenGL Rendering

Versions:

  • 4.0 Core
    • Shader Generator
    • Rendering

OS Support:

  • Ubuntu Linux
    • Main Window
    • Multiple Windows
  • macOS
    • Main Window
    • Multiple Windows

SaveState Audit

GateEngine

  • Key Value Store API with namespaces
    • Lock to explicit type (Bool, Int, UInt, Double, String, etc...)
    • Consider future cloud services compatibility
  • File I/O through File System Abstraction
    • Allow Data and any Codable
    • Allow specifiable path
  • #28
    • Replace Data.init(contentsOf:) usage

Platforms

  • macOS
    • Native File System Abstraction
    • Push SaveState through FileSystem
  • iOS/tvOS
    • Native File System Abstraction
    • Push SaveState through FileSystem
  • HTML5
    • Native File System Abstraction
    • Local Storage StateState wo/ Secure Context
    • Push SaveState through FileSystem w/ Secure Context
  • Windows
    • Native File System Abstraction
    • Push SaveState through FileSystem
  • Linux
    • Native File System Abstraction
    • Push SaveState through FileSystem

Strip Foundation imports

Currently every supported platform supports Foundation, but Bare Metal is coming and probably won't.
Confine Foundation to Platform instances and replace it's functionality with abstractions.

  • Add @_exported import for Data and URL to GateEngine.swift
    • we'll use SwiftFoundation for these when it's ready
  • GameMath uses sin functions. Look into implementing native ones, possibly in C/C++
    C and C++ standard libraries both have sin functions, so Foundation should always have them.

Audit Gamepad Inputs

Interpreters

  • windows
  • macOS/iOS/tvOS
    • MFi Gamepad Interpreter
  • macOS
    • HID (SDL2 Database)
  • Linux
    • HID (SDL2 Database)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.