Added spells panel with buttons

This commit is contained in:
Collin Smith 2019-03-15 21:54:06 -07:00
parent e7a0228de4
commit 45b67e6cb8
9 changed files with 336 additions and 2 deletions

View File

@ -8,38 +8,66 @@ public enum CharacterClass {
AMAZON ("am", 0) {{
name = 4011;
description = 5128;
spellsBackground = "skltree_a_back";
spellIcons = "AmSkillicon";
firstSpell = 6;
lastSpell = 36;
}},
SORCERESS ("so", 1) {{
name = 4010;
description = 5131;
spellsBackground = "skltree_s_back";
spellIcons = "SoSkillicon";
firstSpell = 36;
lastSpell = 66;
fws = bws = nu3s = true;
blendSpecial = BlendMode.LUMINOSITY;
}},
NECROMANCER("ne", 2) {{
name = 4009;
description = 5129;
spellsBackground = "skltree_n_back";
spellIcons = "NeSkillicon";
firstSpell = 66;
lastSpell = 96;
fws = bws = nu3s = true;
blendSpecial = BlendMode.LUMINOSITY;
}},
PALADIN ("pa", 3) {{
name = 4008;
description = 5132;
spellsBackground = "skltree_p_back";
spellIcons = "PaSkillicon";
firstSpell = 96;
lastSpell = 126;
fws = true;
blendSpecial = BlendMode.ID;
}},
BARBARIAN ("ba", 4) {{
name = 4007;
description = 5130;
spellsBackground = "skltree_b_back";
spellIcons = "BaSkillicon";
firstSpell = 126;
lastSpell = 156;
fws = true;
blendSpecial = BlendMode.ID;
}},
DRUID ("dz", 5) {{
name = 4012;
description = 22518;
spellsBackground = "skltree_d_back";
spellIcons = "DrSkillicon";
firstSpell = 221;
lastSpell = 251;
}},
ASSASSIN ("as", 6) {{
name = 4013;
description = 22519;
spellsBackground = "skltree_i_back";
spellIcons = "AsSkillicon";
firstSpell = 251;
lastSpell = 281;
}},
;
@ -48,6 +76,9 @@ public enum CharacterClass {
public int name, description;
public boolean nu3s = false, fws = false, bws = false;
public int blendSpecial = BlendMode.NONE;
public String spellsBackground;
public String spellIcons;
public int firstSpell, lastSpell;
CharacterClass(String shortName, int id) {
this.shortName = shortName;

View File

@ -36,6 +36,8 @@ import com.riiablo.codec.excel.RarePrefix;
import com.riiablo.codec.excel.RareSuffix;
import com.riiablo.codec.excel.Runes;
import com.riiablo.codec.excel.SetItems;
import com.riiablo.codec.excel.SkillDesc;
import com.riiablo.codec.excel.Skills;
import com.riiablo.codec.excel.Sounds;
import com.riiablo.codec.excel.Speech;
import com.riiablo.codec.excel.UniqueItems;
@ -75,6 +77,8 @@ public class Files {
public final RareSuffix RareSuffix;
public final Runes Runes;
public final SetItems SetItems;
public final Skills skills;
public final SkillDesc skilldesc;
public final Sounds Sounds;
public final UniqueItems UniqueItems;
//public final UniquePrefix UniquePrefix;
@ -115,6 +119,8 @@ public class Files {
PlrType = load(assets, PlrType.class);
QualityItems = load(assets, QualityItems.class);
SetItems = load(assets, SetItems.class, Excel.EXPANSION);
skills = load(assets, Skills.class);
skilldesc = load(assets, SkillDesc.class);
Sounds = load(assets, Sounds.class);
UniqueItems = load(assets, UniqueItems.class, Excel.EXPANSION);
//UniquePrefix = load(assets, UniquePrefix.class);

View File

@ -0,0 +1,133 @@
package com.riiablo.codec.excel;
public class SkillDesc extends Excel<SkillDesc.Entry> {
public static class Entry extends Excel.Entry {
@Override
public String toString() {
return skilldesc;
}
@Key
@Column
public String skilldesc;
@Column public int SkillPage;
@Column public int SkillRow;
@Column public int SkillColumn;
@Column public int ListRow;
@Column public int ListPool;
@Column public int IconCel;
@Column(format = "str name")
public String str_name;
@Column(format = "str short")
public String str_short;
@Column(format = "str long")
public String str_long;
@Column(format = "str alt")
public String str_alt;
@Column(format = "str mana")
public String str_mana;
@Column public String descdam;
@Column(format = "ddam calc1")
public String ddam_calc1;
@Column(format = "ddam calc2")
public String ddam_calc2;
@Column public String p1dmelem;
@Column public String p1dmmin;
@Column public String p1dmmax;
@Column public String p2dmelem;
@Column public String p2dmmin;
@Column public String p2dmmax;
@Column public String p3dmelem;
@Column public String p3dmmin;
@Column public String p3dmmax;
@Column public String descatt;
@Column public String descmissile1;
@Column public String descmissile2;
@Column public String descmissile3;
@Column public String descline1;
@Column public String desctexta1;
@Column public String desctextb1;
@Column public String desccalca1;
@Column public String desccalcb1;
@Column public String descline2;
@Column public String desctexta2;
@Column public String desctextb2;
@Column public String desccalca2;
@Column public String desccalcb2;
@Column public String descline3;
@Column public String desctexta3;
@Column public String desctextb3;
@Column public String desccalca3;
@Column public String desccalcb3;
@Column public String descline4;
@Column public String desctexta4;
@Column public String desctextb4;
@Column public String desccalca4;
@Column public String desccalcb4;
@Column public String descline5;
@Column public String desctexta5;
@Column public String desctextb5;
@Column public String desccalca5;
@Column public String desccalcb5;
@Column public String descline6;
@Column public String desctexta6;
@Column public String desctextb6;
@Column public String desccalca6;
@Column public String desccalcb6;
@Column public String dsc2line1;
@Column public String dsc2texta1;
@Column public String dsc2textb1;
@Column public String dsc2calca1;
@Column public String dsc2calcb1;
@Column public String dsc2line2;
@Column public String dsc2texta2;
@Column public String dsc2textb2;
@Column public String dsc2calca2;
@Column public String dsc2calcb2;
@Column public String dsc2line3;
@Column public String dsc2texta3;
@Column public String dsc2textb3;
@Column public String dsc2calca3;
@Column public String dsc2calcb3;
@Column public String dsc2line4;
@Column public String dsc2texta4;
@Column public String dsc2textb4;
@Column public String dsc2calca4;
@Column public String dsc2calcb4;
@Column public String dsc3line1;
@Column public String dsc3texta1;
@Column public String dsc3textb1;
@Column public String dsc3calca1;
@Column public String dsc3calcb1;
@Column public String dsc3line2;
@Column public String dsc3texta2;
@Column public String dsc3textb2;
@Column public String dsc3calca2;
@Column public String dsc3calcb2;
@Column public String dsc3line3;
@Column public String dsc3texta3;
@Column public String dsc3textb3;
@Column public String dsc3calca3;
@Column public String dsc3calcb3;
@Column public String dsc3line4;
@Column public String dsc3texta4;
@Column public String dsc3textb4;
@Column public String dsc3calca4;
@Column public String dsc3calcb4;
@Column public String dsc3line5;
@Column public String dsc3texta5;
@Column public String dsc3textb5;
@Column public String dsc3calca5;
@Column public String dsc3calcb5;
@Column public String dsc3line6;
@Column public String dsc3texta6;
@Column public String dsc3textb6;
@Column public String dsc3calca6;
@Column public String dsc3calcb6;
@Column public String dsc3line7;
@Column public String dsc3texta7;
@Column public String dsc3textb7;
@Column public String dsc3calca7;
@Column public String dsc3calcb7;
}
}

View File

@ -0,0 +1,24 @@
package com.riiablo.codec.excel;
public class Skills extends Excel<Skills.Entry> {
public static class Entry extends Excel.Entry {
@Override
public String toString() {
return skill;
}
@Key
@Column
public int Id;
@Column public String skill;
@Column public String charclass;
@Column public String skilldesc;
@Column public String stsound;
@Column public String castoverlay;
@Column public String anim;
@Column public String seqtrans;
@Column public String monanim;
@Column public int seqnum;
@Column public int seqinput;
}
}

View File

@ -86,6 +86,7 @@ public class Player extends Entity {
boolean alternate;
boolean ignoreUpdate;
public Stats stats;
public final CharacterClass charClass;
Array<Item> inventory = new Array<>();
@ -115,6 +116,7 @@ public class Player extends Entity {
Player(String name, int classId) {
super(Type.PLR, "player", TOKENS[classId]);
charClass = CharacterClass.get(classId);
setMode(MODE_TN);
setWalkSpeed(6);
setRunSpeed(9);

View File

@ -228,7 +228,7 @@ public class ControlPanel extends WidgetGroup implements Disposable {
} else if (actor == btnInventory) {
gameScreen.inventoryPanel.setVisible(!gameScreen.inventoryPanel.isVisible());
} else if (actor == btnSkillTree) {
gameScreen.spellsPanel.setVisible(!gameScreen.spellsPanel.isVisible());
} else if (actor == btnParty) {
} else if (actor == btnMap) {

View File

@ -42,7 +42,7 @@ public class MobilePanel extends Table implements Disposable {
} else if (actor == btnInventory) {
gameScreen.inventoryPanel.setVisible(!gameScreen.inventoryPanel.isVisible());
} else if (actor == btnSkillTree) {
gameScreen.spellsPanel.setVisible(!gameScreen.spellsPanel.isVisible());
} else if (actor == btnParty) {
} else if (actor == btnMap) {

View File

@ -0,0 +1,123 @@
package com.riiablo.panel;
import com.badlogic.gdx.assets.AssetDescriptor;
import com.badlogic.gdx.graphics.g2d.Batch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.Touchable;
import com.badlogic.gdx.scenes.scene2d.ui.WidgetGroup;
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable;
import com.badlogic.gdx.utils.Disposable;
import com.riiablo.CharacterClass;
import com.riiablo.Riiablo;
import com.riiablo.codec.DC6;
import com.riiablo.codec.excel.SkillDesc;
import com.riiablo.codec.excel.Skills;
import com.riiablo.loader.DC6Loader;
import com.riiablo.screen.GameScreen;
import com.riiablo.widget.Button;
public class SpellsPanel extends WidgetGroup implements Disposable {
private static final String TAG = "SpellsPanel";
private static final String SPELLS_PATH = "data\\global\\ui\\SPELLS\\";
final AssetDescriptor<DC6> skltreeDescriptor;
TextureRegion skltree;
TextureRegion skltreeTabs[];
final AssetDescriptor<DC6> SkilliconDescriptor;
DC6 Skillicon;
final GameScreen gameScreen;
public SpellsPanel(final GameScreen gameScreen) {
this.gameScreen = gameScreen;
CharacterClass charClass = gameScreen.player.charClass;
skltreeDescriptor = new AssetDescriptor<>(SPELLS_PATH + charClass.spellsBackground + ".dc6", DC6.class, DC6Loader.DC6Parameters.COMBINE);
Riiablo.assets.load(skltreeDescriptor);
Riiablo.assets.finishLoadingAsset(skltreeDescriptor);
skltree = Riiablo.assets.get(skltreeDescriptor).getTexture(0);
setSize(skltree.getRegionWidth(), skltree.getRegionHeight());
setTouchable(Touchable.enabled);
setVisible(false);
SkilliconDescriptor = new AssetDescriptor<>(SPELLS_PATH + charClass.spellIcons + ".dc6", DC6.class, DC6Loader.DC6Parameters.COMBINE);
Riiablo.assets.load(SkilliconDescriptor);
Riiablo.assets.finishLoadingAsset(SkilliconDescriptor);
Skillicon = Riiablo.assets.get(SkilliconDescriptor);
final Tab[] tabs = new Tab[4];
for (int i = 1; i < tabs.length; i++) {
Tab tab = tabs[i] = new Tab(Riiablo.assets.get(skltreeDescriptor).getTexture(i));
tab.setSize(getWidth(), getHeight());
tab.setPosition(0, 0);
tab.setVisible(false);
addActor(tab);
}
float x = getWidth() - 90, y = 0;
Actor[] actors = new Actor[3];
for (int i = 0; i < actors.length; i++) {
final Actor actor = actors[i] = new Actor();
actor.setPosition(x, y);
actor.setSize(90, getHeight() / 4);
actor.setUserObject(tabs[i + 1]);
actor.addListener(new ClickListener() {
@Override
public void clicked(InputEvent event, float x, float y) {
for (Tab tab : tabs) if (tab != null) tab.setVisible(false);
Tab tab = (Tab) actor.getUserObject();
tab.setVisible(true);
}
});
addActor(actor);
y += actor.getHeight();
}
float[] X = { 0, 15, 84, 153 };
float[] Y = { 0, 370, 302, 234, 166, 98, 30 };
for (int i = charClass.firstSpell; i < charClass.lastSpell; i++) {
Skills.Entry skill = Riiablo.files.skills.get(i);
SkillDesc.Entry desc = Riiablo.files.skilldesc.get(skill.skilldesc);
Button button = new Button(new Button.ButtonStyle(
new TextureRegionDrawable(Skillicon.getTexture(desc.IconCel)),
new TextureRegionDrawable(Skillicon.getTexture(desc.IconCel + 1))));
button.setPosition(X[desc.SkillColumn], Y[desc.SkillRow]);
button.setSize(48, 48);
Tab tab = tabs[desc.SkillPage];
tab.addActor(button);
}
setDebug(true, true);
}
@Override
public void draw(Batch batch, float parentAlpha) {
batch.draw(skltree, getX(), getY());
super.draw(batch, parentAlpha);
}
@Override
public void dispose() {
Riiablo.assets.unload(skltreeDescriptor.fileName);
Riiablo.assets.unload(SkilliconDescriptor.fileName);
}
private static class Tab extends WidgetGroup {
TextureRegion background;
public Tab(TextureRegion background) {
this.background = background;
}
@Override
public void draw(Batch batch, float parentAlpha) {
batch.draw(background, getX(), getY());
super.draw(batch, parentAlpha);
}
}
}

View File

@ -53,6 +53,7 @@ import com.riiablo.panel.ControlPanel;
import com.riiablo.panel.EscapePanel;
import com.riiablo.panel.InventoryPanel;
import com.riiablo.panel.MobilePanel;
import com.riiablo.panel.SpellsPanel;
import com.riiablo.panel.StashPanel;
import com.riiablo.server.Connect;
import com.riiablo.server.ConnectResponse;
@ -95,6 +96,7 @@ public class GameScreen extends ScreenAdapter implements LoadingScreen.Loadable
MobilePanel mobilePanel;
public InventoryPanel inventoryPanel;
public CharacterPanel characterPanel;
public SpellsPanel spellsPanel;
public StashPanel stashPanel;
MappedKeyStateAdapter mappedKeyStateListener;
@ -210,6 +212,11 @@ public class GameScreen extends ScreenAdapter implements LoadingScreen.Loadable
stage.getWidth() - inventoryPanel.getWidth(),
stage.getHeight() - inventoryPanel.getHeight());
spellsPanel = new SpellsPanel(this);
spellsPanel.setPosition(
stage.getWidth() - spellsPanel.getWidth(),
stage.getHeight() - spellsPanel.getHeight());
characterPanel = new CharacterPanel(this);
characterPanel.setPosition(
0,
@ -227,6 +234,7 @@ public class GameScreen extends ScreenAdapter implements LoadingScreen.Loadable
stage.addActor(controlPanel);
stage.addActor(escapePanel);
stage.addActor(inventoryPanel);
stage.addActor(spellsPanel);
stage.addActor(characterPanel);
stage.addActor(stashPanel);
controlPanel.toFront();
@ -263,8 +271,10 @@ public class GameScreen extends ScreenAdapter implements LoadingScreen.Loadable
} else if (input.isVisible()) {
input.setVisible(false);
} else if (inventoryPanel.isVisible()
|| spellsPanel.isVisible()
|| characterPanel.isVisible()) {
inventoryPanel.setVisible(false);
spellsPanel.setVisible(false);
characterPanel.setVisible(false);
} else {
escapePanel.setVisible(true);
@ -287,6 +297,8 @@ public class GameScreen extends ScreenAdapter implements LoadingScreen.Loadable
}
} else if (key == Keys.Inventory) {
inventoryPanel.setVisible(!inventoryPanel.isVisible());
} else if (key == Keys.Spells) {
spellsPanel.setVisible(!spellsPanel.isVisible());
} else if (key == Keys.Character) {
stashPanel.setVisible(false);
characterPanel.setVisible(!characterPanel.isVisible());
@ -564,6 +576,7 @@ public class GameScreen extends ScreenAdapter implements LoadingScreen.Loadable
Keys.Esc.addStateListener(mappedKeyStateListener);
Keys.Inventory.addStateListener(mappedKeyStateListener);
Keys.Spells.addStateListener(mappedKeyStateListener);
Keys.Character.addStateListener(mappedKeyStateListener);
Keys.Stash.addStateListener(mappedKeyStateListener);
Keys.SwapWeapons.addStateListener(mappedKeyStateListener);
@ -608,6 +621,7 @@ public class GameScreen extends ScreenAdapter implements LoadingScreen.Loadable
Keys.Esc.removeStateListener(mappedKeyStateListener);
Keys.Inventory.removeStateListener(mappedKeyStateListener);
Keys.Spells.removeStateListener(mappedKeyStateListener);
Keys.Character.removeStateListener(mappedKeyStateListener);
Keys.Stash.removeStateListener(mappedKeyStateListener);
Keys.SwapWeapons.removeStateListener(mappedKeyStateListener);
@ -624,6 +638,7 @@ public class GameScreen extends ScreenAdapter implements LoadingScreen.Loadable
escapePanel.dispose();
controlPanel.dispose();
inventoryPanel.dispose();
spellsPanel.dispose();
characterPanel.dispose();
if (mobilePanel != null) mobilePanel.dispose();
if (Riiablo.assets.isLoaded(touchpadBackgroundDescriptor)) Riiablo.assets.load(touchpadBackgroundDescriptor);