Skip to content
Snippets Groups Projects
Select Git revision
  • e76ad6f2d3fd55a26f8ede064539ef2b8a135f2f
  • main default
  • feat_deconstruct_irq_gen
  • laudantium-unde-et-iste-et
  • ea-dolor-quia-et-sint
  • ipsum-consequatur-et-in-et
  • sapiente-et-possimus-neque-est
  • qui-in-quod-nam-voluptatem
  • aut-deleniti-est-voluptatum-repellat
  • modi-et-quam-sunt-consequatur
  • et-laudantium-voluptas-quos-pariatur
  • voluptatem-quia-fugit-ut-perferendis
  • at-adipisci-ducimus-qui-nihil
  • dolorem-ratione-sed-illum-minima
  • inventore-temporibus-ipsum-neque-rerum
  • autem-at-dolore-molestiae-et
  • doloribus-dolorem-quos-adipisci-et
  • sed-sit-tempore-expedita-possimus
  • et-recusandae-deleniti-voluptas-consectetur
  • atque-corrupti-laboriosam-nobis-explicabo
  • nostrum-ut-vel-voluptates-et
21 results

ahb_input_hash_stim.fri

Blame
  • Health.java 4.76 KiB
    package Character;
    
    import Listeners.HealthChangeListener;
    import UI.InfoPopup;
    import javafx.beans.property.SimpleIntegerProperty;
    import javafx.scene.Parent;
    import javafx.scene.Scene;
    import javafx.stage.Stage;
    
    import java.util.ArrayList;
    import java.util.Collections;
    
    public class Health {
        private final ArrayList<Integer> healthBoxes = new ArrayList<>();
        private final SimpleIntegerProperty numberOfHealth = new SimpleIntegerProperty(0);
        private final ArrayList<HealthChangeListener> healthChangeListeners = new ArrayList<>();
    
        private int bashing = 0;
        private int lethal = 0;
        private int agg = 0;
    
        /**
         * @param base Basic health boxes
         * @param oxBody Health boxes per ox-body
         * @param oxBodies Number of ox-bodies purchased
         */
        public Health(int[] base, int[] oxBody, int oxBodies) {
            //Add base health boxes
            for(int box : base) {
                healthBoxes.add(box);
            }
            //Add ox body health boxes
            for(int i =0 ; i < oxBodies; i++) {
                for(int box : oxBody) {
                    healthBoxes.add(box);
                }
            }
            sort();
        }
    
        /**
         * Sort list & update length
         */
        public void sort() {
            //Sort health boxes in order
            healthBoxes.sort(Collections.reverseOrder());
            //Update number of health
            numberOfHealth.set(healthBoxes.size());
        }
    
        /**
         * Add Health boxes
         */
        public void gainMaxHealth(int[] boxes) {
            for(int box:boxes) {
                healthBoxes.add(box);
            }
            sort();
            notifyListeners();
        }
    
        /**
         * Remove Health boxes
         */
        public void loseMaxHealth(int[] boxes) {
            //Remove given health boxes
            for(int box:boxes) {
                healthBoxes.remove(Integer.valueOf(box));
            }
            sort();
    
            //If new health levels lower than current damage, resolve
            if(bashing > numberOfHealth.get()) {
                bashingDamage(0);
            }
            if(lethal > numberOfHealth.get()) {
                lethalDamage(0);
            }
            if(agg > numberOfHealth.get()) {
                aggDamage(0);
            }
            notifyListeners();
        }
    
        /**
         * Take bashing damage
         */
        public void bashingDamage(int damage) {
            if(bashing + damage > numberOfHealth.get()) {
                bashing = numberOfHealth.get();
                lethalDamage(bashing + damage - numberOfHealth.get());
            } else {
                bashing += damage;
                if(bashing < 0) {
                    bashing = 0;
                }
            }
            notifyListeners();
        }
    
        /**
         * Take lethal damage
         */
        public void lethalDamage(int damage) {
            if(lethal + damage > numberOfHealth.get()) {
                lethal = numberOfHealth.get();
                aggDamage(lethal + damage - numberOfHealth.get());
            } else {
                lethal += damage;
                if(lethal < 0) {
                    lethal = 0;
                }
            }
            if(bashing < lethal) {
                bashing = lethal;
            }
            notifyListeners();
        }
    
        /**
         * Take agg damage
         */
        public void aggDamage(int damage) {
            if(agg + damage > numberOfHealth.get()) {
                agg = numberOfHealth.get();
                death(agg + damage - numberOfHealth.get());
            } else {
                agg += damage;
                if(agg < 0) {
                    agg = 0;
                }
            }
            if(lethal < agg) {
                lethal = agg;
            }
            notifyListeners();
        }
    
        /**
         * When agg damage == health
         */
        public void death(int damage) {
            Parent root;
            try {
                root = new InfoPopup("You're "+damage+" agg over limit.");
                Stage stage = new Stage();
                stage.setTitle("Death");
                stage.setScene(new Scene(root, 200, 150));
                stage.show();
            } catch (Exception ignored) {
    
            }
        }
    
        /**
         * Assorted getting list
         */
        public SimpleIntegerProperty getNumberOfHealth() {
            return numberOfHealth;
        }
        public int getBashing() {
            return bashing;
        }
        public int getLethal() {
            return lethal;
        }
        public int getAgg() {
            return agg;
        }
        public ArrayList<Integer> getHealthBoxes() {
            return healthBoxes;
        }
    
        /**
         * Add new listener
         */
        public void addNewListener(HealthChangeListener listener) {
            healthChangeListeners.add(listener);
        }
    
        /**
         * Alert all listeners of an update
         */
        private void notifyListeners() {
            for(HealthChangeListener listener: healthChangeListeners) {
                listener.update();
            }
        }
    
        /**
         * Get current penalty
         */
        public int getDamagePenalty() {
            if(bashing == 0) {
                return 0;
            }
            return healthBoxes.get(bashing-1);
        }
    }