package com.alastar.game; import java.util.Hashtable; import ru.alastar.net.Client; import com.alastar.game.enums.EntityType; import com.alastar.game.enums.Type; import com.alastar.game.enums.TypeId; import com.alastar.game.gui.GUIPlayerOverhead; import com.alastar.game.gui.GUITarget; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.math.Rectangle; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.math.Vector3; @SuppressWarnings("serial") public class Entity extends Transform implements TexturedObject { public int id = 0; public String caption = "generic Entity"; public EntityType type; public boolean warMode = false; public GUIPlayerOverhead overhead = null; public GUITarget target = null; public Hashtable<String, Slot> equip; public boolean drawTarget = false; public Entity(int i, Vector3 pos, String c, EntityType t, boolean mode) { super(pos); this.id = i; this.caption = c; this.type = t; this.warMode = mode; this.equip = new Hashtable<String, Slot>(); overhead = new GUIPlayerOverhead(caption + "_overhead", new Vector2(0, 0), new Vector2(50, 25)); target = new GUITarget(this.getTexture().getWidth(), this.getTexture() .getHeight()); target.Hide(); MainScreen.currentStage.addActor(overhead.getElementAsActor()); MainScreen.currentStage.addActor(target.getElementAsActor()); } public void addEquip(String s, Item i) { if (this.equip.containsKey(s)) this.equip.remove(s); this.equip.put(s, new Slot(i)); } public void removeEquip(String s) { if (this.equip.containsKey(s)) this.equip.remove(s); } public Slot getEquipSlot(String s) { return this.equip.get(s); } @Override public Texture getTexture() { return GameManager.getTexture(type.name().toLowerCase(), getType()); } @Override public void setTexture() { } @Override public Transform getTransform() { return (Transform) this; } @Override public void Draw(SpriteBatch batch, float i, float j) { float x = this.position.x * GameManager.textureResolution, y = this.position.y * GameManager.textureResolution; if (id == Client.id) { if (Client.controlledEntity != null) { MainScreen.camera.position.x = x; MainScreen.camera.position.y = y; } } batch.draw(this.getTexture(), x, y); Vector3 vec = MainScreen.camera.project(new Vector3(x, y, 0)); DrawEquip(batch, x, y); target.setPosition(new Vector2(vec.x * (float)Vars.getDouble("balancedScreenWidth"), vec.y * (float)Vars.getDouble("balancedScreenHeight"))); DrawTarget(batch, x, y); overhead.setPosition(new Vector2((vec.x * (float)Vars .getDouble("balancedScreenWidth")), (vec.y + this.getTexture().getHeight() + 60) * (float)Vars.getDouble("balancedScreenHeight"))); } private void DrawTarget(SpriteBatch batch, float i, float j) { if (drawTarget) { if (TargetInfo.hits > 0 && TargetInfo.mhits > 0) { target.setPrecentage((TargetInfo.hits / TargetInfo.mhits) * 100); } else { target.setPrecentage(0); } } } private void DrawEquip(SpriteBatch batch, float i, float j) { Item item; for (String slot : equip.keySet()) { if (getEquipSlot(slot) != null) { if (getEquipSlot(slot).item != null) { item = getEquipSlot(slot).item; batch.draw(GameManager.getTexture(item.itemType.name().toLowerCase(), TypeId.getTypeId(Type.Item)), i + item.getEquipX(), j + item.getEquipY()); } } } } @Override public TextureRegion getTextureRegion() { return new TextureRegion(getTexture(), this.position.x * GameManager.textureResolution, this.position.y * GameManager.textureResolution, GameManager.textureResolution, GameManager.textureResolution); } @Override public Rectangle getWindowRectangle() { return new Rectangle(this.position.x * GameManager.textureResolution, this.position.y * GameManager.textureResolution, GameManager.textureResolution, GameManager.textureResolution); } @Override public int getType() { return TypeId.getTypeId(Type.Entity); } @Override public int getId() { return id; } public void drawMessageOverhead(String msg) { // System.out.println("Overhead of " + caption + // " have been displayed. Msg: " + msg); overhead.addMsg(msg); } public void Remove() { this.overhead.Destroy(); this.target.Destroy(); } public void DrawTraget(boolean b) { drawTarget = b; System.out.println("Draw target: " + b); if (b) target.Show(); else target.Hide(); } @Override public int getZ() { return z; } }