package com.galvarez.ttw;
import com.artemis.Entity;
import com.artemis.EntityEdit;
import com.artemis.World;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.galvarez.ttw.ExpiringSystem.Expires;
import com.galvarez.ttw.model.components.AIControlled;
import com.galvarez.ttw.model.components.Army;
import com.galvarez.ttw.model.components.ArmyCommand;
import com.galvarez.ttw.model.components.Destination;
import com.galvarez.ttw.model.components.Diplomacy;
import com.galvarez.ttw.model.components.Discoveries;
import com.galvarez.ttw.model.components.EventsCount;
import com.galvarez.ttw.model.components.InfluenceSource;
import com.galvarez.ttw.model.components.Policies;
import com.galvarez.ttw.model.components.Score;
import com.galvarez.ttw.model.data.Empire;
import com.galvarez.ttw.model.map.MapPosition;
import com.galvarez.ttw.rendering.components.ColorAnimation;
import com.galvarez.ttw.rendering.components.Counter;
import com.galvarez.ttw.rendering.components.Description;
import com.galvarez.ttw.rendering.components.FadingMessage;
import com.galvarez.ttw.rendering.components.MutableMapPosition;
import com.galvarez.ttw.rendering.components.Name;
import com.galvarez.ttw.rendering.components.ScaleAnimation;
import com.galvarez.ttw.rendering.components.Sprite;
import com.galvarez.ttw.rendering.components.TextBox;
import com.galvarez.ttw.utils.Colors;
public class EntityFactory {
public static Entity createClick(World world, int x, int y, float startScale, float speed) {
Entity e = world.createEntity();
EntityEdit edit = e.edit();
MutableMapPosition pos = edit.create(MutableMapPosition.class);
pos.x = x;
pos.y = y;
Sprite sprite = new Sprite();
sprite.name = "click";
sprite.color = new Color(1f, 1f, 1f, 0.5f);
sprite.rotation = 0f;
sprite.scaleX = startScale;
sprite.scaleY = startScale;
edit.add(sprite);
Expires expires = edit.create(Expires.class);
expires.delay = 1f;
ScaleAnimation scaleAnimation = edit.create(ScaleAnimation.class);
scaleAnimation.speed = speed;
ColorAnimation colorAnimation = edit.create(ColorAnimation.class);
colorAnimation.alphaAnimate = true;
colorAnimation.alphaSpeed = -1f;
return e;
}
public static Entity createEmpire(World world, int x, int y, String name, Empire empire) {
Entity e = world.createEntity();
EntityEdit edit = e.edit();
ArmyCommand command = new ArmyCommand();
edit.add(empire).add(new EventsCount()).add(new Discoveries()).add(new Policies()).add(new Diplomacy())
.add(command).add(new Score());
Sprite sprite = new Sprite();
sprite.name = "cylinderwide";
sprite.rotation = 0f;
sprite.scaleX = 1f;
sprite.scaleY = 1f;
sprite.color = empire.color;
edit.add(sprite);
InfluenceSource source = new InfluenceSource();
edit.add(new MapPosition(x, y)).add(source).add(new Destination(command.forbiddenTiles, 2));
edit.add(new Name(name)).add(new Description("Tribe of " + name))
.add(new TextBox(() -> name + ": " + source.power()));
if (empire.isComputerControlled())
edit.add(new AIControlled());
return e;
}
public static Entity createArmy(World world, MapPosition pos, String name, Empire empire, Entity source,
int militaryPower) {
Entity e = world.createEntity();
EntityEdit edit = e.edit();
edit.add(new Counter(Colors.contrast(empire.color), empire.color, militaryPower));
edit.add(pos).add(new Name(name)).add(new Description(name))
.add(new Destination(source.getComponent(ArmyCommand.class).forbiddenTiles, 1))
.add(new Army(source, militaryPower)).add(empire);
if (empire.isComputerControlled())
edit.add(new AIControlled());
return e;
}
public static Entity createFadingTileLabel(World world, String label, Color color, float x, float y, float duration) {
Entity e = world.createEntity();
EntityEdit edit = e.edit();
MutableMapPosition position = edit.create(MutableMapPosition.class);
position.x = x;
position.y = y;
FadingMessage fading = edit.create(FadingMessage.class);
fading.label = label;
fading.color = color;
fading.duration = duration;
fading.vx = 0f;
fading.vy = 1.3f;
return e;
}
public static Entity createFadingTileIcon(World world, TextureRegion icon, Color color, float x, float y,
float duration) {
Entity e = world.createEntity();
EntityEdit edit = e.edit();
MutableMapPosition position = edit.create(MutableMapPosition.class);
position.x = x;
position.y = y;
FadingMessage fading = edit.create(FadingMessage.class);
fading.icon = icon;
fading.color = color;
fading.duration = duration;
fading.vx = 0f;
fading.vy = 1.3f;
return e;
}
}