Added support for MonsterLabelManager to draw monster health

Added support for MonsterLabelManager to draw monster health
Added percent and modal params to PaletteIndexedColorDrawable to allow use as a progress bar
This commit is contained in:
Collin Smith
2020-09-10 23:27:22 -07:00
parent c906a20817
commit 30f4190ead
2 changed files with 39 additions and 3 deletions

View File

@ -13,9 +13,12 @@ import com.badlogic.gdx.scenes.scene2d.ui.Table;
import com.badlogic.gdx.utils.Align; import com.badlogic.gdx.utils.Align;
import com.riiablo.Riiablo; import com.riiablo.Riiablo;
import com.riiablo.attributes.Attributes;
import com.riiablo.attributes.Stat;
import com.riiablo.camera.IsometricCamera; import com.riiablo.camera.IsometricCamera;
import com.riiablo.codec.excel.MonStats; import com.riiablo.codec.excel.MonStats;
import com.riiablo.engine.client.component.Hovered; import com.riiablo.engine.client.component.Hovered;
import com.riiablo.engine.server.component.AttributesWrapper;
import com.riiablo.engine.server.component.Monster; import com.riiablo.engine.server.component.Monster;
import com.riiablo.engine.server.component.Position; import com.riiablo.engine.server.component.Position;
import com.riiablo.graphics.PaletteIndexedBatch; import com.riiablo.graphics.PaletteIndexedBatch;
@ -28,6 +31,7 @@ import com.riiablo.widget.Label;
@Exclude(com.riiablo.engine.client.component.Label.class) @Exclude(com.riiablo.engine.client.component.Label.class)
public class MonsterLabelManager extends BaseEntitySystem { public class MonsterLabelManager extends BaseEntitySystem {
protected ComponentMapper<Monster> mMonster; protected ComponentMapper<Monster> mMonster;
protected ComponentMapper<AttributesWrapper> mAttributesWrapper;
@Wire(name = "iso") @Wire(name = "iso")
protected IsometricCamera iso; protected IsometricCamera iso;
@ -72,10 +76,12 @@ public class MonsterLabelManager extends BaseEntitySystem {
Label name; Label name;
Label type; Label type;
StringBuilder typeBuilder = new StringBuilder(32); StringBuilder typeBuilder = new StringBuilder(32);
PaletteIndexedColorDrawable background;
MonsterLabel() { MonsterLabel() {
label = new Table(); label = new Table();
label.setBackground(new PaletteIndexedColorDrawable(Riiablo.colors.darkRed) {{ label.setBackground(background = new PaletteIndexedColorDrawable(
Riiablo.colors.darkRed, Riiablo.colors.modal50) {{
setTopHeight(VERTICAL_PADDING); setTopHeight(VERTICAL_PADDING);
setBottomHeight(VERTICAL_PADDING); setBottomHeight(VERTICAL_PADDING);
setLeftWidth(HORIZONTAL_PADDING); setLeftWidth(HORIZONTAL_PADDING);
@ -106,6 +112,11 @@ public class MonsterLabelManager extends BaseEntitySystem {
if (typeBuilder.length() > 0) typeBuilder.setLength(typeBuilder.length() - 1); if (typeBuilder.length() > 0) typeBuilder.setLength(typeBuilder.length() - 1);
type.setText(typeBuilder); type.setText(typeBuilder);
//pack(); //pack();
Attributes attrs = mAttributesWrapper.get(entityId).attrs;
final float hitpoints = attrs.get(Stat.hitpoints).asFixed();
final float maxhp = attrs.get(Stat.maxhp).asFixed();
background.percent = hitpoints / maxhp;
} }
} }
} }

View File

@ -3,6 +3,7 @@ package com.riiablo.graphics;
import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.Batch; import com.badlogic.gdx.graphics.g2d.Batch;
import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable; import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable;
import com.riiablo.Riiablo; import com.riiablo.Riiablo;
public class PaletteIndexedColorDrawable extends TextureRegionDrawable { public class PaletteIndexedColorDrawable extends TextureRegionDrawable {
@ -15,10 +16,26 @@ public class PaletteIndexedColorDrawable extends TextureRegionDrawable {
}}; }};
public Color tint; public Color tint;
public Color modal;
public float percent = 1f;
public PaletteIndexedColorDrawable(Color color) { public PaletteIndexedColorDrawable(Color color) {
this(color, null);
}
public PaletteIndexedColorDrawable(Color color, Color modal) {
super(Riiablo.textures.white); super(Riiablo.textures.white);
this.tint = color; this.tint = color;
this.modal = modal;
percent = 1f;
}
public void setPercent(float percent) {
this.percent = percent;
}
public float percent() {
return percent;
} }
@Override @Override
@ -54,8 +71,12 @@ public class PaletteIndexedColorDrawable extends TextureRegionDrawable {
} }
PaletteIndexedBatch b = (PaletteIndexedBatch) batch; PaletteIndexedBatch b = (PaletteIndexedBatch) batch;
if (modal != null) {
b.setBlendMode(BlendMode.SOLID, modal);
super.draw(batch, x, y, width, height);
}
b.setBlendMode(BlendMode.SOLID, tint); b.setBlendMode(BlendMode.SOLID, tint);
super.draw(batch, x, y, width, height); super.draw(batch, x, y, width * percent, height);
b.resetBlendMode(); b.resetBlendMode();
} }
@ -69,8 +90,12 @@ public class PaletteIndexedColorDrawable extends TextureRegionDrawable {
} }
PaletteIndexedBatch b = (PaletteIndexedBatch) batch; PaletteIndexedBatch b = (PaletteIndexedBatch) batch;
if (modal != null) {
b.setBlendMode(BlendMode.SOLID, modal);
super.draw(batch, x, y, originX, originY, width, height, scaleX, scaleY, rotation);
}
b.setBlendMode(BlendMode.SOLID, tint); b.setBlendMode(BlendMode.SOLID, tint);
super.draw(batch, x, y, originX, originY, width, height, scaleX, scaleY, rotation); super.draw(batch, x, y, originX, originY, width * percent, height, scaleX, scaleY, rotation);
b.resetBlendMode(); b.resetBlendMode();
} }
} }