From e495b361e0e9ac5f723928c9e626320ae5e26716 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Sun, 15 May 2016 20:37:18 -0400 Subject: Factor out all game model code into the relevant modules. --- lisparuga/stats.scm | 45 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) (limited to 'lisparuga/stats.scm') diff --git a/lisparuga/stats.scm b/lisparuga/stats.scm index 3abcdef..8d159ec 100644 --- a/lisparuga/stats.scm +++ b/lisparuga/stats.scm @@ -16,6 +16,8 @@ (define-module (lisparuga stats) #:use-module (sly records) + #:use-module (lisparuga enemies) + #:use-module (lisparuga player) #:use-module (lisparuga utils) #:export (make-stats stats? @@ -23,7 +25,10 @@ stats-lives stats-chain stats-chain-type - stats-chain-progress)) + stats-chain-progress + decrement-life + add-to-score + add-to-chain)) (define-record-type* %make-stats make-stats @@ -33,3 +38,41 @@ (chain stats-chain 0) (chain-type stats-chain-type #f) (chain-progress stats-chain-progress 0)) + +(define (decrement-life stats) + (make-stats #:inherit stats + #:lives (max 0 (1- (stats-lives stats))))) + +(define max-chain-multiplier 10) + +(define (add-to-score enemy stats) + ;; TODO: Award different points for different types of enemies. + (make-stats #:inherit stats + #:score (+ (stats-score stats) + 1000 ; base kill points + ;; Chain multiplier. + (* 255 + (min (stats-chain stats) + max-chain-multiplier))))) + +(define (add-to-chain enemy stats) + (let* ((enemy-polarity (enemy-polarity enemy)) + (chain-polarity (stats-chain-type stats)) + (progress (stats-chain-progress stats))) + (cond + ((or (zero? progress) (= progress 3)) + (make-stats #:inherit stats + #:chain-type enemy-polarity + #:chain-progress 1)) + ((not (eq? enemy-polarity chain-polarity)) + (make-stats #:inherit stats + #:chain-type #f + #:chain-progress 0 + #:chain 0)) + ((= progress 1) + (make-stats #:inherit stats + #:chain-progress 2)) + ((= progress 2) + (make-stats #:inherit stats + #:chain-progress 3 + #:chain (1+ (stats-chain stats))))))) -- cgit v1.2.3