package com.tacoid.superflu.actors; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.GL10; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.graphics.glutils.ImmediateModeRenderer10; import com.badlogic.gdx.scenes.scene2d.Actor; import com.tacoid.superflu.SuperFlu; import com.tacoid.superflu.entities.Ville; public class VilleActor extends Actor { private TextureRegion villeTextureRegion; private TextureRegion villeTextureRegionHL; private Ville ville; private ImmediateModeRenderer10 renderer; private boolean touched; private TextureRegion infected, infected2; public VilleActor(Ville ville) { SuperFlu superflu = SuperFlu.getInstance(); this.ville = ville; infected = new TextureRegion(superflu.manager.get("images/infected.png", Texture.class), 20, 20); infected2 = new TextureRegion(superflu.manager.get("images/infected2.png", Texture.class), 20, 20); if (ville.isUsine()) { villeTextureRegion = new TextureRegion(superflu.manager.get("images/usine.png", Texture.class), 25, 20); villeTextureRegionHL = new TextureRegion(superflu.manager.get("images/HL_usine.png", Texture.class), 25, 20); this.width = 25; this.height = 20; } else { villeTextureRegion = new TextureRegion(superflu.manager.get("images/ville.png", Texture.class), 20, 20); villeTextureRegionHL = new TextureRegion(superflu.manager.get("images/HL_ville.png", Texture.class), 20, 20); this.width = 20; this.height = 20; } this.x = ville.getX(); this.y = ville.getY(); renderer = new ImmediateModeRenderer10(); } @Override public void draw(SpriteBatch batch, float parentAlpha) { float p; Gdx.gl11.glDisable(GL10.GL_TEXTURE_2D); Gdx.gl11.glPushMatrix(); Gdx.gl11.glTranslatef(x, y, 0); if(!ville.isUsine()) { // On dessine la barre de contamination Gdx.gl11.glColor4f(0, 0, 0, 1); Gdx.gl11.glLineWidth(6); renderer.begin(GL10.GL_LINES); { renderer.vertex( -width/2 - 1, -height/2 - 3, 0); renderer.vertex( width/2 + 1, -height/2 - 3, 0); } renderer.end(); p = (float)ville.getPourcentageInfectes()/100.0f; Gdx.gl11.glColor4f(p, 1-p, 0, 1); Gdx.gl11.glLineWidth(4); renderer.begin(GL10.GL_LINES); { renderer.vertex( -width/2, -height/2 - 3, 0); renderer.vertex( -width/2 + p*width , -height/2 - 3, 0); } renderer.end(); } // ----- // On dessine la barre de stock de traitements p = 0.5f * ville.getStockTraitements() / ville.getStockTraitementsMax(); Gdx.gl11.glColor4f(0,0,0,1); Gdx.gl11.glLineWidth(6); renderer.begin(GL10.GL_LINES); { renderer.vertex( -(3 + width/2), 1 + height/2, 0); renderer.vertex( -(3 + width/2), -1 - height/2, 0); } renderer.end(); Gdx.gl11.glColor4f(0.2f,0.2f,0.5f+p,1); Gdx.gl11.glLineWidth(4); renderer.begin(GL10.GL_LINES); { renderer.vertex( -(3 + width/2), -height/2 , 0); renderer.vertex( -(3 + width/2), -height/2 + height*2*p, 0); } renderer.end(); // On dessine la barre de stock de vaccins p = 0.5f * ville.getStockVaccins() / ville.getStockVaccinsMax(); Gdx.gl11.glColor4f(0,0,0,1); Gdx.gl11.glLineWidth(6); renderer.begin(GL10.GL_LINES); { renderer.vertex( (3 + width/2), 1 + height/2, 0); renderer.vertex( (3 + width/2), -1 - height/2, 0); } renderer.end(); Gdx.gl11.glColor4f(0.2f,0.2f,0.5f+p,1); Gdx.gl11.glLineWidth(4); renderer.begin(GL10.GL_LINES); { renderer.vertex( (3 + width/2), -height/2 , 0); renderer.vertex( (3 + width/2), -height/2 + height*2*p, 0); } renderer.end(); Gdx.gl11.glPopMatrix(); Gdx.gl11.glEnable(GL10.GL_TEXTURE_2D); if (touched) { batch.draw(villeTextureRegionHL, x - width / 2, y - height / 2); } else { batch.draw(villeTextureRegion, x - width / 2, y - height / 2); } if (ville.getHabitantsInfectes() > 200) { batch.draw(infected, x - width / 2, y - height / 2); } else if (ville.getHabitantsInfectes() > 1000) { batch.draw(infected2, x - width / 2, y - height / 2); } } @Override public Actor hit(float x, float y) { // Non utilisé. return x >= -width && x <= width && y >= -height && y <= height ? this : null; } @Override public boolean touchDown(float x, float y, int pointer) { TransfertCreator.getInstance().enable(this.x, this.y); touched = true; return true; } @Override public void touchDragged(float x, float y, int pointer) { TransfertCreator.getInstance().updateTarget(this.x+x, this.y+y); } @Override public void touchUp(float x, float y, int pointer) { TransfertCreator.getInstance().disable(); touched = false; } public Ville getVille() { return ville; } }