diff --git a/core/src/fr/evolving/automata/Grid.java b/core/src/fr/evolving/automata/Grid.java index f06fdbc..455cc71 100644 --- a/core/src/fr/evolving/automata/Grid.java +++ b/core/src/fr/evolving/automata/Grid.java @@ -122,6 +122,25 @@ public class Grid implements Serializable{ if (value>0) GetXY(x,y).Copper_calc=oldvalue+22+value; } + int value=0; + if (oldvalue==34 && (GetCoppercalc(x-1,y)==31 || GetCoppercalc(x-1,y)==55 || GetCoppercalc(x-1,y)==58)) + value=62; + if (oldvalue==34 && (GetCoppercalc(x+1,y)==31 || GetCoppercalc(x+1,y)==55 || GetCoppercalc(x+1,y)==58)) + value=58; + if (oldvalue==31 && (GetCoppercalc(x-1,y)==34 || GetCoppercalc(x-1,y)==58 || GetCoppercalc(x-1,y)==62)) + value=59; + if (oldvalue==31 && (GetCoppercalc(x+1,y)==34 || GetCoppercalc(x+1,y)==58 || GetCoppercalc(x+1,y)==62)) + value=55; + if (oldvalue==33 && (GetCoppercalc(x,y-1)==27 || GetCoppercalc(x,y-1)==50 || GetCoppercalc(x,y-1)==51)) + value=57; + if (oldvalue==33 && (GetCoppercalc(x,y+1)==27 || GetCoppercalc(x,y+1)==50 || GetCoppercalc(x,y+1)==51)) + value=56; + if (oldvalue==27 && (GetCoppercalc(x,y-1)==33 || GetCoppercalc(x,y-1)==56 || GetCoppercalc(x,y-1)==57)) + value=51; + if (oldvalue==27 && (GetCoppercalc(x,y+1)==33 || GetCoppercalc(x,y+1)==56 || GetCoppercalc(x,y+1)==57)) + value=50; + if (value>0) + GetXY(x,y).Copper_calc=value; } return; diff --git a/core/src/fr/evolving/game/main.java b/core/src/fr/evolving/game/main.java index 3fd858e..db5a762 100644 --- a/core/src/fr/evolving/game/main.java +++ b/core/src/fr/evolving/game/main.java @@ -15,7 +15,7 @@ public class main extends Game { debug(); //test(); Gdx.app.debug(getClass().getSimpleName(), "Récupération de la résolution des préférences."); - if (AssetLoader.prefs.contains("ResolutionX") && AssetLoader.prefs.contains("ResolutionX")) { + if (AssetLoader.prefs.getInteger("ResolutionX")>0 && AssetLoader.prefs.getInteger("ResolutionY")>0) { try { int ResolutionX=AssetLoader.prefs.getInteger("ResolutionX"); int ResolutionY=AssetLoader.prefs.getInteger("ResolutionY"); diff --git a/core/src/fr/evolving/screens/GameScreen.java b/core/src/fr/evolving/screens/GameScreen.java index 97ae82f..dd681c6 100644 --- a/core/src/fr/evolving/screens/GameScreen.java +++ b/core/src/fr/evolving/screens/GameScreen.java @@ -5,6 +5,9 @@ import java.util.TimerTask; import com.badlogic.gdx.Game; import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Graphics.DisplayMode; +import com.badlogic.gdx.InputMultiplexer; +import com.badlogic.gdx.InputProcessor; import com.badlogic.gdx.Screen; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.OrthographicCamera; @@ -13,15 +16,24 @@ import com.badlogic.gdx.maps.tiled.TiledMap; import com.badlogic.gdx.maps.tiled.TiledMapTileLayer; import com.badlogic.gdx.maps.tiled.TiledMapTileLayer.Cell; import com.badlogic.gdx.maps.tiled.renderers.OrthogonalTiledMapRenderer; +import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.math.Vector3; +import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.Stage; +import com.badlogic.gdx.scenes.scene2d.ui.HorizontalGroup; import com.badlogic.gdx.scenes.scene2d.ui.Image; import com.badlogic.gdx.scenes.scene2d.ui.ImageButton; import com.badlogic.gdx.scenes.scene2d.ui.ImageTextButton; +import com.badlogic.gdx.scenes.scene2d.ui.Label; import com.badlogic.gdx.scenes.scene2d.ui.Table; +import com.badlogic.gdx.scenes.scene2d.ui.VerticalGroup; +import com.badlogic.gdx.scenes.scene2d.utils.Align; import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; +import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable; +import com.badlogic.gdx.utils.Array; +import fr.evolving.UI.Menu; import fr.evolving.worlds.GameRenderer; import fr.evolving.worlds.GameWorld; import fr.evolving.worlds.LevelRenderer; @@ -33,28 +45,50 @@ import fr.evolving.automata.Level; import fr.evolving.inputs.InputHandler; public class GameScreen implements Screen { + private InputMultiplexer multiplexer; + private Array processors; private Timer ScrollTimer; private TimerTask ScrollTask; - private Stage stage; - private Table table; + private Stage stage,stage2; + private HorizontalGroup table; + private VerticalGroup table2; private GameWorld world; private GameRenderer Renderer; private float runTime; public Level level; private ImageButton[] Barre; private ImageTextButton cycle,temp,nrj,rayon,cout,tech; + private ImageTextButton[] Barre2; String[] tocreate={"run","stop","speed","separator","move","zoomp","zoomm","separator","raz","save","levels","tree","exits","separator","screen","sound","tuto","settings","separator","stat"}; + String[] tocreate2={"Structure","Charge","Direction","Selection","Création","Détection","Action","Scénario"}; + public Actor selected; private ButtonLevel buttonlevel; private Objectives objectives; private TouchMaptiles map; - private Image Barrehaut,Barrebas; + private Menu menu; + private float oldx,oldy; + private Label fpsLabel; + // This is the constructor, not the class declaration public GameScreen(Level alevel) { + Gdx.app.debug(getClass().getSimpleName(),"Création des Barres verticales & horizontales"); + table = new HorizontalGroup(); + table.bottom().padLeft(5f).padBottom(8f).space(10f); + table2 = new VerticalGroup(); + table2.setPosition(AssetLoader.width, AssetLoader.height*2/3); + table2.right(); + table2.space(10f); Gdx.app.debug(getClass().getSimpleName(),"Création des elements primordiaux du screen (stage, renderer, table, level, world)"); + fpsLabel=new Label("0 FPS",AssetLoader.Skin_level,"FPS"); + fpsLabel.setPosition(AssetLoader.width-75, AssetLoader.height-220); + multiplexer = new InputMultiplexer(); + processors = new Array(); stage = new Stage(AssetLoader.viewport); - table = new Table(); + stage2 = new Stage(AssetLoader.viewport); this.level=alevel; + oldx=0; + oldy=0; world = new GameWorld(level); Renderer = new GameRenderer(this); world.setRenderer(Renderer); @@ -69,35 +103,90 @@ public class GameScreen implements Screen { } }; ScrollTimer.scheduleAtFixedRate(ScrollTask, 0, 30); - Gdx.app.debug(getClass().getSimpleName(),"Création de la barre de gestion du bas"); + Gdx.app.debug(getClass().getSimpleName(),"Création des barres"); Barre=new ImageButton[tocreate.length]; int i=0; - for (String tocreateitem: tocreate) - Barre[i++]= new ImageButton(AssetLoader.Skin_level,tocreateitem); + for (String tocreateitem: tocreate) { + Barre[i]= new ImageButton(AssetLoader.Skin_level,tocreateitem); + Barre[i++].setName(tocreateitem); + } + Barre2=new ImageTextButton[tocreate2.length]; + i=0; + for (String tocreateitem: tocreate2) { + Barre2[i]= new ImageTextButton(tocreateitem,AssetLoader.Skin_level); + Barre2[i++].setName(tocreateitem); + } Barre[10].addListener(new ClickListener(){ @Override public void clicked(InputEvent event, float x, float y) { + Gdx.app.debug(event.getListenerActor().toString(),"Barre:Niveaux"); ((Game)Gdx.app.getApplicationListener()).setScreen(new LevelScreen(level.aWorld)); } + }); + if (Gdx.graphics.isFullscreen()) + Barre[14].getStyle().up =new TextureRegionDrawable(AssetLoader.Atlas_level.findRegion("windows")); + Barre[14].addListener(new ClickListener(){ + @Override + public void clicked(InputEvent event, float x, float y) { + Gdx.app.debug(event.getListenerActor().toString(),"Barre:Ecran"); + DisplayMode currentMode = Gdx.graphics.getDesktopDisplayMode(); + if (Gdx.graphics.isFullscreen()) + { + Gdx.app.debug(event.getListenerActor().toString(),"vers fenetre."); + Gdx.graphics.setDisplayMode(currentMode.width, currentMode.height, false); + Barre[14].getStyle().up =new TextureRegionDrawable(AssetLoader.Atlas_level.findRegion("screen")); + } + else + { + Gdx.app.debug(event.getListenerActor().toString(),"vers plein ecran."); + Gdx.graphics.setDisplayMode(currentMode.width, currentMode.height, true); + Barre[14].getStyle().up =new TextureRegionDrawable(AssetLoader.Atlas_level.findRegion("windows")); + } + } + }); + if (AssetLoader.intro.getVolume()==0) + Barre[15].getStyle().up =new TextureRegionDrawable(AssetLoader.Atlas_level.findRegion("nosound")); + Barre[15].addListener(new ClickListener(){ + @Override + public void clicked(InputEvent event, float x, float y) { + Gdx.app.debug(event.getListenerActor().getName(),"Barre:Son"); + if (AssetLoader.intro.getVolume()>0) + { + Gdx.app.debug(event.getListenerActor().toString(),"arret son."); + AssetLoader.intro.setVolume(0f); + Barre[15].getStyle().up =new TextureRegionDrawable(AssetLoader.Atlas_level.findRegion("nosound")); + } + else + { + Gdx.app.debug(event.getListenerActor().toString(),"marche son."); + AssetLoader.intro.setVolume(1f); + Barre[15].getStyle().up =new TextureRegionDrawable(AssetLoader.Atlas_level.findRegion("sound")); + } + } }); Barre[12].addListener(new ClickListener(){ @Override public void clicked(InputEvent event, float x, float y) { + Gdx.app.debug(event.getListenerActor().toString(),"Barre:Quitter"); Gdx.app.exit(); } }); - Barre[6].addListener(new ClickListener(){ + for (i=4;i<7;i++) { + Barre[i].addListener(new ClickListener(){ + @Override + public void clicked(InputEvent event, float x, float y) { + selected=event.getListenerActor(); + Gdx.app.debug(event.getListenerActor().toString(),"Barre:Selection dans la Barre bas"); + } + }); + } + Barre2[0].addListener(new ClickListener(){ @Override public void clicked(InputEvent event, float x, float y) { - map.setZoom(1.1f); + Gdx.app.debug(event.getListenerActor().toString(),"Affichage sousmenu"); + ((TiledMapTileLayer)menu.map.getLayers().get(0)).getCell(1,6).setTile(AssetLoader.tileSet.getTile(10)); } }); - Barre[5].addListener(new ClickListener(){ - @Override - public void clicked(InputEvent event, float x, float y) { - map.setZoom(0.9f); - } - }); Gdx.app.debug(getClass().getSimpleName(),"Création de la barre de gestion du haut"); cycle=new ImageTextButton(String.valueOf(level.Cycle),AssetLoader.Skin_level,"cycle2"); cycle.setPosition(10,AssetLoader.height-74); @@ -116,49 +205,83 @@ public class GameScreen implements Screen { objectives.setPosition(890,AssetLoader.height-95); buttonlevel=new ButtonLevel(level,true); buttonlevel.setPosition(1760,AssetLoader.height-125); - Gdx.app.debug(getClass().getSimpleName(),"Ajout des barres"); - Barrehaut=new Image(AssetLoader.Atlas_level.findRegion("barrehaut")); - Barrehaut.setBounds(0.0f, AssetLoader.height-200.0f,1920.0f,200.0f); - Barrehaut.setColor(0.25f, 0.25f, 0.25f, 0.9f); - Barrebas=new Image(AssetLoader.Atlas_level.findRegion("barrebas")); - Barrebas.setBounds(0.0f, 0.0f,1920.0f,95.0f); - Barrebas.setColor(0.25f, 0.25f, 0.25f, 0.9f); Gdx.app.debug(getClass().getSimpleName(),"Création d'une tilemap"); map=new TouchMaptiles(level,128,128); map.setBounds(0, 0, AssetLoader.width, AssetLoader.height); map.addListener(new ClickListener(){ @Override public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) { - - //Vector3 temp_coord = new Vector3(x,y,0); - //Vector3 coords = map.camera.unproject(temp_coord); - //x =(int) coords.x; - //y =(int) coords.y; - x=(int)((x/AssetLoader.width*map.camera.viewportWidth)+map.decx); - y=(int)((y/AssetLoader.height*map.camera.viewportHeight)+map.decy); - if (level.Grid.GetXY(x,y)!=null) - { - System.out.println("Screen coordinates translated to world coordinates: "+ "X: " + x + " Y: " + y+" zoom:"+map.getZoom()); - if (level.Grid.GetCopper(x,y)==false) - level.Grid.GetXY(x,y).Copper=true; - else - level.Grid.GetXY(x,y).Copper=false; - level.Grid.tiling(); - map.redraw(); - } - return false; + oldx=0; + oldy=0; + if (selected==null) + ; + else if (selected.getName()=="zoomp") + { + map.setZoom(0.9f); + map.setDec((AssetLoader.width/2-x)/2,(AssetLoader.height/2-y)/2); + return false; } - }); + else if (selected.getName()=="zoomm") + { + map.setZoom(1.1f); + map.setDec((AssetLoader.width/2-x)/2,(AssetLoader.height/2-y)/2); + return false; + } + else if (selected.getName()=="pen") + { + Vector2 coords=map.screentoworld(x, y); + if (level.Grid.GetXY(coords.x,coords.y)!=null) + { + Gdx.app.debug(event.getListenerActor().toString(),"Screen coordinates translated to world coordinates: "+ "X: " + coords.x + " Y: " + coords.y); + if (level.Grid.GetCopper(coords.x,coords.y)==false) + level.Grid.GetXY(coords.x,coords.y).Copper=true; + else + level.Grid.GetXY(coords.x,coords.y).Copper=false; + level.Grid.tiling(); + map.redraw(); + } + return false; + } + return true; + } + }); + map.addListener(new ClickListener(){ + @Override + public void touchDragged(InputEvent event, float x, float y, int pointer) { + if (selected==null) + ; + else if (selected.getName()=="move") { + if (oldx!=0 && oldy!=0) { + map.setDec(x-oldx,y-oldy); + Gdx.app.debug(event.getListenerActor().toString(),"Decalage absolue en pixel:"+(x-oldx)+"x"+(y-oldy)); + } + oldx=x; + oldy=y; + } + } + }); + menu=new Menu(4,8); + map.addListener(new ClickListener(){ + @Override + public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) { + Vector2 coords=menu.screentoworld(x,y); + Gdx.app.debug(event.getListenerActor().toString(),"Coordonnées:"+x+"x"+y+" Coordonnées deprojettée:"+coords.x+"x"+coords.y); + + return false; + } + }); } @Override public void render(float delta) { - Gdx.gl.glClearColor(0, 0, 0, 1); - Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); runTime += delta; world.update(delta); - Renderer.render(delta, runTime); + fpsLabel.setText(Gdx.graphics.getFramesPerSecond()+"FPS"); + Renderer.render(delta, runTime,0); + stage2.draw(); + Renderer.render(delta, runTime,1); stage.draw(); + Renderer.render(delta, runTime,2); } @Override @@ -169,22 +292,27 @@ public class GameScreen implements Screen { @Override public void show() { Gdx.app.log("*****","Affichage du niveau."); - table.bottom().left().padBottom(10f); + for (int i=0;i