Improved tutorial, made smooth camera a setting

This commit is contained in:
Anuken
2017-10-16 22:54:11 -04:00
parent 254782c4e8
commit 670d080fae
6 changed files with 95 additions and 19 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -64,9 +64,15 @@ public class Renderer extends RendererModule{
if(GameState.is(State.menu)){
clearScreen();
}else{
boolean smoothcam = Settings.getBool("smoothcam");
if(World.core.block() == ProductionBlocks.core){
smoothCamera(player.x, player.y, android ? 0.3f : 0.14f);
if(!smoothcam){
setCamera(player.x, player.y);
}else{
smoothCamera(player.x, player.y, android ? 0.3f : 0.14f);
}
}else{
smoothCamera(World.core.worldx(), World.core.worldy(), 0.4f);
}
@ -87,9 +93,11 @@ public class Renderer extends RendererModule{
}
float lastx = camera.position.x, lasty = camera.position.y;
camera.position.set((int) camera.position.x, (int) camera.position.y, 0);
if(Vars.snapCamera && smoothcam){
camera.position.set((int) camera.position.x, (int) camera.position.y, 0);
}
if(Gdx.graphics.getHeight() / Core.cameraScale % 2 == 1){
camera.position.add(0, -0.5f, 0);
}
@ -319,12 +327,14 @@ public class Renderer extends RendererModule{
tile.block().drawPixelOverlay(tile);
}
}
boolean smoothcam = Settings.getBool("smoothcam");
for(Entity entity : Entities.all()){
if(entity instanceof DestructibleEntity && !(entity instanceof TileEntity)){
DestructibleEntity dest = ((DestructibleEntity) entity);
if(dest instanceof Player){
if(dest instanceof Player && Vars.snapCamera && smoothcam){
drawHealth((int)dest.x, (int)dest.y, dest.health, dest.maxhealth);
}else{
drawHealth(dest.x, dest.y, dest.health, dest.maxhealth);

View File

@ -199,7 +199,7 @@ public class Tutorial{
blockPlaceX = 0;
blockPlaceY = -1;
targetBlock = ProductionBlocks.conveyor;
text = "Use [orange][[R][] to rotate the conveyor to face up, then place it in the [yellow]marked location[] using the [orange][[left mouse button]";
text = "Use [orange][[R][] to rotate the conveyor to face [orange]forwards[], then place it in the [yellow]marked location[] using the [orange][[left mouse button][].";
}
},
placeConveyorAndroid{
@ -212,7 +212,7 @@ public class Tutorial{
blockPlaceX = 0;
blockPlaceY = -1;
targetBlock = ProductionBlocks.conveyor;
text = "Use the [orange][[rotate button][] to rotate the conveyor to face up, drag it into position with one finger, then place it in the [yellow]marked location[] using the [orange][[checkmark]";
text = "Use the [orange][[rotate button][] to rotate the conveyor to face [orange]forwards[], drag it into position with one finger, then place it in the [yellow]marked location[] using the [orange][[checkmark][].";
}
},
placeConveyorAndroidInfo{
@ -270,7 +270,7 @@ public class Tutorial{
},
drillInfo{
{
text = "Different types of ores require different types of drills. Stone requires stone drills, iron requires iron drills, and so on.";
text = "Different ores need different drills. Stone requires stone drills, iron requires iron drills, etc.";
}
},
drillPlaced2{
@ -365,14 +365,14 @@ public class Tutorial{
pausingDesktop{
{
desktopOnly = true;
text = "If you ever feel overwhelmed by enemies, you can press the [orange]pause button[] in the top right or [orange]space[] "
text = "If you ever need to take a break, press the [orange]pause button[] in the top right or [orange]space[] "
+ "to pause the game. You can still select and place blocks while paused, but cannot move or shoot.";
}
},
pausingAndroid{
{
androidOnly = true;
text = "If you ever feel overwhelmed by enemies, you can press the [orange]pause button[] in the top right"
text = "If you ever need to take a break, press the [orange]pause button[] in the top right"
+ " to pause the game. You can still place select and place blocks while paused.";
}
},
@ -422,7 +422,6 @@ public class Tutorial{
Vars.control.runWave();
}
},
/*
pumpDesc{
{
canBack = false;
@ -438,7 +437,7 @@ public class Tutorial{
targetBlock = ProductionBlocks.pump;
blockPlaceX = 6;
blockPlaceY = -2;
text = "Pumps work similarly to drills, except that they produce liquids instead of items. Try placing a pump on the [yellow]designated area[].";
text = "Pumps work similarly to drills, except that they produce liquids instead of items. Try placing a pump on the [yellow]designated water[].";
}
void onSwitch(){
@ -457,11 +456,12 @@ public class Tutorial{
blockPlaceX = 5;
blockPlaceY = -2;
blockRotation = 2;
text = "Now place a conduit leading away from the pump.";
text = "Now place a [orange]conduit[] leading away from the pump.";
}
void onSwitch(){
Vars.ui.<ImageButton>find("sectionbuttondistribution").fireClick();
World.tile(blockPlaceX + World.core.x, blockPlaceY + World.core.y).setBlock(Blocks.air);
}
},
conduitUse2{
@ -473,9 +473,13 @@ public class Tutorial{
targetBlock = ProductionBlocks.conduit;
blockPlaceX = 4;
blockPlaceY = -2;
blockRotation = 2;
blockRotation = 1;
text = "And a few more...";
}
void onSwitch(){
World.tile(blockPlaceX + World.core.x, blockPlaceY + World.core.y).setBlock(Blocks.air);
}
},
conduitUse3{
{
@ -489,11 +493,65 @@ public class Tutorial{
blockRotation = 1;
text = "And a few more...";
}
}*/
void onSwitch(){
World.tile(blockPlaceX + World.core.x, blockPlaceY + World.core.y).setBlock(Blocks.air);
}
},
extractor{
{
canBack = false;
canForward = false;
showBlock = true;
canPlace = true;
targetBlock = ProductionBlocks.coalpurifier;
blockPlaceX = 4;
blockPlaceY = 0;
text = "Now, place a [orange]coal extractor[] block at the end of the conduit.";
}
void onSwitch(){
World.tile(blockPlaceX + World.core.x, blockPlaceY + World.core.y).setBlock(Blocks.air);
Vars.ui.<ImageButton>find("sectionbuttonproduction").fireClick();
Vars.control.addItem(Item.steel, 60);
Vars.control.addItem(Item.iron, 60);
}
},
extractorExplain{
{
canBack = false;
text = "The extractor will now produce [orange]coal[] from the stone and water, then move it to the core.";
}
void onSwitch(){
for(int i = -2; i <= 2; i ++){
World.tile(World.core.x + i + 4, World.core.y + 2).setBlock(ProductionBlocks.stonedrill);
World.tile(World.core.x + i + 4, World.core.y + 2).setFloor(Blocks.stone);
}
for(int i = 0; i < 3; i ++){
World.tile(World.core.x + 4 - 1 - i, World.core.y).setBlock(ProductionBlocks.conveyor, 2);
}
World.tile(World.core.x + 2, World.core.y + 1).setBlock(ProductionBlocks.conveyor, 0);
World.tile(World.core.x + 3, World.core.y + 1).setBlock(ProductionBlocks.conveyor, 0);
World.tile(World.core.x + 4, World.core.y + 1).setBlock(ProductionBlocks.conveyor, 3);
World.tile(World.core.x + 5, World.core.y + 1).setBlock(ProductionBlocks.conveyor, 2);
World.tile(World.core.x + 6, World.core.y + 1).setBlock(ProductionBlocks.conveyor, 2);
}
},
extractorMore{
{
canBack = false;
canPlace = true;
text = "The [orange]smeltery[] and [orange]crucible[] blocks work similarly to extractors, except they accept only items.";
}
},
end{
{
text = "And that concludes the tutorial!";
canBack =false;
canBack = false;
}
};
String text = "no text";

View File

@ -139,9 +139,9 @@ public class UI extends SceneModule{
prefs.screenshakePref();
prefs.volumePrefs();
prefs.checkPref("tutorial", "Show tutorial Window", true);
prefs.checkPref("fps", "Show FPS", false);
prefs.checkPref("noshadows", "Disable shadows", false);
prefs.checkPref("smoothcam", "Smooth Camera", true);
prefs.hidden(()->{
if(!GameState.is(State.menu)){

View File

@ -31,6 +31,9 @@ public class Vars{
//TODO named save slots, possibly with a scroll dialog
public static final int saveSlots = 4;
//only if smoothCamera
public static boolean snapCamera = true;
//turret and enemy shoot speed inverse multiplier
public static final float multiplier = android ? 3 : 2;

View File

@ -44,7 +44,12 @@ public class Player extends DestructibleEntity{
@Override
public void draw(){
Draw.rect("player", (int)x, (int)y, direction.angle()-90);
if(Vars.snapCamera && Settings.getBool("smoothcam")){
Draw.rect("player", (int)x, (int)y, direction.angle()-90);
}else{
Draw.rect("player", x, y, direction.angle()-90);
}
}
@Override