package com.corosus.game.system;
import com.artemis.Aspect;
import com.artemis.ComponentMapper;
import com.artemis.Entity;
import com.artemis.systems.IntervalEntityProcessingSystem;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType;
import com.corosus.game.Cst;
import com.corosus.game.GameSettings;
import com.corosus.game.Game_AI_TestBed;
import com.corosus.game.Level;
import com.corosus.game.Logger;
import com.corosus.game.client.assets.ActorState;
import com.corosus.game.client.assets.Orient;
import com.corosus.game.component.EntityData;
import com.corosus.game.component.Health;
import com.corosus.game.component.Position;
import com.corosus.game.component.RenderData;
import com.corosus.game.component.Velocity;
import com.corosus.game.entity.EnumEntityType;
public class SpriteRender extends IntervalEntityProcessingSystem {
private ComponentMapper<RenderData> mapRender;
private ComponentMapper<Position> mapPos;
private ComponentMapper<Velocity> mapVelocity;
private ComponentMapper<EntityData> mapEntityData;
private ComponentMapper<Health> mapHealth;
public SpriteRender() {
super(Aspect.all(Position.class, RenderData.class, Velocity.class), GameSettings.tickDelayRender);
}
@Override
protected void initialize() {
super.initialize();
}
@Override
protected void processSystem() {
//Logger.dbg("tick " + this);
Game_AI_TestBed game = Game_AI_TestBed.instance();
Level level = game.getActiveLevel();
level.getBatch().setProjectionMatrix(game.getCamera().combined);
level.getBatch().begin();
super.processSystem();
level.getBatch().end();
}
@Override
protected void process(Entity e) {
Game_AI_TestBed game = Game_AI_TestBed.instance();
//Position pos = mapPos.get(e);
RenderData render = mapRender.get(e);
Position pos = mapPos.get(e);
Velocity vel = mapVelocity.get(e);
EntityData entData = mapEntityData.get(e);
Health health = mapHealth.get(e);
//render.orient = Orient.fromVector(new Vector2(vel.x, vel.y));
if (entData.type == EnumEntityType.SPRITE) {
render.orient = Orient.fromAngleOld(pos.rotationYaw);
if (vel.x != 0 || vel.y != 0) {
//render.state = ActorState.WALK;
} else {
render.state = ActorState.STATIC;
}
} else if (entData.type == EnumEntityType.PROJECTILE) {
}
//render.anims = GameAssetManager.INSTANCE.getRenderAssets("imgs/sprites/tanya.json");
Level level = game.getActiveLevel();
float partialTick = level.getPartialTick();//(level.getStateTime() - WorldTimer.lastTime) / GameSettings.tickDelayGame;
float rX = pos.prevX + (pos.x - pos.prevX) * partialTick;
float rY = pos.prevY + (pos.y - pos.prevY) * partialTick;
//Logger.dbg("rx: " + rX + " vs x: " + pos.x + " delta: " + level.getWorld().getDelta() + " state time: " + level.getStateTime() + " partialTick: " + partialTick);
try {
if (render.renderType == RenderData.TYPE_SPRITE_ANIM) {
if (game.isInView(pos.toVec(), Cst.SPRITESIZE)) {
render.anims.get(render.state).get(render.orient).draw(level.getBatch(), level.getStateTime(), level.getWorld().getDelta(), rX - Cst.SPRITESIZE / 2, rY - Cst.SPRITESIZE / 2);
} else {
//Logger.dbg("not in view!");
}
} else if (render.renderType == RenderData.TYPE_LINE) {
//do in hud system
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
}