/*
* Copyright (c) 1998-2017 by Richard A. Wilkes. All rights reserved.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, version 2.0. If a copy of the MPL was not distributed with
* this file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This Source Code Form is "Incompatible With Secondary Licenses", as
* defined by the Mozilla Public License, version 2.0.
*/
package com.trollworks.gcs.character;
import com.trollworks.gcs.page.DropPanel;
import com.trollworks.toolkit.annotation.Localize;
import com.trollworks.toolkit.ui.layout.ColumnLayout;
import com.trollworks.toolkit.ui.layout.RowDistribution;
import com.trollworks.toolkit.ui.widget.Wrapper;
import com.trollworks.toolkit.utility.Localization;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import javax.swing.SwingConstants;
/** The character hit points panel. */
public class HitPointsPanel extends DropPanel {
@Localize("Fatigue/Hit Points")
@Localize(locale = "de", value = "Erschöpfung/Treffer")
@Localize(locale = "ru", value = "Очки усталости/жизни")
@Localize(locale = "es", value = "Puntos de Fatiga/Vida")
private static String FP_HP;
@Localize("Basic HP:")
@Localize(locale = "de", value = "Normale TP:")
@Localize(locale = "ru", value = "Баз. ЕЖ:")
@Localize(locale = "es", value = "PV Básicos")
private static String HP;
@Localize("<html><body>Normal (i.e. unharmed) hit points.<br><b>{0} points</b> have been spent to modify <b>HP</b></body></html>")
@Localize(locale = "de", value = "<html><body>Normale (d.h. unverletzt) Trefferpunke.<br><b>{0} Punkte</b> wurden für die Veränderung von <b>TP</b> aufgewendet</body></html>")
@Localize(locale = "ru", value = "<html><body>Обычные единицы жизни (т.е. персонаж невредимый).<br><b>{0} очков</b> использовано на изменение <b>ЗД</b></body></html>")
@Localize(locale = "es", value = "<html><body>Puntos de Vida normales (p.e. ileso).<br><b>{0} puntos</b> que se han consumido para modificar <b>PV</b></body></html>")
private static String HP_TOOLTIP;
@Localize("Current HP:")
@Localize(locale = "de", value = "Aktuelle TP:")
@Localize(locale = "ru", value = "Тек. ЕЖ:")
@Localize(locale = "es", value = "PV actuales:")
private static String HP_CURRENT;
@Localize("Current hit points")
@Localize(locale = "de", value = "Aktuelle Trefferpunkte")
@Localize(locale = "ru", value = "Текущие очки (единицы) жизни")
@Localize(locale = "es", value = "Puntos de Vida actuales")
private static String HP_CURRENT_TOOLTIP;
@Localize("Reeling:")
@Localize(locale = "de", value = "Taumeln:")
@Localize(locale = "ru", value = "Измотан:")
@Localize(locale = "es", value = "Aturdido:")
private static String HP_REELING;
@Localize("<html><body>Current hit points at or below this point indicate the character<br>is reeling from the pain, halving move, speed and dodge</body></html>")
@Localize(locale = "de", value = "<html><body>Wenn die aktuellen Trefferpunkte auf diesem Wert oder geringer sind,<br>bedeutet dies, dass der Charakter vor Schmerzen taumelt,<br>was Bewegungspunkte, Geschwindigkeit und Ausweichen halbiert</body></html>")
@Localize(locale = "ru", value = "<html><body>ЕЖ, меньшее или равное этому числу означает, что персонаж<br>измотан, и имеет половину движения, скорости и уклонения</body></html>")
@Localize(locale = "es", value = "<html><body>Con estos puntos de vida o menos, el personaje está aturdido<br>por el dolor, por lo que reduce movimiento, velocidad y parada a la mitad</body></html>")
private static String HP_REELING_TOOLTIP;
@Localize("Collapse:")
@Localize(locale = "de", value = "Kollaps:")
@Localize(locale = "ru", value = "Без сил:")
@Localize(locale = "es", value = "Colapso:")
private static String HP_UNCONSCIOUS_CHECKS;
@Localize("<html><body>Current hit points at or below this point indicate the character<br>is on the verge of collapse, causing the character to <b>roll vs. HT</b><br>(at -1 per full multiple of HP below zero) every second to avoid<br>falling unconscious</body></html>")
@Localize(locale = "de", value = "<html><body>Wenn die aktuellen Trefferpunkte auf diesem Wert oder geringer sind,<br>bedeutet dies, dass der Charakter vor dem Kollaps steht,<br>wodurch der Charakter jede Sekunde <b>eine KO-Probe</b><br>(mit -1 für jedes Vielfache der TP unter Null) bestehen muss,<br>um nicht in Ohnmacht zu fallen.</body></html>")
@Localize(locale = "ru", value = "<html><body>ЕЖ, меньшее или равное этому числу означает, что персонаж <br>почти истощен и должен <b>делать бросок ЗД</b> (-1 за каждое полное <br>кратное ЗД ниже нуля) каждую секунду, чтобы не упасть без сознания</body></html>")
@Localize(locale = "es", value = "<html><body>Con estos Puntos de Fatiga o menos, el personaje está al<br>borde del colapso, por lo que realizará una <b>tirada contra SL</b><br>(con -1 por cada múltiplo completo de los PV totales por debajo de cero)<br>cada segundo para evitar caer inconsciente</body></html>")
private static String HP_UNCONSCIOUS_CHECKS_TOOLTIP;
@Localize("Check #1:")
@Localize(locale = "de", value = "Todesprobe 1:")
@Localize(locale = "ru", value = "Бросок#1:")
@Localize(locale = "es", value = "Chequeo nº1:")
private static String HP_DEATH_CHECK_1;
@Localize("<html><body>Current hit points at or below this point cause<br>the character to <b>roll vs. HT</b> to avoid death</body></html>")
@Localize(locale = "de", value = "<html><body>Wenn die aktuellen Trefferpunkte auf diesem Wert oder geringer sind,<br>muss der Charakter <b>eine KO-Probe</b> bestehen, um nicht zu sterben.</body></html>")
@Localize(locale = "ru", value = "<html><body>ЕЖ, меньшее или равное этому числу означает, что персонажу<br>нужно <b>сделать бросок ЗД</b> для избежания смерти</body></html>")
@Localize(locale = "es", value = "<html><body>Con estos puntos de Vida o menos, el personaje<br>realizará una <b>tirada contra SL</b> para evitar caer muerto</body></html>")
private static String HP_DEATH_CHECK_1_TOOLTIP;
@Localize("Check #2:")
@Localize(locale = "de", value = "Todesprobe 2:")
@Localize(locale = "ru", value = "Бросок#2:")
@Localize(locale = "es", value = "Chequeo nº2:")
private static String HP_DEATH_CHECK_2;
@Localize("<html><body>Current hit points at or below this point cause<br>the character to <b>roll vs. HT</b> to avoid death</body></html>")
@Localize(locale = "de", value = "<html><body>Wenn die aktuellen Trefferpunkte auf diesem Wert oder geringer sind,<br>muss der Charakter <b>eine KO-Probe</b> bestehen, um nicht zu sterben.</body></html>")
@Localize(locale = "ru", value = "<html><body>ЕЖ, меньшее или равное этому числу означает, что персонажу<br>нужно <b>сделать бросок ЗД</b> для избежания смерти</body></html>")
@Localize(locale = "es", value = "<html><body>Con estos puntos de Vida o menos, el personaje<br>realizará una <b>tirada contra SL</b> para evitar caer muerto</body></html>")
private static String HP_DEATH_CHECK_2_TOOLTIP;
@Localize("Check #3:")
@Localize(locale = "de", value = "Todesprobe 3:")
@Localize(locale = "ru", value = "Бросок#3:")
@Localize(locale = "es", value = "Chequeo nº3:")
private static String HP_DEATH_CHECK_3;
@Localize("<html><body>Current hit points at or below this point cause<br>the character to <b>roll vs. HT</b> to avoid death</body></html>")
@Localize(locale = "de", value = "<html><body>Wenn die aktuellen Trefferpunkte auf diesem Wert oder geringer sind,<br>muss der Charakter <b>eine KO-Probe</b> bestehen, um nicht zu sterben.</body></html>")
@Localize(locale = "ru", value = "<html><body>ЕЖ, меньшее или равное этому числу означает, что персонажу<br>нужно <b>сделать бросок ЗД</b> для избежания смерти</body></html>")
@Localize(locale = "es", value = "<html><body>Con estos puntos de Vida o menos, el personaje<br>realizará una <b>tirada contra SL</b> para evitar caer muerto</body></html>")
private static String HP_DEATH_CHECK_3_TOOLTIP;
@Localize("Check #4:")
@Localize(locale = "de", value = "Todesprobe 4:")
@Localize(locale = "ru", value = "Бросок#4:")
@Localize(locale = "es", value = "Chequeo nº4:")
private static String HP_DEATH_CHECK_4;
@Localize("<html><body>Current hit points at or below this point cause<br>the character to <b>roll vs. HT</b> to avoid death</body></html>")
@Localize(locale = "de", value = "<html><body>Wenn die aktuellen Trefferpunkte auf diesem Wert oder geringer sind,<br>muss der Charakter <b>eine KO-Probe</b> bestehen, um nicht zu sterben.</body></html>")
@Localize(locale = "ru", value = "<html><body>ЕЖ, меньшее или равное этому числу означает, что персонажу<br>нужно <b>сделать бросок ЗД</b> для избежания смерти</body></html>")
@Localize(locale = "es", value = "<html><body>Con estos puntos de Vida o menos, el personaje<br>realizará una <b>tirada contra SL</b> para evitar caer muerto</body></html>")
private static String HP_DEATH_CHECK_4_TOOLTIP;
@Localize("Dead:")
@Localize(locale = "de", value = "Tod:")
@Localize(locale = "ru", value = "Мертв:")
@Localize(locale = "es", value = "Muerto:")
private static String HP_DEAD;
@Localize("<html><body>Current hit points at or below this<br>point cause the character to die</body></html>")
@Localize(locale = "de", value = "<html><body>Wenn die aktuellen Trefferpunkte auf diesem Wert oder geringer sind,<br>stirbt der Charakter.</body></html>")
@Localize(locale = "ru", value = "<html><body>ЕЖ, меньшее или равное этому числу означает<br>смерть персонажа</body></html>")
@Localize(locale = "es", value = "<html><body>Con estos puntos de Vida o menos, el personaje caerá muerto</body></html>")
private static String HP_DEAD_TOOLTIP;
@Localize("Basic FP:")
@Localize(locale = "de", value = "Normale EP")
@Localize(locale = "ru", value = "Баз. ЕУ:")
@Localize(locale = "es", value = "PF Básicos:")
private static String FP;
@Localize("<html><body>Normal (i.e. fully rested) fatigue points.<br><b>{0} points</b> have been spent to modify <b>FP</b></body></html>")
@Localize(locale = "de", value = "<html><body>Normale (d.h. ausgeruhte) Erschöpfungspunkte.<br><b>{0} Punkte</b> wurden für die Veränderung von <b>FP</b> aufgewendet</body></html>")
@Localize(locale = "ru", value = "<html><body>Обычные единицы усталости (т.е. полностью отдохнувший персонаж).<br><b>{0} очков</b> использовано на изменение <b>ЕУ</b></body></html>")
@Localize(locale = "es", value = "<html><body>Puntos de Fatiga normales (p.e. descansado).<br><b>{0} puntos</b> que se han consumido para modificar <b>PV</b></body></html>")
private static String FP_TOOLTIP;
@Localize("Current FP:")
@Localize(locale = "de", value = "Aktuelle EP")
@Localize(locale = "ru", value = "Тек. ЕУ:")
@Localize(locale = "es", value = "PF Actuales:")
private static String FP_CURRENT;
@Localize("Current fatigue points")
@Localize(locale = "de", value = "Aktuelle Erschöpfungspunkte")
@Localize(locale = "ru", value = "Текущие очки (единицы) усталости")
@Localize(locale = "es", value = "Puntos de Fatiga Actuales:")
private static String FP_CURRENT_TOOLTIP;
@Localize("Tired:")
@Localize(locale = "de", value = "Müde")
@Localize(locale = "ru", value = "Утомлен:")
@Localize(locale = "es", value = "Cansado:")
private static String FP_TIRED;
@Localize("<html><body>Current fatigue points at or below this point indicate the<br>character is very tired, halving move, dodge and strength</body></html>")
@Localize(locale = "de", value = "<html><body>Wenn die aktuellen Trefferpunkte auf diesem Wert oder geringer sind,<br>bedeutet dies, dass der Charakter sehr müde ist, was seine Bewegung,<br>ausweichen und Stärke halbiert.</body></html>")
@Localize(locale = "ru", value = "<html><body>ЕУ, меньшее или равное этому числу означает, что персонаж почти<br>истощен. Движение, уклонение и сила уменьшаются вдвое</body></html>")
@Localize(locale = "es", value = "<html><body>Con estos Puntos de Fatiga o menos, el personaje está muy<br>cansado, , por lo que reduce movimiento, parada y fuerza a la mitad</body></html>")
private static String FP_TIRED_TOOLTIP;
@Localize("Collapse:")
@Localize(locale = "de", value = "Kollaps:")
@Localize(locale = "ru", value = "Без сил:")
@Localize(locale = "es", value = "Colapso:")
private static String FP_UNCONSCIOUS_CHECKS;
@Localize("<html><body>Current fatigue points at or below this point indicate the<br>character is on the verge of collapse, causing the character<br>to roll vs. Will to do anything besides talk or rest</body></html>")
@Localize(locale = "de", value = "<html><body>Wenn die aktuellen Erschöpfungspunkte auf diesem Wert oder geringer sind,<br>bedeutet dies, dass der Charakter vor dem Kollaps steht,<br>wodurch der Charakter jedes mal, wenn er etwas anderes macht<br>als reden oder ausruhen, <b>eine Willens-Probe</b> bestehen muss.</body></html>")
@Localize(locale = "ru", value = "<html><body>ЕУ, меньшее или равное этому числу означает, что персонаж<br>почти истощен, и персонаж делает бросок Воли,<br>чтобы сделать что-либо, кроме отдыха и разговора.</body></html>")
@Localize(locale = "es", value = "<html><body>Con estos Puntos de Fatiga o menos, el personaje está al<br>borde del colapso, por lo que deberá tirar contra<br>Voluntad para realizar cualquier actividad más allá de hablar o descansar</body></html>")
private static String FP_UNCONSCIOUS_CHECKS_TOOLTIP;
@Localize("Unconscious:")
@Localize(locale = "de", value = "Bewusstlos:")
@Localize(locale = "ru", value = "Обморок:")
@Localize(locale = "es", value = "Incosnciente:")
private static String FP_UNCONSCIOUS;
@Localize("<html><body>Current fatigue points at or below this point<br>cause the character to fall unconscious</body></html>")
@Localize(locale = "de", value = "<html><body>Wenn die aktuellen Trefferpunkte auf diesem Wert oder geringer sind,<br>wird der Charakter bewusstlos.</body></html>")
@Localize(locale = "ru", value = "<html><body>ЕУ, меньшее или равное этому числу<br>означает, что персонаж теряет сознание</body></html>")
@Localize(locale = "es", value = "<html><body>Con estos Puntos de Fatiga o menos<br>, el personaje cae incosnciente</body></html>")
private static String FP_UNCONSCIOUS_TOOLTIP;
static {
Localization.initialize();
}
/**
* Creates a new hit points panel.
*
* @param sheet The sheet to display the data for.
*/
public HitPointsPanel(CharacterSheet sheet) {
super(new ColumnLayout(2, 2, 0, RowDistribution.DISTRIBUTE_HEIGHT), FP_HP);
createLabelAndField(this, sheet, GURPSCharacter.ID_CURRENT_FATIGUE_POINTS, FP_CURRENT, FP_CURRENT_TOOLTIP, SwingConstants.RIGHT);
createLabelAndField(this, sheet, GURPSCharacter.ID_FATIGUE_POINTS, FP, FP_TOOLTIP, SwingConstants.RIGHT);
createDivider();
createLabelAndDisabledField(this, sheet, GURPSCharacter.ID_TIRED_FATIGUE_POINTS, FP_TIRED, FP_TIRED_TOOLTIP, SwingConstants.RIGHT);
createLabelAndDisabledField(this, sheet, GURPSCharacter.ID_UNCONSCIOUS_CHECKS_FATIGUE_POINTS, FP_UNCONSCIOUS_CHECKS, FP_UNCONSCIOUS_CHECKS_TOOLTIP, SwingConstants.RIGHT);
createLabelAndDisabledField(this, sheet, GURPSCharacter.ID_UNCONSCIOUS_FATIGUE_POINTS, FP_UNCONSCIOUS, FP_UNCONSCIOUS_TOOLTIP, SwingConstants.RIGHT);
createDivider();
createLabelAndField(this, sheet, GURPSCharacter.ID_CURRENT_HIT_POINTS, HP_CURRENT, HP_CURRENT_TOOLTIP, SwingConstants.RIGHT);
createLabelAndField(this, sheet, GURPSCharacter.ID_HIT_POINTS, HP, HP_TOOLTIP, SwingConstants.RIGHT);
createDivider();
createLabelAndDisabledField(this, sheet, GURPSCharacter.ID_REELING_HIT_POINTS, HP_REELING, HP_REELING_TOOLTIP, SwingConstants.RIGHT);
createLabelAndDisabledField(this, sheet, GURPSCharacter.ID_UNCONSCIOUS_CHECKS_HIT_POINTS, HP_UNCONSCIOUS_CHECKS, HP_UNCONSCIOUS_CHECKS_TOOLTIP, SwingConstants.RIGHT);
createLabelAndDisabledField(this, sheet, GURPSCharacter.ID_DEATH_CHECK_1_HIT_POINTS, HP_DEATH_CHECK_1, HP_DEATH_CHECK_1_TOOLTIP, SwingConstants.RIGHT);
createLabelAndDisabledField(this, sheet, GURPSCharacter.ID_DEATH_CHECK_2_HIT_POINTS, HP_DEATH_CHECK_2, HP_DEATH_CHECK_2_TOOLTIP, SwingConstants.RIGHT);
createLabelAndDisabledField(this, sheet, GURPSCharacter.ID_DEATH_CHECK_3_HIT_POINTS, HP_DEATH_CHECK_3, HP_DEATH_CHECK_3_TOOLTIP, SwingConstants.RIGHT);
createLabelAndDisabledField(this, sheet, GURPSCharacter.ID_DEATH_CHECK_4_HIT_POINTS, HP_DEATH_CHECK_4, HP_DEATH_CHECK_4_TOOLTIP, SwingConstants.RIGHT);
createLabelAndDisabledField(this, sheet, GURPSCharacter.ID_DEAD_HIT_POINTS, HP_DEAD, HP_DEAD_TOOLTIP, SwingConstants.RIGHT);
}
@Override
public Dimension getMaximumSize() {
Dimension size = super.getMaximumSize();
size.width = getPreferredSize().width;
return size;
}
private void createDivider() {
createOneByOnePanel();
createOneByOnePanel();
addHorizontalBackground(createOneByOnePanel(), Color.black);
createOneByOnePanel();
}
private Container createOneByOnePanel() {
Wrapper panel = new Wrapper();
panel.setOnlySize(1, 1);
add(panel);
return panel;
}
}