Skip to content

Latest commit

History

134 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

MonoCore

A simple game engine based on MonoGame

Dependencies

  • Mono.Extended>=4.0.0
  • FontStashSharp.MonoGame

Features

  • Simple AABB collision detection, and a complete physics engine integretion by Aether.Physics2D
  • Simple task system you can schedule async game logic on the fly, there's also TweenTask if you want to throw a tween animation
  • In game debug console with interactive C# runner, component inspector, and custom command support
  • Animated text using just markdown-like syntax
  • Smooth fluid simulation
  • Global shader effects like Bloom Filter, Pixelation, VHS
  • Layers for ordered drawing, Containers for managing component updating
  • Input action mapping
  • Frame animation, Shaking, Spring and other useful 2D animations
  • Simple GOAP for AI logic
  • 2D lighting (WIP)
  • Other utilities like Camera, Grid Map Generator, Color Palette and bunch of effects driven by shaders

Game Specific Configs

publicclassDef{
#region Core Config
// Screen relatedpublicstaticclassScreen{publicstaticreadonlyIThemeTheme=newApolloTheme();publicstaticColorBackgroundColor=>Palette.Black;publicstaticreadonlyintTargetScreenWidth=1440;publicstaticreadonlyintTargetScreenHeight=768;publicstaticreadonlyintScreenWidth=480;publicstaticreadonlyintScreenHeight=256;}// Container for updating component grouppublicenumContainer{Scene=1,World=2,UI=3,}// Define the collision category maskspublicenumCategory{// Must haveAll=int.MaxValue,None=0,Default=1,// Your custom valuesHuman=1<<1,Bird=1<<2,}// Layer for drawing componentspublicenumLayer{DevUI=0,Universe=10,Background=100,}publicstaticreadonlyDictionary<Layer,Dictionary<string,object>>LayerConfig=new(){[Layer.DevUI]=newDictionary<string,object>{{"IsCameraFixed",true}}};// Fonts, the first font will be the default fontpublicstaticreadonlyList<(string,string)>Fonts=[("fusion8","Content/Fonts/fusion8.ttf"),("fusion10","Content/Fonts/fusion10.ttf")];// Input relatedpublicstaticclassInput{// Define input action for binding, which may be a specific operationpublicenumAction{CursorPressed=1,Left=2,}// Define the input separation layers// It's useful if you have multiple layers like Battleground and Menu// You can switch the input world to avoid triggering actions in both worldspublicenumWorld{Battleground=1,Menu=2,}publicstaticreadonlyDictionary<Action,List<string>>Bindings=new(){{Action.CursorPressed,["MouseLeftPressed"]},{Action.Left,["Left","StickLeftX-"]},};}
#endregion Core Config
}

About

A simple game engine based on MonoGame for rapid game idea prototyping

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages