Package shadowrun.gui.general

Source Code of shadowrun.gui.general.PanelCharacterInfo$HealthBar

package shadowrun.gui.general;

import generic.DocumentTypeConstant;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

import javax.swing.JLabel;
import javax.swing.JPanel;

import net.alteiar.campaign.CampaignAdapter;
import net.alteiar.campaign.CampaignClient;
import net.alteiar.component.MyCombobox;
import net.alteiar.documents.BeanBasicDocument;
import net.alteiar.documents.BeanDocument;
import shadowrun.bean.unit.ShadowrunCharacter;
import shadowrun.gui.adapter.CharacterAdapter;

public class PanelCharacterInfo extends JPanel implements
    PropertyChangeListener {
  private static final long serialVersionUID = 1L;

  private BeanDocument characterDocument;

  private final HealthBar healthBarPhysical;
  private final HealthBar healthBarStun;

  private final MyCombobox<CharacterAdapter> comboBox;

  private class HealthBar extends JPanel {
    private static final long serialVersionUID = 1L;

    private Integer totalHp;
    private Integer currentHp;

    private final Color maxColor;
    private final Color minColor;

    public HealthBar(Integer total, Integer current, Color maxColor) {
      this.totalHp = total;
      this.currentHp = current;

      this.maxColor = maxColor;
      minColor = Color.RED;

      this.setPreferredSize(new Dimension(180, 20));
    }

    public void setCurrentHp(Integer currentHp) {
      this.currentHp = currentHp;
      this.revalidate();
      this.repaint();
    }

    public void setTotalHp(Integer totalHp) {
      this.totalHp = totalHp;
      this.revalidate();
      this.repaint();
    }

    @Override
    public void paint(Graphics g) {
      int xLife = 0;
      int yLife = 0;

      int widthLife = 180;
      int heightLife = 20;

      Float ratio = Math.min(1.0f, currentHp / (float) totalHp);
      if (currentHp > 0) {
        Color hp = generateColor(ratio);
        g.setColor(hp);
        g.fillRect(xLife, yLife, (int) (widthLife * ratio), heightLife);
      }
      g.setColor(Color.BLACK);
      g.drawRect(xLife, yLife, widthLife - 1, heightLife - 1);
      g.drawString(currentHp + "/" + totalHp, 80, 15);
    }

    private Color generateColor(Float ratio) {
      int red = getRatioValue(maxColor.getRed(), minColor.getRed(), ratio);
      int green = getRatioValue(maxColor.getGreen(), minColor.getGreen(),
          ratio);
      int blue = getRatioValue(maxColor.getBlue(), minColor.getBlue(),
          ratio);

      return new Color(red, green, blue);
    }

    private int getRatioValue(int max, int min, Float ratio) {
      int val = (int) ((max - min) * ratio);

      if (val < 0) {
        val = 255 + val;
      }

      return val;
    }
  }

  private Boolean isCharacter(BeanDocument doc) {
    return doc.getDocumentType().equals(DocumentTypeConstant.CHARACTER);
  }

  public void addCharacter(final BeanDocument doc) {
    if (isCharacter(doc)) {
      CharacterAdapter adapter = new CharacterAdapter(doc);
      comboBox.addItem(adapter);

      if (comboBox.getItemCount() < 2) {
        comboBox.setSelectedItem(adapter);
        comboboxChange();
      }
    }
  }

  public void removeCharacter(BeanDocument doc) {
    if (isCharacter(doc)) {
      comboBox.removeItem(new CharacterAdapter(doc));
    }
  }

  public PanelCharacterInfo() {
    GridBagLayout gridBagLayout = new GridBagLayout();
    gridBagLayout.columnWidths = new int[] { 0, 0, 0 };
    gridBagLayout.rowHeights = new int[] { 0, 0, 0, 0, 0, 0, 0, 0 };
    gridBagLayout.columnWeights = new double[] { 0.0, 1.0, Double.MIN_VALUE };
    gridBagLayout.rowWeights = new double[] { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
        0.0, Double.MIN_VALUE };
    setLayout(gridBagLayout);

    comboBox = new MyCombobox<CharacterAdapter>(
        CharacterAdapter.getCharacters());

    CampaignClient.getInstance().addCampaignListener(new CampaignAdapter() {

      @Override
      public void beanAdded(BeanBasicDocument bean) {
        if (!bean.isDirectory()) {
          addCharacter((BeanDocument) bean);
        }
      }

      @Override
      public void beanRemoved(BeanBasicDocument bean) {
        if (!bean.isDirectory()) {
          removeCharacter((BeanDocument) bean);
        }
      }
    });

    comboBox.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent arg0) {
        comboboxChange();
      }
    });

    JLabel lblNom = new JLabel("Nom:");
    GridBagConstraints gbc_lblNom = new GridBagConstraints();
    gbc_lblNom.anchor = GridBagConstraints.EAST;
    gbc_lblNom.insets = new Insets(0, 0, 5, 5);
    gbc_lblNom.gridx = 0;
    gbc_lblNom.gridy = 1;
    add(lblNom, gbc_lblNom);

    GridBagConstraints gbc_textFieldName = new GridBagConstraints();
    gbc_textFieldName.insets = new Insets(0, 0, 5, 0);
    gbc_textFieldName.fill = GridBagConstraints.HORIZONTAL;
    gbc_textFieldName.gridx = 1;
    gbc_textFieldName.gridy = 1;
    add(comboBox, gbc_textFieldName);

    JLabel lblPhysical = new JLabel("Physique");
    GridBagConstraints gbc_textFieldInit = new GridBagConstraints();
    gbc_textFieldInit.insets = new Insets(0, 0, 5, 0);
    gbc_textFieldInit.fill = GridBagConstraints.HORIZONTAL;
    gbc_textFieldInit.gridx = 0;
    gbc_textFieldInit.gridy = 2;
    add(lblPhysical, gbc_textFieldInit);

    healthBarPhysical = new HealthBar(0, 0, Color.GREEN);
    gbc_textFieldInit = new GridBagConstraints();
    gbc_textFieldInit.insets = new Insets(0, 0, 5, 0);
    gbc_textFieldInit.fill = GridBagConstraints.HORIZONTAL;
    gbc_textFieldInit.gridx = 1;
    gbc_textFieldInit.gridy = 2;
    add(healthBarPhysical, gbc_textFieldInit);

    JLabel lblStun = new JLabel("Étourdissant");
    gbc_textFieldInit = new GridBagConstraints();
    gbc_textFieldInit.insets = new Insets(0, 0, 5, 0);
    gbc_textFieldInit.fill = GridBagConstraints.HORIZONTAL;
    gbc_textFieldInit.gridx = 0;
    gbc_textFieldInit.gridy = 3;
    add(lblStun, gbc_textFieldInit);

    healthBarStun = new HealthBar(0, 0, Color.BLUE);
    gbc_textFieldInit = new GridBagConstraints();
    gbc_textFieldInit.insets = new Insets(0, 0, 5, 0);
    gbc_textFieldInit.fill = GridBagConstraints.HORIZONTAL;
    gbc_textFieldInit.gridx = 1;
    gbc_textFieldInit.gridy = 3;
    add(healthBarStun, gbc_textFieldInit);

    comboboxChange();
  }

  private void comboboxChange() {
    if (this.characterDocument != null) {
      this.characterDocument.getBean().removePropertyChangeListener(this);
    }

    if (comboBox.getItemCount() > 0 && comboBox.getSelectedItem() != null) {
      characterDocument = comboBox.getSelectedItem().getCharacter();
      this.characterDocument.getBean().addPropertyChangeListener(this);
      updateCharacterView();
    }
  }

  private ShadowrunCharacter getCharacter() {
    return CampaignClient.getInstance().getBean(
        characterDocument.getBeanId());
  }

  public void updateCharacterView() {
    ShadowrunCharacter character = getCharacter();
    if (character != null) {
      int totalPhysical = character.getPhysicalPoint();
      int totalStun = character.getStunPoint();

      this.healthBarPhysical.setTotalHp(totalPhysical);
      this.healthBarStun.setTotalHp(totalStun);

      this.healthBarPhysical.setCurrentHp(totalPhysical
          - character.getPhysicalDamage());
      this.healthBarStun.setCurrentHp(totalStun
          - character.getStunDamage());
      this.revalidate();
      this.repaint();
    }
  }

  @Override
  public void propertyChange(PropertyChangeEvent evt) {
    updateCharacterView();
  }
}
TOP

Related Classes of shadowrun.gui.general.PanelCharacterInfo$HealthBar

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.