|  |  |  | @ -9,6 +9,23 @@ | 
		
	
		
			
				|  |  |  |  |       (< (+ x w) (+ cx cw)) | 
		
	
		
			
				|  |  |  |  |       (< (+ y h) (+ cy ch))))) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | (defn collide? [obj obj2] | 
		
	
		
			
				|  |  |  |  |   (let [{:keys [x y w h]} obj | 
		
	
		
			
				|  |  |  |  |         {ox :x oy :y ow :w oh :h} obj2] | 
		
	
		
			
				|  |  |  |  |     (or | 
		
	
		
			
				|  |  |  |  |       ; top left corner | 
		
	
		
			
				|  |  |  |  |       (and (>= x ox) (>= y oy) | 
		
	
		
			
				|  |  |  |  |         (<= x (+ ox ow)) (<= y (+ oy oh))) | 
		
	
		
			
				|  |  |  |  |       ; top right corner | 
		
	
		
			
				|  |  |  |  |       (and (>= (+ x h) ox) (>= y oy) | 
		
	
		
			
				|  |  |  |  |         (<= (+ x h) (+ ox ow)) (<= y (+ oy oh))) | 
		
	
		
			
				|  |  |  |  |       ; bottom left corner | 
		
	
		
			
				|  |  |  |  |       (and (>= x ox) (>= (+ y h) oy) | 
		
	
		
			
				|  |  |  |  |         (<= x (+ ox ow)) (<= (+ y h) (+ oy oh))) | 
		
	
		
			
				|  |  |  |  |       ; bottom right corner | 
		
	
		
			
				|  |  |  |  |       (and (>= (+ x w) ox) (>= (+ y h) oy) | 
		
	
		
			
				|  |  |  |  |         (<= (+ x w) (+ ox ow)) (<= (+ y h) (+ oy oh)))))) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | (defn moved-object [obj pxs] | 
		
	
		
			
				|  |  |  |  |   (let [{:keys [x y d]} obj] | 
		
	
		
			
				|  |  |  |  |     (cond | 
		
	
	
		
			
				
					|  |  |  | @ -26,14 +43,24 @@ | 
		
	
		
			
				|  |  |  |  |           :y (+ y pxs)) | 
		
	
		
			
				|  |  |  |  |       :else obj))) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | (defn bump-in-wall [obj container] | 
		
	
		
			
				|  |  |  |  | (defn bump-into [obj obj2] | 
		
	
		
			
				|  |  |  |  |   (let [{:keys [x y w h d]} obj | 
		
	
		
			
				|  |  |  |  |         {ox :x oy :y ow :w oh :h} obj2] | 
		
	
		
			
				|  |  |  |  |     (case d | 
		
	
		
			
				|  |  |  |  |       :w (assoc obj :x (+ ox ow 1)) | 
		
	
		
			
				|  |  |  |  |       :e (assoc obj :x (dec (- ox w))) | 
		
	
		
			
				|  |  |  |  |       :n (assoc obj :y (+ oy oh 1)) | 
		
	
		
			
				|  |  |  |  |       :s (assoc obj :y (dec (- oy h)))   | 
		
	
		
			
				|  |  |  |  |       obj))) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | (defn bump-inside-container [obj container] | 
		
	
		
			
				|  |  |  |  |   (let [{:keys [x y w h d]} obj | 
		
	
		
			
				|  |  |  |  |         {cx :x cy :y cw :w ch :h} container] | 
		
	
		
			
				|  |  |  |  |     (case d | 
		
	
		
			
				|  |  |  |  |       :w (assoc obj :x (inc cx)) | 
		
	
		
			
				|  |  |  |  |       :e (update obj :x #(- (+ cx cw) w 1)) | 
		
	
		
			
				|  |  |  |  |       :e (assoc obj :x (- (+ cx cw) w 1)) | 
		
	
		
			
				|  |  |  |  |       :n (assoc obj :y (inc cy)) | 
		
	
		
			
				|  |  |  |  |       :s (update obj :y #(- (+ cy ch) h 1)) | 
		
	
		
			
				|  |  |  |  |       :s (assoc obj :y (- (+ cy ch) h 1)) | 
		
	
		
			
				|  |  |  |  |       :? obj))) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | (defn pps->px [gamestate obj] | 
		
	
	
		
			
				
					|  |  |  | @ -47,7 +74,7 @@ | 
		
	
		
			
				|  |  |  |  |   (let [moved (moved-object obj pxs)] | 
		
	
		
			
				|  |  |  |  |     (if (in? moved container) | 
		
	
		
			
				|  |  |  |  |       moved | 
		
	
		
			
				|  |  |  |  |       (bump-in-wall obj container)))) | 
		
	
		
			
				|  |  |  |  |       (bump-inside-container obj container)))) | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | (defn move-inside-gamestate [gamestate obj] | 
		
	
		
			
				|  |  |  |  |   (let [pxs (pps->px gamestate obj) | 
		
	
	
		
			
				
					|  |  |  | 
 |