gamebuilder

package module
v1.0.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 17, 2021 License: BSD-3-Clause Imports: 7 Imported by: 0

README

game-builder

Game-builder is a game builder lite using SDL2 veandco. It's not convention to compose a game, just proof of concept today.

The wrapper is implemented with goroutines.

I try to define a good architecture and simple of use. Inspired by Unity 3D (without interface home machine). I try to provide a good tool to creates models scenes / layout and objects.

I would be pleased to talk about that with you on mail: mohl.clauzade@gmail.com

Requirements

See official github to SDL2 binding for Go by veandco.

Installation

To install Golang see getting started

To get SDL2 wrapper see veandco

go get -v github.com/veandco/go-sdl2/{sdl,mix,img,ttf}

To get Game-Builder:

go get -v github.com/ymohl-cl/game-builder

OSX

Install SDL2:

brew install sdl2 sdl2_gfx sdl2_image sdl2_mixer sdl2_net sdl2_ttf

Example

You can view implementation example on this project gomoku game

Please, read godoc to know the specifications

package main

import (
	"github.com/ymohl-cl/game-builder/drivers"
	"github.com/ymohl-cl/game-builder/scripter"
	"github.com/ymohl-cl/gomoku/database"
	"github.com/ymohl-cl/gomoku/scenes/gomoku"
	"github.com/ymohl-cl/gomoku/scenes/loader"
	"github.com/ymohl-cl/gomoku/scenes/menu"
)

const (
	windowWidth = 800
	windowHeight = 600

	indexMenu = 1 << iota
	indexGomoku
)

func main() {
	var err error
	var d drivers.VSDL
	var data *database.Data

	// init drivers sdl from game-builder
	if d, err = drivers.Init(windowWidth, windowHeight, "Title of my windows"); err != nil {
		panic(err)
	}
	defer d.Destroy()

	// get your data app from your package, for the example, we used database package
	if data, err = database.Get(); err != nil {
		panic(err)
	}

	// get new scripter application from game-builder
	s := scripter.New()

	// get loader scene from my app
	var loaderScene *loader.Load
	if loaderScene, err = loader.New(nil, d.GetRenderer()); err != nil {
		panic(err)
	}
	// add scene on the scripter (game-builder)
	if err = s.AddLoader(loaderScene); err != nil {
		panic(err)
	}

	// get menu scene from my app
	var menuScene *menu.Menu
	if menuScene, err = menu.New(data, d.GetRenderer()); err != nil {
		panic(err)
	}
	// add scene on the scripter (game-builder)
	if err = s.AddScene(menuScene, indexMenu, true); err != nil {
		panic(err)
	}

	// get gomoku scene from my app
	var gameScene *gomoku.Gomoku
	if gameScene, err = gomoku.New(data, d.GetRenderer()); err != nil {
		panic(err)
	}
	// add scene on the scripter (game-builder)
	if err = s.AddScene(gameScene, indexGomoku, false); err != nil {
		panic(err)
	}

	// run application from game-builder
	s.Run(d)
}

FAQ

Why shaders aren't implemented ?

Game-builder is a proof of concept for the moment. This lib provide that which are needest to make a simple project. If you need shaders, please contact us.

How do I contribute ?

Contact me by mail: mohl.clauzade@gmail.com

Acknowledgment

Thanks at veandco for their work.

License

game-builder is BSD 3-clause licensed.

Version

V-0.1.1: implement library game-builder

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type ConfigUI

type ConfigUI struct {
	Window Window
}

ConfigUI about ui

type GameBuilder

type GameBuilder interface {
	Close() error
	Script() Script
	Renderer() Renderer
	Run(scene string) error
	// contains filtered or unexported methods
}

GameBuilder make the relation between sdl2 driver and the application service. Provide an easy way to setup application's ui or game'ui

func New

func New(c ConfigUI) (GameBuilder, error)

New configure a new gamebuilder instance and setup a sdl driver ready to use

type Renderer

type Renderer interface {
	Close()
	Scene(s Scene)
	Clear() error
	Draw()
	Driver() *sdl.Renderer
}

Renderer type to manage the drawing

func NewRenderer

func NewRenderer(c ConfigUI) (Renderer, error)

NewRenderer sdl

type Scene

type Scene interface {
	// Build the scene
	Build() error
	// Init the scene. Create static objects. Data is provide if you need.
	Init() error
	// IsInit return status initialize
	IsInit() bool
	// Run the scene
	Run() error
	// Stop the scene, it's possible to Run later
	Stop()
	// Close the scene at the end game
	Close() error
	// GetLayers get objects list by layers order
	GetLayers() (map[uint8][]objects.Object, *sync.Mutex)
	// KeyboardEvent provide key down to the scene
	KeyboardEvent(*sdl.KeyboardEvent)
	// SetSwitcher can be called to change scene with index scene on
	// first parameter and flag on true to close old scene and false to stop it only
	SetSwitcher(func(uint8, bool) error)
	// SetCloser quit the application
	SetCloser(func())
	// Update : called on each frame
	Update()
}

Scene is a interface and define the design model to your scenes.

type Script

type Script interface {
	Close() error
	SetLoader(s Scene) error
	AddScene(index string, s Scene) error
	LoadScene(index string) error
	CloseScene(index string) error
	Scene(index string) (Scene, error)
	SceneIndex() string
}

Script describe the application/game scenes and the current use

func NewScript

func NewScript() Script

NewScript instance

type Window

type Window struct {
	Title  string
	Width  int32
	Height int32
}

Window configuration

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL