diff --git a/forge-adventure/src/main/java/forge/adventure/editor/EnemyEdit.java b/forge-adventure/src/main/java/forge/adventure/editor/EnemyEdit.java index 9e328887297..a8b67b43b27 100644 --- a/forge-adventure/src/main/java/forge/adventure/editor/EnemyEdit.java +++ b/forge-adventure/src/main/java/forge/adventure/editor/EnemyEdit.java @@ -11,10 +11,13 @@ public class EnemyEdit extends FormPanel { EnemyData currentData; JTextField nameField=new JTextField(); JTextField colorField=new JTextField(); - JSpinner lifeFiled= new JSpinner(new SpinnerNumberModel(0, 0, 1000, 1)); - JSpinner spawnRate= new JSpinner(new SpinnerNumberModel(0.0, 0., 1, 0.1)); - JSpinner difficulty= new JSpinner(new SpinnerNumberModel(0.0, 0., 1, 0.1)); - JSpinner speed= new JSpinner(new SpinnerNumberModel(0.0, 0., 100., 1.0)); + JTextField ai=new JTextField(); + JCheckBox flying=new JCheckBox(); + JCheckBox boss=new JCheckBox(); + FloatSpinner lifeFiled= new FloatSpinner(0, 1000, 1); + FloatSpinner spawnRate= new FloatSpinner( 0.f, 1, 0.1f); + FloatSpinner difficulty= new FloatSpinner( 0.f, 1, 0.1f); + FloatSpinner speed= new FloatSpinner( 0.f, 100.f, 1.0f); FilePicker deck=new FilePicker(new String[]{"dck","json"}); FilePicker atlas=new FilePicker(new String[]{"atlas"}); JTextField equipment=new JTextField(); @@ -36,13 +39,23 @@ public class EnemyEdit extends FormPanel { center.add("Sprite:",atlas); center.add("Equipment:",equipment); center.add("Colors:",colorField); + + center.add("ai:",ai); + center.add("flying:",flying); + center.add("boss:",boss); + + + add(preview); add(center); add(rewards); - add(preview); equipment.getDocument().addDocumentListener(new DocumentChangeListener(() -> EnemyEdit.this.updateEnemy())); atlas.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(() -> EnemyEdit.this.updateEnemy())); colorField.getDocument().addDocumentListener(new DocumentChangeListener(() -> EnemyEdit.this.updateEnemy())); + ai.getDocument().addDocumentListener(new DocumentChangeListener(() -> EnemyEdit.this.updateEnemy())); + flying.addChangeListener(e -> EnemyEdit.this.updateEnemy()); + boss.addChangeListener(e -> EnemyEdit.this.updateEnemy()); + nameField.getDocument().addDocumentListener(new DocumentChangeListener(() -> EnemyEdit.this.updateEnemy())); deck.getEdit().getDocument().addDocumentListener(new DocumentChangeListener(() -> EnemyEdit.this.updateEnemy())); lifeFiled.addChangeListener(e -> EnemyEdit.this.updateEnemy()); @@ -59,6 +72,9 @@ public class EnemyEdit extends FormPanel { return; currentData.name=nameField.getText(); currentData.colors=colorField.getText(); + currentData.ai=ai.getText(); + currentData.flying=flying.isSelected(); + currentData.boss=boss.isSelected(); currentData.life= (int) lifeFiled.getValue(); currentData.sprite= atlas.getEdit().getText(); if(equipment.getText().isEmpty()) @@ -88,6 +104,9 @@ public class EnemyEdit extends FormPanel { updating=true; nameField.setText(currentData.name); colorField.setText(currentData.colors); + ai.setText(currentData.ai); + boss.setSelected(currentData.boss); + flying.setSelected(currentData.flying); lifeFiled.setValue(currentData.life); atlas.getEdit().setText(currentData.sprite); if(currentData.equipment!=null) diff --git a/forge-adventure/src/main/java/forge/adventure/editor/SwingAtlasPreview.java b/forge-adventure/src/main/java/forge/adventure/editor/SwingAtlasPreview.java index 97e67659848..31abaaef9a7 100644 --- a/forge-adventure/src/main/java/forge/adventure/editor/SwingAtlasPreview.java +++ b/forge-adventure/src/main/java/forge/adventure/editor/SwingAtlasPreview.java @@ -40,7 +40,7 @@ public class SwingAtlasPreview extends Box { setSpritePath(sprite,null); } public void setSpritePath(String sprite,String name) { - if(this.sprite==null||name==null||sprite==null||(this.sprite.equals(sprite)&&(spriteName==null&&spriteName.equals(name)))) + if(this.sprite==null||sprite==null||(this.sprite.equals(sprite)&&(spriteName!=null&&name!=null&&spriteName.equals(name)))) return; removeAll(); counter=0; diff --git a/forge-gui-mobile/src/forge/adventure/character/CharacterSprite.java b/forge-gui-mobile/src/forge/adventure/character/CharacterSprite.java index ee768ab3c5b..8197085fffd 100644 --- a/forge-gui-mobile/src/forge/adventure/character/CharacterSprite.java +++ b/forge-gui-mobile/src/forge/adventure/character/CharacterSprite.java @@ -56,8 +56,14 @@ public class CharacterSprite extends MapActor { anim = atlas.createSprites(stand.toString()); else anim = atlas.createSprites(stand.toString() + dir.toString()); + if (anim.size != 0) { dirs.put(dir, new Animation<>(0.2f, anim)); + if(getWidth()==0.0)//init size onload + { + setWidth(anim.first().getWidth()); + setHeight(anim.first().getHeight()); + } } } animations.put(stand, dirs); diff --git a/forge-gui-mobile/src/forge/adventure/character/MapActor.java b/forge-gui-mobile/src/forge/adventure/character/MapActor.java index 62d5a4104fb..5bdfa8497cc 100644 --- a/forge-gui-mobile/src/forge/adventure/character/MapActor.java +++ b/forge-gui-mobile/src/forge/adventure/character/MapActor.java @@ -55,9 +55,8 @@ public class MapActor extends Actor { } @Override protected void positionChanged() { - - updateBoundingRect(); super.positionChanged(); + updateBoundingRect(); } @Override diff --git a/forge-gui-mobile/src/forge/adventure/data/EnemyData.java b/forge-gui-mobile/src/forge/adventure/data/EnemyData.java index 7256a8e8a3f..b7321491e94 100644 --- a/forge-gui-mobile/src/forge/adventure/data/EnemyData.java +++ b/forge-gui-mobile/src/forge/adventure/data/EnemyData.java @@ -15,6 +15,7 @@ public class EnemyData { public boolean copyPlayerDeck = false; public String ai; public boolean boss = false; + public boolean flying = false; public float spawnRate; public float difficulty; public float speed; @@ -30,6 +31,7 @@ public class EnemyData { deck = enemyData.deck; ai = enemyData.ai; boss = enemyData.boss; + flying = enemyData.flying; spawnRate = enemyData.spawnRate; copyPlayerDeck = enemyData.copyPlayerDeck; difficulty = enemyData.difficulty; diff --git a/forge-gui-mobile/src/forge/adventure/scene/NewGameScene.java b/forge-gui-mobile/src/forge/adventure/scene/NewGameScene.java index 003a39dbd7e..4730ced2e6a 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/NewGameScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/NewGameScene.java @@ -225,7 +225,16 @@ public class NewGameScene extends UIScene { if(Forge.createNewAdventureMap) { - start(); + FModel.getPreferences().setPref(ForgePreferences.FPref.UI_ENABLE_MUSIC, false); + WorldSave.generateNewWorld(selectedName.getText(), + gender.getCurrentIndex() == 0, + race.getCurrentIndex(), + avatarIndex, + deck.getCurrentIndex(), + Config.instance().getConfigData().difficulties[difficulty.getCurrentIndex()], + fantasyMode, easyMode, deck.getText(), 0); + GamePlayerUtil.getGuiPlayer().setName(selectedName.getText()); + Forge.switchScene(SceneType.GameScene.instance); } } diff --git a/forge-gui-mobile/src/forge/adventure/stage/WorldStage.java b/forge-gui-mobile/src/forge/adventure/stage/WorldStage.java index dc080b8ba65..6c07f0c094b 100644 --- a/forge-gui-mobile/src/forge/adventure/stage/WorldStage.java +++ b/forge-gui-mobile/src/forge/adventure/stage/WorldStage.java @@ -82,7 +82,7 @@ public class WorldStage extends GameStage implements SaveFileContent { enemyMoveVector.setLength(mob.speed()*delta); tempBoundingRect.set(mob.getX()+ enemyMoveVector.x,mob.getY()+ enemyMoveVector.y,mob.getWidth(),mob.getHeight()*mob.getCollisionHeight()); - if(WorldSave.getCurrentSave().getWorld().collidingTile(tempBoundingRect))//if direct path is not possible + if(!mob.getData().flying && WorldSave.getCurrentSave().getWorld().collidingTile(tempBoundingRect))//if direct path is not possible { tempBoundingRect.set(mob.getX()+ enemyMoveVector.x,mob.getY(),mob.getWidth(),mob.getHeight()); if(WorldSave.getCurrentSave().getWorld().collidingTile(tempBoundingRect))//if only x path is not possible @@ -238,7 +238,7 @@ public class WorldStage extends GameStage implements SaveFileContent { boolean enemyYIsBigger=sprite.getY()>player.getY(); sprite.setX(player.getX() + spawnPos.x+(i*sprite.getWidth()*(enemyXIsBigger?1:-1)));//maybe find a better way to get spawn points sprite.setY(player.getY() + spawnPos.y+(i*sprite.getHeight()*(enemyYIsBigger?1:-1))); - if(!WorldSave.getCurrentSave().getWorld().collidingTile(sprite.boundingRect())) + if(sprite.getData().flying || !WorldSave.getCurrentSave().getWorld().collidingTile(sprite.boundingRect())) { enemies.add(Pair.of(globalTimer,sprite)); foregroundSprites.addActor(sprite); diff --git a/forge-gui-mobile/src/forge/adventure/world/BiomeStructure.java b/forge-gui-mobile/src/forge/adventure/world/BiomeStructure.java index c0bc8d5548a..00c9760ea80 100644 --- a/forge-gui-mobile/src/forge/adventure/world/BiomeStructure.java +++ b/forge-gui-mobile/src/forge/adventure/world/BiomeStructure.java @@ -18,6 +18,7 @@ public class BiomeStructure { boolean init=false; private TextureAtlas structureAtlas; public ColorMap image; + private final static int MAXIMUM_WAVEFUNCTIONSIZE=50; public BiomeStructure(BiomeStructureData data,long seed,int width,int height) { @@ -59,50 +60,62 @@ public class BiomeStructure { long currentTime = System.currentTimeMillis(); init=true; - OverlappingModel model= new OverlappingModel(sourceImage,data.N, (int) (data.width* biomeWidth), (int) (data.height*biomeHeight),data.periodicInput,data.periodicOutput,data.symmetry,data.ground); + int targetWidth=(int) (data.width* biomeWidth); + int targetHeight=(int) (data.width* biomeWidth); + dataMap=new int[targetWidth][ targetHeight]; + collisionMap=new boolean[targetWidth][ targetHeight]; + ColorMap finalImage=new ColorMap(targetWidth, targetHeight); HashMap colorIdMap=new HashMap<>(); for(int i=0;i