mirror of
https://github.com/carp-lang/Carp.git
synced 2024-10-26 05:45:37 +03:00
Game example works with kebab case.
This commit is contained in:
parent
3965eaa73d
commit
eb7595b159
@ -30,7 +30,7 @@ String SDL_Keycode_str(SDL_Keycode a) {
|
||||
return buffer;
|
||||
}
|
||||
|
||||
SDL_Rect SDL_make_MINUS_rect(int x, int y, int w, int h) {
|
||||
SDL_Rect SDL_rect(int x, int y, int w, int h) {
|
||||
SDL_Rect r;
|
||||
r.x = x;
|
||||
r.y = y;
|
||||
@ -39,7 +39,7 @@ SDL_Rect SDL_make_MINUS_rect(int x, int y, int w, int h) {
|
||||
return r;
|
||||
}
|
||||
|
||||
SDL_Point SDL_make_MINUS_point(int x, int y) {
|
||||
SDL_Point SDL_point(int x, int y) {
|
||||
SDL_Point p;
|
||||
p.x = x;
|
||||
p.y = y;
|
||||
|
119
core/sdl.carp
119
core/sdl.carp
@ -16,55 +16,56 @@
|
||||
(register-type SDL_Window)
|
||||
|
||||
(defmodule SDL
|
||||
;; Setup and quit
|
||||
(register Init (Fn [Int] ()))
|
||||
(register CreateWindowAndRenderer (Fn [Int Int Int (Ptr (Ptr SDL_Window)) (Ptr (Ptr SDL_Renderer))] ()))
|
||||
(register SetWindowTitle (Fn [(Ptr SDL_Window) (Ptr Char)] ()))
|
||||
(register Delay (Fn [Int] ()))
|
||||
(register INIT_EVERYTHING Int)
|
||||
(register DestroyWindow (Fn [(Ptr SDL_Window)] ()))
|
||||
(register Quit (Fn [] ()))
|
||||
;; Setup and teardown
|
||||
(register INIT_EVERYTHING Int) ;; Weird macro
|
||||
(register init (Fn [Int] ()))
|
||||
(register create-window-and-renderer (Fn [Int Int Int (Ptr (Ptr SDL_Window)) (Ptr (Ptr SDL_Renderer))] ()) "SDL_CreateWindowAndRenderer")
|
||||
(register set-window-title (Fn [(Ptr SDL_Window) (Ptr Char)] ()) "SDL_SetWindowTitle")
|
||||
(register delay (Fn [Int] ()) "SDL_Delay")
|
||||
(register destroy-window (Fn [(Ptr SDL_Window)] ()) "SDL_DestroyWindow")
|
||||
(register quit (Fn [] ()) "SDL_Quit")
|
||||
|
||||
;; SDL_EventType
|
||||
(register QUIT SDL_EventType)
|
||||
(register KEYDOWN SDL_EventType)
|
||||
(register UP SDL_EventType)
|
||||
(register MOUSEMOTION SDL_EventType)
|
||||
(register MOUSEBUTTONDOWN SDL_EventType)
|
||||
(register MOUSEBUTTONUP SDL_EventType)
|
||||
(register MOUSEWHEEL SDL_EventType)
|
||||
(register event-quit SDL_EventType "SDL_QUIT")
|
||||
(register event-key-down SDL_EventType "SDL_KEYDOWN")
|
||||
(register event-key-up SDL_EventType "SDL_KEYUP")
|
||||
(register event-mouse-motion SDL_EventType "SDL_MOUSEMOTION")
|
||||
(register event-mouse-button-down SDL_EventType "SDL_MOUSEBUTTONDOWN")
|
||||
(register event-mouse-button-up SDL_EventType "SDL_MOUSEBUTTONUP")
|
||||
(register event-mouse-wheel SDL_EventType "SDL_MOUSEWHEEL")
|
||||
|
||||
(defmodule EventType
|
||||
(register = (Fn [SDL_EventType SDL_EventType] Bool)))
|
||||
|
||||
(register make-rect (Fn [Int Int Int Int] SDL_Rect)) ;; x y w h
|
||||
(register make-point (Fn [Int Int] SDL_Point))
|
||||
;; Helpers (not part of SDL)
|
||||
(register rect (Fn [Int Int Int Int] SDL_Rect)) ;; x y w h
|
||||
(register point (Fn [Int Int] SDL_Point)) ;; x y
|
||||
|
||||
;; Rendering
|
||||
(register RenderPresent (Fn [(Ptr SDL_Renderer)] ()))
|
||||
(register RenderClear (Fn [(Ptr SDL_Renderer)] ()))
|
||||
(register RenderCopy (Fn [(Ptr SDL_Renderer) (Ptr SDL_Texture) (Ptr SDL_Rect) (Ptr SDL_Rect)] ())) ;; src-rect & dest-rect
|
||||
(register RenderCopyEx (Fn [(Ptr SDL_Renderer) (Ptr SDL_Texture) (Ptr SDL_Rect) (Ptr SDL_Rect) Double (Ptr SDL_Point) SDL_RendererFlip] ())) ;; src-rect, dest-rect, angle, center, flip
|
||||
(register SetRenderDrawColor (Fn [(Ptr SDL_Renderer) Int Int Int Int] ())) ;; rgba
|
||||
(register RenderFillRect (Fn [(Ptr SDL_Renderer) (Ptr SDL_Rect)] ()))
|
||||
(register RenderFillRects (Fn [(Ptr SDL_Renderer) (Ptr SDL_Rect) Int] ())) ;; rects, count
|
||||
(register RenderDrawLine (Fn [(Ptr SDL_Renderer) Int Int Int Int] ())) ;; x1 y1 x2 y2
|
||||
(register RenderDrawLines (Fn [(Ptr SDL_Renderer) (Ptr SDL_Point) Int] ())) ;; lines, count
|
||||
(register DestroyTexture (Fn [(Ptr SDL_Texture)] ()))
|
||||
(register SetRenderDrawBlendMode (Fn [(Ptr SDL_Renderer) SDL_BlendMode] ()))
|
||||
(register BlitSurface (Fn [(Ptr SDL_Surface) (Ptr SDL_Rect) (Ptr SDL_Surface) (Ptr SDL_Rect)] ())) ;; src, srcrect, dst, dstrect
|
||||
(register QueryTexture (Fn [(Ptr SDL_Texture) (Ptr Int) (Ptr Int) (Ptr Int) (Ptr Int)] ())) ;; ? ? w h
|
||||
(register render-present (Fn [(Ptr SDL_Renderer)] ()) "SDL_RenderPresent")
|
||||
(register render-clear (Fn [(Ptr SDL_Renderer)] ()) "SDL_RenderClear")
|
||||
(register render-copy (Fn [(Ptr SDL_Renderer) (Ptr SDL_Texture) (Ptr SDL_Rect) (Ptr SDL_Rect)] ()) "SDL_RenderCopy") ;; src-rect & dest-rect
|
||||
(register render-copy-ex (Fn [(Ptr SDL_Renderer) (Ptr SDL_Texture) (Ptr SDL_Rect) (Ptr SDL_Rect) Double (Ptr SDL_Point) SDL_RendererFlip] ()) "SDL_RenderCopyEx") ;; src-rect, dest-rect, angle, center, flip
|
||||
(register set-render-draw-color (Fn [(Ptr SDL_Renderer) Int Int Int Int] ()) "SDL_SetRenderDrawColor") ;; rgba
|
||||
(register render-fill-rect (Fn [(Ptr SDL_Renderer) (Ptr SDL_Rect)] ()) "SDL_RenderFillRect")
|
||||
(register render-fill-rects (Fn [(Ptr SDL_Renderer) (Ptr SDL_Rect) Int] ()) "SDL_RenderFillRects") ;; rects, count
|
||||
(register render-draw-line (Fn [(Ptr SDL_Renderer) Int Int Int Int] ()) "SDL_RenderDrawLine") ;; x1 y1 x2 y2
|
||||
(register render-draw-lines (Fn [(Ptr SDL_Renderer) (Ptr SDL_Point) Int] ()) "SDL_RenderDrawLines") ;; lines, count
|
||||
(register destroy-texture (Fn [(Ptr SDL_Texture)] ()) "SDL_DestroyTexture")
|
||||
(register set-render-draw-blend-mode (Fn [(Ptr SDL_Renderer) SDL_BlendMode] ()) "SDL_SetRenderDrawBlendMode")
|
||||
(register blit-surface (Fn [(Ptr SDL_Surface) (Ptr SDL_Rect) (Ptr SDL_Surface) (Ptr SDL_Rect)] ()) "SDL_BlitSurface") ;; src, srcrect, dst, dstrect
|
||||
(register query-texture (Fn [(Ptr SDL_Texture) (Ptr Int) (Ptr Int) (Ptr Int) (Ptr Int)] ()) "SDL_QueryTexture") ;; ? ? w h
|
||||
|
||||
;; Blend modes
|
||||
(register BLENDMODE_NONE SDL_BlendMode)
|
||||
(register BLENDMODE_BLEND SDL_BlendMode)
|
||||
(register BLENDMODE_ADD SDL_BlendMode)
|
||||
(register BLENDMODE_MOD SDL_BlendMode)
|
||||
(register blend-mode-none SDL_BlendMode "SDL_BLENDMODE_NONE")
|
||||
(register blend-mode-blend SDL_BlendMode "SDL_BLENDMODE_BLEND")
|
||||
(register blend-mode-add SDL_BlendMode "SDL_BLENDMODE_ADD")
|
||||
(register blend-mode-mod SDL_BlendMode "SDL_BLENDMODE_MOD")
|
||||
|
||||
;; SDL_RendererFlip
|
||||
(register FLIP_NONE SDL_RendererFlip)
|
||||
(register FLIP_HORIZONTAL SDL_RendererFlip)
|
||||
(register FLIP_VERTICAL SDL_RendererFlip)
|
||||
(register flip-none SDL_RendererFlip "SDL_FLIP_NONE")
|
||||
(register flip-horizontal SDL_RendererFlip "SDL_FLIP_HORIZONTAL")
|
||||
(register flip-vertical SDL_RendererFlip "SDL_FLIP_VERTICAL")
|
||||
|
||||
;; Events
|
||||
(register poll-event (Fn [(Ptr SDL_Event)] Bool) "SDL_PollEvent")
|
||||
@ -91,26 +92,26 @@
|
||||
(not (SDL.Keycode.= x y))))
|
||||
|
||||
;; Mouse
|
||||
(register GetMouseState (Fn [(Ptr Int) (Ptr Int)] Int))
|
||||
(register BUTTON (Fn [Int] Int))
|
||||
(register BUTTON_LEFT Int)
|
||||
(register BUTTON_RIGHT Int)
|
||||
;; (register get-mouse-state (Fn [(Ptr Int) (Ptr Int)] Int) "SDL_GetMouseState")
|
||||
;; (register button (Fn [Int] Int) "SDL_BUTTON")
|
||||
;; (register button-left Int "BUTTON_LEFT")
|
||||
;; (register button-right Int "BUTTON_RIGHT")
|
||||
|
||||
(deftype MouseState [x Int
|
||||
y Int
|
||||
left Bool
|
||||
right Bool])
|
||||
;; (deftype MouseState [x Int
|
||||
;; y Int
|
||||
;; left Bool
|
||||
;; right Bool])
|
||||
|
||||
(defn get-mouse-state []
|
||||
(let [x 0
|
||||
y 0
|
||||
state (GetMouseState (address x) (address y))
|
||||
l (/= 0 (Int.bit-and state (SDL.BUTTON SDL.BUTTON_LEFT)))
|
||||
r (/= 0 (Int.bit-and state (SDL.BUTTON SDL.BUTTON_RIGHT)))]
|
||||
(MouseState.init x y l r)))
|
||||
;; (defn get-mouse-state []
|
||||
;; (let [x 0
|
||||
;; y 0
|
||||
;; state (SDL.get-mouse-state (address x) (address y))
|
||||
;; l (/= 0 (Int.bit-and state (SDL.button SDL.button-left)))
|
||||
;; r (/= 0 (Int.bit-and state (SDL.button SDL.button-right)))]
|
||||
;; (MouseState.init x y l r)))
|
||||
|
||||
;; Time
|
||||
(register GetTicks (Fn [] Int))
|
||||
(register get-ticks (Fn [] Int) "SDL_GetTicks")
|
||||
|
||||
)
|
||||
|
||||
@ -126,8 +127,8 @@
|
||||
(let [_ SDL.INIT_EVERYTHING
|
||||
win NULL
|
||||
ren NULL]
|
||||
(do (SDL.CreateWindowAndRenderer width height 0 (address win) (address ren))
|
||||
(SDL.SetWindowTitle win (cstr title))
|
||||
(do (SDL.create-window-and-renderer width height 0 (address win) (address ren))
|
||||
(SDL.set-window-title win (cstr title))
|
||||
(SDLApp.init win ren draw-fn event-fn))))
|
||||
(defn run [app]
|
||||
(let [event-fn @(SDLApp.event-handler app)
|
||||
@ -137,9 +138,9 @@
|
||||
(do
|
||||
(event-fn app)
|
||||
(draw-fn app rend)
|
||||
(SDL.RenderPresent rend)
|
||||
(SDL.Delay 30)))))
|
||||
(SDL.render-present rend)
|
||||
(SDL.delay 30)))))
|
||||
(defn stop [app]
|
||||
(do (SDL.DestroyWindow @(window app))
|
||||
(SDL.Quit)
|
||||
(do (SDL.destroy-window @(window app))
|
||||
(SDL.quit)
|
||||
(System.exit 0))))
|
||||
|
@ -1,5 +1,7 @@
|
||||
(system-include "SDL2/SDL_image.h")
|
||||
(add-lib "-lSDL2_image")
|
||||
|
||||
(register IMG_LoadTexture (Fn [(Ptr SDL_Renderer) (Ptr Char)] (Ptr SDL_Texture)))
|
||||
(register IMG_Load (Fn [(Ptr Char)] (Ptr SDL_Surface)))
|
||||
(defmodule IMG
|
||||
(register load-texture (Fn [(Ptr SDL_Renderer) (Ptr Char)] (Ptr SDL_Texture)) "IMG_LoadTexture")
|
||||
(register load (Fn [(Ptr Char)] (Ptr SDL_Surface)) "IMG_Load")
|
||||
)
|
||||
|
@ -5,7 +5,7 @@
|
||||
(use Array)
|
||||
|
||||
(load "SDL.carp")
|
||||
(load "sdl_image.carp")
|
||||
(load "SDL_image.carp")
|
||||
|
||||
(Project.config "title" "Game")
|
||||
|
||||
@ -15,9 +15,9 @@
|
||||
(the Int (random-between 0 rand-max)))
|
||||
|
||||
(defn random-lines []
|
||||
(let [p1 (SDL.make-point (r) (r))
|
||||
p2 (SDL.make-point (r) (r))
|
||||
p3 (SDL.make-point (r) (r))]
|
||||
(let [p1 (SDL.point (r) (r))
|
||||
p2 (SDL.point (r) (r))
|
||||
p3 (SDL.point (r) (r))]
|
||||
[p1 p2 p3 p1]))
|
||||
|
||||
(deftype Images
|
||||
@ -28,50 +28,50 @@
|
||||
(let [w 0
|
||||
h 0]
|
||||
(do
|
||||
(SDL.QueryTexture texture NULL NULL (address w) (address h))
|
||||
(SDL.make-rect 0 0 w h))))
|
||||
(SDL.query-texture texture NULL NULL (address w) (address h))
|
||||
(SDL.rect 0 0 w h))))
|
||||
|
||||
(def images (Images.init NULL NULL))
|
||||
|
||||
(defn draw [app rend]
|
||||
(let [rect (SDL.make-rect 32 32 (- 512 64) (- 512 64))]
|
||||
(let [rect (SDL.rect 32 32 (- 512 64) (- 512 64))]
|
||||
(do
|
||||
(SDL.SetRenderDrawBlendMode rend SDL.BLENDMODE_ADD)
|
||||
(SDL.SetRenderDrawColor rend 0 0 0 255)
|
||||
(SDL.RenderClear rend)
|
||||
(SDL.SetRenderDrawColor rend 200 250 255 255)
|
||||
(SDL.RenderFillRect rend (address rect))
|
||||
(SDL.SetRenderDrawColor rend 100 50 255 155)
|
||||
(let [rects [(SDL.make-rect 48 48 16 16)
|
||||
(SDL.make-rect 48 80 16 16)
|
||||
(SDL.make-rect 48 112 16 16)
|
||||
(SDL.make-rect 48 144 16 16)]
|
||||
(SDL.set-render-draw-blend-mode rend SDL.blend-mode-add)
|
||||
(SDL.set-render-draw-color rend 0 0 0 255)
|
||||
(SDL.render-clear rend)
|
||||
(SDL.set-render-draw-color rend 200 250 255 255)
|
||||
(SDL.render-fill-rect rend (address rect))
|
||||
(SDL.set-render-draw-color rend 100 50 255 155)
|
||||
(let [rects [(SDL.rect 48 48 16 16)
|
||||
(SDL.rect 48 80 16 16)
|
||||
(SDL.rect 48 112 16 16)
|
||||
(SDL.rect 48 144 16 16)]
|
||||
n (count &rects)]
|
||||
(SDL.RenderFillRects rend (raw rects) n))
|
||||
(SDL.SetRenderDrawColor rend 255 50 100 255)
|
||||
(SDL.render-fill-rects rend (raw rects) n))
|
||||
(SDL.set-render-draw-color rend 255 50 100 255)
|
||||
(for [x 0 512 16]
|
||||
(do
|
||||
(SDL.RenderDrawLine rend x 0 512 512)
|
||||
(SDL.RenderDrawLine rend 512 (+ 256 (/ x 2)) 0 512)))
|
||||
(SDL.SetRenderDrawColor rend 0 0 0 255)
|
||||
(SDL.render-draw-line rend x 0 512 512)
|
||||
(SDL.render-draw-line rend 512 (+ 256 (/ x 2)) 0 512)))
|
||||
(SDL.set-render-draw-color rend 0 0 0 255)
|
||||
(let [lines (random-lines)
|
||||
n (count &lines)]
|
||||
(SDL.RenderDrawLines rend (raw lines) n))
|
||||
(SDL.render-draw-lines rend (raw lines) n))
|
||||
(let [img @(Images.img1 &images)]
|
||||
(SDL.RenderCopyEx rend
|
||||
img
|
||||
(address (dimensions img))
|
||||
(address (SDL.make-rect 100 100 300 300))
|
||||
(* 0.1 (from-int (SDL.GetTicks)))
|
||||
(address (SDL.make-point 150 150))
|
||||
SDL.FLIP_NONE)))))
|
||||
(SDL.render-copy-ex rend
|
||||
img
|
||||
(address (dimensions img))
|
||||
(address (SDL.rect 100 100 300 300))
|
||||
(* 0.1 (from-int (SDL.get-ticks)))
|
||||
(address (SDL.point 150 150))
|
||||
SDL.flip-none)))))
|
||||
|
||||
(defn handle-events [app]
|
||||
(let [event (SDL.event-init)]
|
||||
(while (SDL.poll-event (address event))
|
||||
(let [et (SDL.event-type &event)]
|
||||
(cond (= et SDL.QUIT) (SDLApp.stop app)
|
||||
(= et SDL.KEYDOWN) (let [key (SDL.event-keycode &event)]
|
||||
(cond (= et SDL.event-quit) (SDLApp.stop app)
|
||||
(= et SDL.event-key-down) (let [key (SDL.event-keycode &event)]
|
||||
(cond
|
||||
(= key SDL.key-escape) (SDLApp.stop app)
|
||||
(println "Unrecognized key.")))
|
||||
@ -81,6 +81,6 @@
|
||||
(let [app (SDLApp.create "~ CARP ~" 512 512 draw handle-events)
|
||||
rend @(SDLApp.renderer &app)]
|
||||
(do
|
||||
(set! images (Images.init (IMG_LoadTexture rend (cstr "./img/square.png"))
|
||||
(IMG_LoadTexture rend (cstr "./img/carp_logo_969_no_texture.png"))))
|
||||
(set! images (Images.init (IMG.load-texture rend (cstr "./img/square.png"))
|
||||
(IMG.load-texture rend (cstr "./img/carp_logo_969_no_texture.png"))))
|
||||
(SDLApp.run &app))))
|
||||
|
Loading…
Reference in New Issue
Block a user