Nothing has been indexed for 0.3.6 yet. The tag is recorded, its shard.yml has not been read, so the manifest and dependency list below are empty because they are unknown rather than because they are absent.

Installation

# Add this to your shard.yml
dependencies:
  game:
    github: mswieboda/game_raylib
    version: ~> 0.3.6

Then run:

shards install

shard.yml

No shard.yml has been indexed for 0.3.6. You can read it on the repository.

Dependencies

Unknown: the shard.yml for this version has not been read yet.

README

This README is the one indexed from the repository at its latest ref, not from the tag for this version.

game

Game wrapper library internally using cray (RayLib bindings to Crystal).

Installation

  1. Add the dependency to your shard.yml:
dependencies:
  game:
    github: mswieboda/game
  1. Run shards install

Usage

For now this is basically just an object-oriented wrapper around Cray/RayLib functionality.

Eventually will include more concepts such as a Viewport, basic Player or Player Controllers, UI messages, loading/saving, and other miscelleneous concepts to assist developing a game.

See the examples examples/hello_world.cr and examples/shapes.cr on how to use the provided classes.

Inherit your main game project class from Game to enable the RayLib setup and game loop.

require "game"

class FooGame < Game
  def initialize
    super(
      name: "FooGame",
      screen_width: 1024,
      screen_height: 768
    )
  end

  def update(frame_time)
  end

  def draw
  end
end

FooGame.new.run

Game#run will initialize RayLib, and begin the game loop, calling Game#update and Game#draw which are meant to be overriden with your game and drawing logic. Use the built-in classes to draw with using #draw or call drawing methods directly with LibRay (available via the cray shard dependency).

def draw
  # use built-in classes created in `initialize` or elsewhere to draw, such as `Rectangle`
  @rectangle.draw

  # or call LibRay draw methods directly
  LibRay.draw_rectangle(x: 30, y: 30, width: 100, height: 25, color: Color::Red.to_struct)
end

Note: Since many features are currently WIP, interacting with LibRay directly is a valid option.

Development

  • [ ] API docs
    • [ ] auto docs with tools like https://crystal-lang.org/api and other crystal shards
    • [ ] host on github pages, or heroku, etc
  • [x] Game (core)
    • [x] basic window: title, size, fullscreen (moving to Window)
    • [x] basic setup: FPS, audio
    • [x] basic game loop: running? frame time, update, draw wrapper, draw
    • [x] set drawing mode 2D/3D
    • [ ] specific sprite pre loading Game#load_sprites method to override
    • [ ] specific sound pre loading Game#load_sounds method to override
  • [ ] Window
    • [ ] Monitor
    • [ ] Clipboard
    • [ ] Cursor
  • [ ] Input
    • [x] Keys
    • [x] Mouse
    • [ ] Gamepad
    • [ ] Touch
  • [ ] Camera for 2D
    • [ ] Viewport
  • [x] Color
  • [x] Vectors
    • [x] Vector
    • [x] Vector3
  • [x] Shapes
    • [x] Shape parent class
      • [ ] collision detection
    • [x] Pixel
    • [x] Line
    • [x] Circle
    • [x] Ellipse
    • [x] Ring
    • [x] Rectangle
    • [x] Square
    • [x] Triangle
    • [x] Polygon
  • [x] Textures
    • [x] Loading images from files
    • [ ] Loading images from code, data,
    • [x] Loading Texture (into GPU memory) from file or image
    • [x] Sprites
    • [x] Animated Sprites
      • TODO:
        • [ ] reverse
        • [x] pause/stop
  • [x] Text
    • [x] Loading Fonts
    • [x] Drawing Text with Fonts
  • [x] Sound
    • [ ] Loading Wave
    • [x] Loading Sounds
    • [x] Play, stop, pause, resume
    • [ ]
  • [ ] Entity (for inheriting game objects with functionality)
    • [ ] implement children/parent, generic containers
    • [x] SpriteEntity
    • [x] ShapeEntity
  • [ ] 3D
    • [x] Camera
    • [x] Model
    • [x] Mesh
    • [ ] Shaders

Contributing

  1. Fork it (https://github.com/mswieboda/game/fork)
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

Contributors