From 6db18043306350098b5d761a406dd27bedea5f0f Mon Sep 17 00:00:00 2001 From: zongor Date: Mon, 1 Jan 2024 16:33:39 -0500 Subject: [PATCH] simplify stuff, start work on message commands --- lisp/client/common-lisp/client.lisp | 76 ++++++++++++++++------------- lisp/server/server.lisp | 11 ++++- 2 files changed, 51 insertions(+), 36 deletions(-) diff --git a/lisp/client/common-lisp/client.lisp b/lisp/client/common-lisp/client.lisp index 2dbf2b4..b248d21 100644 --- a/lisp/client/common-lisp/client.lisp +++ b/lisp/client/common-lisp/client.lisp @@ -1,8 +1,8 @@ (load "~/quicklisp/setup.lisp") ; need to load quicklisp -(ql:quickload '(:cl-raylib :cl-bcrypt :websocket-driver-client :bordeaux-threads :alexandria :com.inuoe.jzon)) +(ql:quickload '(:cl-raylib :cl-bcrypt :websocket-driver-client :alexandria :com.inuoe.jzon)) (defpackage :mmo-client - (:use :common-lisp :cl-raylib :3d-vectors :websocket-driver-client :bordeaux-threads :alexandria :com.inuoe.jzon)) + (:use :common-lisp :cl-raylib :raylib :3d-vectors :websocket-driver-client :alexandria :com.inuoe.jzon)) (in-package :mmo-client) @@ -11,39 +11,47 @@ (wsd:start-connection *client*) (wsd:on :message *client* (lambda (message) - (format t "~&Got: ~A~%" message))) + (format t "~A~%" message))) -(defun game-loop () - (let* ((screen-width 800) - (screen-height 450) - (username "username") - (title "mmo client - common lisp") - (camera (make-camera3d :position (vec 4.0 2.0 4.0) - :target (vec 0.0 0.5 0.0) - :up (vec 0.0 1.0 0.0) - :fovy 60.0 - :projection :camera-perspective)) - (cube-screen-pos (vec 0.0 0.0))) +(let* ((screen-width 800) + (screen-height 450) + (username "zongor") + (title "mmo client - common lisp") + (camera (make-camera3d :position (vec 4.0 2.0 4.0) + :target (vec 0.0 0.5 0.0) + :up (vec 0.0 1.0 0.0) + :fovy 60.0 + :projection :camera-perspective)) + (cube-screen-pos (vec 0.0 0.0))) - (with-window (screen-width screen-height title) - (disable-cursor) - (set-target-fps 60) ; Set our game to run at 60 FPS - (loop - until (window-should-close) ; detect window close button or ESC key - do - (update-camera camera :camera-third-person) - (wsd:send *client* (com.inuoe.jzon:stringify (list (camera3d-target camera) username :red :move))) - (setf cube-screen-pos (get-world-to-screen (v+ (camera3d-target camera) (vec 0 1.0 0)) camera)) - (with-drawing - (clear-background :raywhite) - (with-mode-3d (camera) - (draw-cube (camera3d-target camera) 1.0 1.0 1.0 :red) - (draw-cube-wires (camera3d-target camera) 1.0 1.0 1.0 :maroon) - (draw-grid 20 1.0)) - (draw-text username (- (floor (vx cube-screen-pos)) (floor (measure-text username 20) 2)) - (floor (vy cube-screen-pos) ) 20 :black))))) - (wsd:close-connection *client*)) + (with-window (screen-width screen-height title) + ;; (disable-cursor) + (set-target-fps 60) ; Set our game to run at 60 FPS -(bt:make-thread 'game-loop) + (wsd:send *client* (com.inuoe.jzon:stringify (list :login username))) + (loop + until (window-should-close) ; detect window close button or ESC key + do + (update-camera camera :camera-third-person) -(bt:run-in-new-thread (bt:get-thread 'game-loop)) + (when (is-key-down 87) + (wsd:send *client* (com.inuoe.jzon:stringify (list :move (camera3d-target camera))))) + (when (is-key-down 65) + (wsd:send *client* (com.inuoe.jzon:stringify (list :move (camera3d-target camera))))) + (when (is-key-down 83) + (wsd:send *client* (com.inuoe.jzon:stringify (list :move (camera3d-target camera))))) + (when (is-key-down 68) + (wsd:send *client* (com.inuoe.jzon:stringify (list :move (camera3d-target camera))))) + + (setf cube-screen-pos (get-world-to-screen (v+ (camera3d-target camera) (vec 0 1.0 0)) camera)) + (with-drawing + (clear-background :raywhite) + (with-mode-3d (camera) + (draw-cube (camera3d-target camera) 1.0 1.0 1.0 :red) + (draw-cube-wires (camera3d-target camera) 1.0 1.0 1.0 :maroon) + (draw-grid 20 1.0)) + (draw-text username (- (floor (vx cube-screen-pos)) (floor (measure-text username 20) 2)) + (floor (vy cube-screen-pos) ) 20 :black)))) + (wsd:send *client* (com.inuoe.jzon:stringify (list :logout username)))) + +(wsd:close-connection *client*) diff --git a/lisp/server/server.lisp b/lisp/server/server.lisp index 1fd1a9e..71d82bd 100644 --- a/lisp/server/server.lisp +++ b/lisp/server/server.lisp @@ -14,9 +14,12 @@ (format nil "user-~a" (random 100000)))) (defun broadcast-to-room (connection message) - (let ((message (format nil "~a: ~a" - (gethash connection *connections*) + (let ((message (format nil "~a" + ;(gethash connection *connections*) message))) + + (format t "~A~%" (com.inuoe.jzon:parse message)) + (loop :for con :being :the :hash-key :of *connections* :do (websocket-driver:send con message)))) @@ -40,6 +43,10 @@ (lambda (&key code reason) (declare (ignore code reason)) (handle-close-connection ws))) + (websocket-driver:on :error ws + (lambda (error) + (format t "Got an error: ~S~%" error))) + (lambda (responder) (declare (ignore responder)) (websocket-driver:start-connection ws))))