Implemented desktop line placement

This commit is contained in:
Anuken
2018-05-30 12:40:51 -04:00
parent b5966afe25
commit 9d05cfba36
8 changed files with 168 additions and 457 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 B

View File

@@ -251,70 +251,70 @@ overflowgate
index: -1 index: -1
poweredconveyor poweredconveyor
rotate: false rotate: false
xy: 686, 269 xy: 296, 37
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
poweredconveyormove poweredconveyormove
rotate: false rotate: false
xy: 296, 37 xy: 306, 37
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
pulseconduit-bottom pulseconduit-bottom
rotate: false rotate: false
xy: 306, 27 xy: 316, 29
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
pulseconduit-top pulseconduit-top
rotate: false rotate: false
xy: 316, 29 xy: 326, 33
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
router router
rotate: false rotate: false
xy: 624, 120 xy: 634, 120
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
sortedunloader sortedunloader
rotate: false rotate: false
xy: 296, 17 xy: 306, 17
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
sorter sorter
rotate: false rotate: false
xy: 306, 17 xy: 295, 7
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
splitter splitter
rotate: false rotate: false
xy: 305, 7 xy: 316, 9
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
steelconveyor steelconveyor
rotate: false rotate: false
xy: 316, 9 xy: 326, 3
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
steelconveyormove steelconveyormove
rotate: false rotate: false
xy: 326, 3 xy: 574, 110
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
@@ -328,7 +328,7 @@ teleporter-top
index: -1 index: -1
unloader unloader
rotate: false rotate: false
xy: 929, 399 xy: 939, 399
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
@@ -706,56 +706,56 @@ oiledge
index: -1 index: -1
rock1 rock1
rotate: false rotate: false
xy: 604, 120 xy: 614, 120
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
rock2 rock2
rotate: false rotate: false
xy: 614, 120 xy: 624, 120
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
sand1 sand1
rotate: false rotate: false
xy: 564, 117 xy: 554, 115
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
sand2 sand2
rotate: false rotate: false
xy: 554, 115 xy: 654, 115
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
sand3 sand3
rotate: false rotate: false
xy: 654, 115 xy: 664, 115
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
sandblock1 sandblock1
rotate: false rotate: false
xy: 664, 115 xy: 674, 115
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
sandblock2 sandblock2
rotate: false rotate: false
xy: 674, 115 xy: 236, 21
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
sandblock3 sandblock3
rotate: false rotate: false
xy: 236, 21 xy: 246, 21
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
@@ -769,56 +769,56 @@ sandedge
index: -1 index: -1
shrub shrub
rotate: false rotate: false
xy: 235, 1 xy: 245, 11
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
shrubshadow shrubshadow
rotate: false rotate: false
xy: 245, 11 xy: 245, 1
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
snow1 snow1
rotate: false rotate: false
xy: 255, 1 xy: 265, 11
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
snow2 snow2
rotate: false rotate: false
xy: 265, 11 xy: 265, 1
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
snow3 snow3
rotate: false rotate: false
xy: 265, 1 xy: 275, 11
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
snowblock1 snowblock1
rotate: false rotate: false
xy: 275, 11 xy: 275, 1
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
snowblock2 snowblock2
rotate: false rotate: false
xy: 275, 1 xy: 285, 11
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
snowblock3 snowblock3
rotate: false rotate: false
xy: 285, 11 xy: 285, 1
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
@@ -832,7 +832,7 @@ snowedge
index: -1 index: -1
space space
rotate: false rotate: false
xy: 295, 7 xy: 305, 7
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
@@ -846,42 +846,42 @@ spaceedge
index: -1 index: -1
stone1 stone1
rotate: false rotate: false
xy: 614, 110 xy: 624, 110
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
stone2 stone2
rotate: false rotate: false
xy: 624, 110 xy: 634, 110
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
stone3 stone3
rotate: false rotate: false
xy: 634, 110 xy: 644, 110
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
stoneblock1 stoneblock1
rotate: false rotate: false
xy: 644, 110 xy: 564, 107
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
stoneblock2 stoneblock2
rotate: false rotate: false
xy: 564, 107 xy: 654, 105
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
stoneblock3 stoneblock3
rotate: false rotate: false
xy: 654, 105 xy: 664, 105
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
@@ -895,49 +895,49 @@ stoneedge
index: -1 index: -1
thorium1 thorium1
rotate: false rotate: false
xy: 594, 100 xy: 604, 100
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
thorium2 thorium2
rotate: false rotate: false
xy: 604, 100 xy: 614, 100
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
thorium3 thorium3
rotate: false rotate: false
xy: 614, 100 xy: 624, 100
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
titanium1 titanium1
rotate: false rotate: false
xy: 624, 100 xy: 634, 100
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
titanium2 titanium2
rotate: false rotate: false
xy: 634, 100 xy: 644, 100
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
titanium3 titanium3
rotate: false rotate: false
xy: 644, 100 xy: 654, 95
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
water water
rotate: false rotate: false
xy: 959, 399 xy: 969, 399
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
@@ -1026,13 +1026,20 @@ nuclearreactor-shadow
orig: 26, 26 orig: 26, 26
offset: 0, 0 offset: 0, 0
index: -1 index: -1
playerspawn place-arrow
rotate: false rotate: false
xy: 674, 125 xy: 674, 125
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
playerspawn
rotate: false
xy: 686, 269
size: 8, 8
orig: 8, 8
offset: 0, 0
index: -1
ripples ripples
rotate: false rotate: false
xy: 338, 89 xy: 338, 89
@@ -1245,14 +1252,14 @@ nuclearreactor-lights
index: -1 index: -1
powerinfinite powerinfinite
rotate: false rotate: false
xy: 306, 37 xy: 316, 39
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
powernode powernode
rotate: false rotate: false
xy: 316, 39 xy: 296, 27
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
@@ -1273,28 +1280,28 @@ powernodelarge-shadow
index: -1 index: -1
powervoid powervoid
rotate: false rotate: false
xy: 296, 27 xy: 306, 27
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
rtgenerator rtgenerator
rotate: false rotate: false
xy: 634, 120 xy: 644, 120
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
rtgenerator-top rtgenerator-top
rotate: false rotate: false
xy: 644, 120 xy: 564, 117
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
shieldgenerator shieldgenerator
rotate: false rotate: false
xy: 266, 21 xy: 276, 21
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
@@ -1308,7 +1315,7 @@ shieldprojector
index: -1 index: -1
solarpanel solarpanel
rotate: false rotate: false
xy: 285, 1 xy: 296, 17
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
@@ -1329,7 +1336,7 @@ teleporter-top
index: -1 index: -1
thermalgenerator thermalgenerator
rotate: false rotate: false
xy: 584, 100 xy: 594, 100
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
@@ -1686,63 +1693,63 @@ siliconsmelter-top
index: -1 index: -1
pulverizer pulverizer
rotate: false rotate: false
xy: 326, 33 xy: 326, 23
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
pulverizer-rotator pulverizer-rotator
rotate: false rotate: false
xy: 326, 23 xy: 316, 19
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
pump pump
rotate: false rotate: false
xy: 316, 19 xy: 326, 13
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
reinforceddrill reinforceddrill
rotate: false rotate: false
xy: 326, 13 xy: 430, 122
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
reinforceddrill-rotator reinforceddrill-rotator
rotate: false rotate: false
xy: 430, 122 xy: 440, 122
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
reinforceddrill-top reinforceddrill-top
rotate: false rotate: false
xy: 440, 122 xy: 574, 120
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
separator separator
rotate: false rotate: false
xy: 246, 21 xy: 256, 21
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
separator-liquid separator-liquid
rotate: false rotate: false
xy: 256, 21 xy: 266, 21
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
siliconextractor siliconextractor
rotate: false rotate: false
xy: 245, 1 xy: 255, 11
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
@@ -1756,56 +1763,56 @@ siliconsmelter
index: -1 index: -1
smelter smelter
rotate: false rotate: false
xy: 255, 11 xy: 255, 1
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
steeldrill steeldrill
rotate: false rotate: false
xy: 574, 110 xy: 584, 110
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
steeldrill-rotator steeldrill-rotator
rotate: false rotate: false
xy: 584, 110 xy: 594, 110
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
steeldrill-top steeldrill-top
rotate: false rotate: false
xy: 594, 110 xy: 604, 110
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
stonedrill stonedrill
rotate: false rotate: false
xy: 664, 105 xy: 674, 105
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
stoneformer stoneformer
rotate: false rotate: false
xy: 674, 105 xy: 574, 100
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
titaniumdrill titaniumdrill
rotate: false rotate: false
xy: 654, 95 xy: 664, 95
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
titaniumdrill-top titaniumdrill-top
rotate: false rotate: false
xy: 664, 95 xy: 674, 95
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
@@ -2078,21 +2085,21 @@ walkerfactory-top-open
index: -1 index: -1
repairpoint repairpoint
rotate: false rotate: false
xy: 574, 120 xy: 584, 120
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
repairpoint-turret repairpoint-turret
rotate: false rotate: false
xy: 584, 120 xy: 594, 120
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
resupplypoint resupplypoint
rotate: false rotate: false
xy: 594, 120 xy: 604, 120
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
@@ -2155,7 +2162,7 @@ ironwall
index: -1 index: -1
steelwall steelwall
rotate: false rotate: false
xy: 604, 110 xy: 614, 110
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
@@ -2169,21 +2176,21 @@ steelwall-large
index: -1 index: -1
stonewall stonewall
rotate: false rotate: false
xy: 574, 100 xy: 584, 100
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
titaniumshieldwall titaniumshieldwall
rotate: false rotate: false
xy: 674, 95 xy: 889, 399
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
titaniumwall titaniumwall
rotate: false rotate: false
xy: 889, 399 xy: 899, 399
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
@@ -2288,7 +2295,7 @@ shell-back
index: -1 index: -1
shot shot
rotate: false rotate: false
xy: 235, 11 xy: 235, 1
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
@@ -2302,7 +2309,7 @@ transfer
index: -1 index: -1
transfer-arrow transfer-arrow
rotate: false rotate: false
xy: 899, 399 xy: 909, 399
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
@@ -3604,42 +3611,42 @@ clustergun-equip
index: -1 index: -1
shockgun shockgun
rotate: false rotate: false
xy: 276, 21 xy: 286, 21
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
shockgun-equip shockgun-equip
rotate: false rotate: false
xy: 286, 21 xy: 235, 11
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
triblaster triblaster
rotate: false rotate: false
xy: 909, 399 xy: 919, 399
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
triblaster-equip triblaster-equip
rotate: false rotate: false
xy: 919, 399 xy: 929, 399
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
vulcan vulcan
rotate: false rotate: false
xy: 939, 399 xy: 949, 399
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0
index: -1 index: -1
vulcan-equip vulcan-equip
rotate: false rotate: false
xy: 949, 399 xy: 959, 399
size: 8, 8 size: 8, 8
orig: 8, 8 orig: 8, 8
offset: 0, 0 offset: 0, 0

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 KiB

After

Width:  |  Height:  |  Size: 110 KiB

View File

@@ -42,7 +42,7 @@ public class Palette {
public static final Color accent = Color.valueOf("f4ba6e"); public static final Color accent = Color.valueOf("f4ba6e");
public static final Color place = Color.valueOf("6335f8"); public static final Color place = Color.valueOf("6335f8");
public static final Color remove = Color.valueOf("e55454"); public static final Color remove = Color.valueOf("e55454");
public static final Color placeRotate = Color.ORANGE; public static final Color placeRotate = accent;
public static final Color breakInvalid = Color.valueOf("d44b3d"); public static final Color breakInvalid = Color.valueOf("d44b3d");
public static final Color range = Color.valueOf("f4ba6e"); public static final Color range = Color.valueOf("f4ba6e");
public static final Color power = Color.valueOf("fbd367"); public static final Color power = Color.valueOf("fbd367");

View File

@@ -200,7 +200,7 @@ public class AndroidInput extends InputHandler implements GestureListener{
if(tile == null) continue; if(tile == null) continue;
if(validPlace(tile.x, tile.y, request.recipe.result)){ if(validPlace(tile.x, tile.y, request.recipe.result, request.rotation)){
request.scale = Mathf.lerpDelta(request.scale, 1f, 0.2f); request.scale = Mathf.lerpDelta(request.scale, 1f, 0.2f);
request.redness = Mathf.lerpDelta(request.redness, 0f, 0.2f); request.redness = Mathf.lerpDelta(request.redness, 0f, 0.2f);
}else{ }else{
@@ -231,7 +231,7 @@ public class AndroidInput extends InputHandler implements GestureListener{
int x = lineStartX + i * Mathf.sign(tile.x - lineStartX) * Mathf.bool(result.isX()); int x = lineStartX + i * Mathf.sign(tile.x - lineStartX) * Mathf.bool(result.isX());
int y = lineStartY + i * Mathf.sign(tile.y - lineStartY) * Mathf.bool(!result.isX()); int y = lineStartY + i * Mathf.sign(tile.y - lineStartY) * Mathf.bool(!result.isX());
if(!checkOverlapPlacement(x, y, recipe.result) && validPlace(x, y, recipe.result)){ if(!checkOverlapPlacement(x, y, recipe.result) && validPlace(x, y, recipe.result, result.rotation)){
Draw.color(); Draw.color();
TextureRegion[] regions = recipe.result.getBlockIcon(); TextureRegion[] regions = recipe.result.getBlockIcon();
@@ -306,7 +306,7 @@ public class AndroidInput extends InputHandler implements GestureListener{
int x = lineStartX + i * Mathf.sign(tile.x - lineStartX) * Mathf.bool(result.isX()); int x = lineStartX + i * Mathf.sign(tile.x - lineStartX) * Mathf.bool(result.isX());
int y = lineStartY + i * Mathf.sign(tile.y - lineStartY) * Mathf.bool(!result.isX()); int y = lineStartY + i * Mathf.sign(tile.y - lineStartY) * Mathf.bool(!result.isX());
if(!checkOverlapPlacement(x, y, recipe.result) && validPlace(x, y, recipe.result)){ if(!checkOverlapPlacement(x, y, recipe.result) && validPlace(x, y, recipe.result, result.rotation)){
PlaceRequest request = new PlaceRequest(x * tilesize, y * tilesize, recipe, result.rotation); PlaceRequest request = new PlaceRequest(x * tilesize, y * tilesize, recipe, result.rotation);
request.scale = 1f; request.scale = 1f;
placement.add(request); placement.add(request);
@@ -352,7 +352,7 @@ public class AndroidInput extends InputHandler implements GestureListener{
//remove if request present //remove if request present
if(hasRequest(cursor)) { if(hasRequest(cursor)) {
removeRequest(getRequest(cursor)); removeRequest(getRequest(cursor));
}else if(isPlacing() && validPlace(cursor.x, cursor.y, recipe.result) && !checkOverlapPlacement(cursor.x, cursor.y, recipe.result)){ }else if(isPlacing() && validPlace(cursor.x, cursor.y, recipe.result, rotation) && !checkOverlapPlacement(cursor.x, cursor.y, recipe.result)){
//add to placement queue if it's a valid place position //add to placement queue if it's a valid place position
placement.add(new PlaceRequest(cursor.worldx(), cursor.worldy(), recipe, rotation)); placement.add(new PlaceRequest(cursor.worldx(), cursor.worldy(), recipe, rotation));
} }

View File

@@ -2,14 +2,19 @@ package io.anuke.mindustry.input;
import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input.Buttons; import com.badlogic.gdx.Input.Buttons;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.core.GameState.State;
import io.anuke.mindustry.entities.Player; import io.anuke.mindustry.entities.Player;
import io.anuke.mindustry.input.PlaceUtils.NormalizeDrawResult; import io.anuke.mindustry.graphics.Palette;
import io.anuke.mindustry.input.PlaceUtils.NormalizeResult;
import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.core.Inputs; import io.anuke.ucore.core.Inputs;
import io.anuke.ucore.core.Inputs.DeviceType; import io.anuke.ucore.core.Inputs.DeviceType;
import io.anuke.ucore.core.KeyBinds; import io.anuke.ucore.core.KeyBinds;
import io.anuke.ucore.core.Settings; import io.anuke.ucore.core.Settings;
import io.anuke.ucore.graphics.Draw;
import io.anuke.ucore.graphics.Lines;
import io.anuke.ucore.scene.ui.layout.Unit; import io.anuke.ucore.scene.ui.layout.Unit;
import io.anuke.ucore.scene.utils.Cursors; import io.anuke.ucore.scene.utils.Cursors;
import io.anuke.ucore.util.Mathf; import io.anuke.ucore.util.Mathf;
@@ -20,7 +25,7 @@ public class DesktopInput extends InputHandler{
//controller info //controller info
private float controlx, controly; private float controlx, controly;
private boolean controlling; private boolean controlling;
private boolean showCursor = false; private boolean handCursor;
private final String section; private final String section;
/**Position where the player started dragging a line.*/ /**Position where the player started dragging a line.*/
@@ -57,6 +62,22 @@ public class DesktopInput extends InputHandler{
tile.block().tapped(tile, player); tile.block().tapped(tile, player);
} }
void drawPlace(int x, int y, Block block, int rotation){
if(validPlace(x, y, block, rotation)){
Draw.color();
TextureRegion[] regions = block.getBlockIcon();
for(TextureRegion region : regions){
Draw.rect(region, x *tilesize + block.offset(), y * tilesize + block.offset(),
region.getRegionWidth() * selectScale, region.getRegionHeight() * selectScale, block.rotate ? rotation * 90 : 0);
}
}else{
Draw.color(Palette.remove);
Lines.square(x*tilesize + block.offset(), y*tilesize + block.offset(), block.size * tilesize/2f);
}
}
@Override @Override
public void drawBottom(){ public void drawBottom(){
Tile cursor = tileAt(control.gdxInput().getX(), control.gdxInput().getY()); Tile cursor = tileAt(control.gdxInput().getX(), control.gdxInput().getY());
@@ -65,10 +86,32 @@ public class DesktopInput extends InputHandler{
//draw selection //draw selection
if(selecting){ if(selecting){
NormalizeDrawResult result = PlaceUtils.normalizeDrawArea(recipe.result, selectX, selectY, cursor.x, cursor.y, true, maxLength, selectScale); NormalizeResult result = PlaceUtils.normalizeArea(selectX, selectY, cursor.x, cursor.y, rotation, true, maxLength);
for(int i = 0; i <= result.getLength(); i += recipe.result.size){
int x = selectX + i * Mathf.sign(cursor.x - selectX) * Mathf.bool(result.isX());
int y = selectY + i * Mathf.sign(cursor.y - selectY) * Mathf.bool(!result.isX());
} if(i + recipe.result.size > result.getLength() && recipe.result.rotate){
Draw.color(!validPlace(x, y, recipe.result, result.rotation) ? Palette.remove : Palette.placeRotate);
Draw.grect("place-arrow", x * tilesize + recipe.result.offset(),
y * tilesize + recipe.result.offset(), result.rotation * 90 - 90);
}
drawPlace(x, y, recipe.result, result.rotation);
}
Draw.reset();
}else if(isPlacing()){
if(recipe.result.rotate){
Draw.color(!validPlace(cursor.x, cursor.y, recipe.result, rotation) ? Palette.remove : Palette.placeRotate);
Draw.grect("place-arrow", cursor.worldx() + recipe.result.offset(),
cursor.worldy() + recipe.result.offset(), rotation * 90 - 90);
}
drawPlace(cursor.x, cursor.y, recipe.result, rotation);
}
Draw.reset();
} }
@Override @Override
@@ -80,8 +123,8 @@ public class DesktopInput extends InputHandler{
selecting = false; selecting = false;
} }
//update select animation if(isPlacing()){
if(selecting){ handCursor = true;
selectScale = Mathf.lerpDelta(selectScale, 1f, 0.2f); selectScale = Mathf.lerpDelta(selectScale, 1f, 0.2f);
}else{ }else{
selectScale = 0f; selectScale = 0f;
@@ -100,18 +143,18 @@ public class DesktopInput extends InputHandler{
Tile cursor = tileAt(control.gdxInput().getX(), control.gdxInput().getY()); Tile cursor = tileAt(control.gdxInput().getX(), control.gdxInput().getY());
if(cursor != null && cursor.block().isConfigurable(cursor)){ if(cursor != null && cursor.block().isConfigurable(cursor)){
showCursor = true; handCursor = true;
} }
if(!ui.hasMouse()) { if(!ui.hasMouse()) {
if (showCursor) { if (handCursor) {
Cursors.setHand(); Cursors.setHand();
}else { }else {
Cursors.restoreCursor(); Cursors.restoreCursor();
} }
} }
showCursor = false; handCursor = false;
} }
@Override @Override
@@ -137,6 +180,26 @@ public class DesktopInput extends InputHandler{
public boolean touchUp (int screenX, int screenY, int pointer, int button) { public boolean touchUp (int screenX, int screenY, int pointer, int button) {
if(player.isDead() || state.is(State.menu) || ui.hasDialog()) return false; if(player.isDead() || state.is(State.menu) || ui.hasDialog()) return false;
Tile cursor = tileAt(screenX, screenY);
if(cursor == null){
selecting = false;
return false;
}
if(selecting){
NormalizeResult result = PlaceUtils.normalizeArea(selectX, selectY, cursor.x, cursor.y, rotation, true, maxLength);
for(int i = 0; i <= result.getLength(); i += recipe.result.size){
int x = selectX + i * Mathf.sign(cursor.x - selectX) * Mathf.bool(result.isX());
int y = selectY + i * Mathf.sign(cursor.y - selectY) * Mathf.bool(!result.isX());
rotation = result.rotation;
tryPlaceBlock(x, y);
}
}
selecting = false; selecting = false;
return false; return false;

View File

@@ -169,7 +169,7 @@ public abstract class InputHandler extends InputAdapter{
} }
public boolean tryPlaceBlock(int x, int y){ public boolean tryPlaceBlock(int x, int y){
if(recipe != null && validPlace(x, y, recipe.result) && cursorNear()){ if(recipe != null && validPlace(x, y, recipe.result, rotation) && cursorNear()){
placeBlock(x, y, recipe, rotation); placeBlock(x, y, recipe, rotation);
@@ -186,7 +186,7 @@ public abstract class InputHandler extends InputAdapter{
return false; return false;
} }
public boolean validPlace(int x, int y, Block type){ public boolean validPlace(int x, int y, Block type, int rotation){
for(Tile tile : state.teams.get(player.team).cores){ for(Tile tile : state.teams.get(player.team).cores){
if(tile.distanceTo(x * tilesize, y * tilesize) < coreBuildRange){ if(tile.distanceTo(x * tilesize, y * tilesize) < coreBuildRange){
return Build.validPlace(player.team, x, y, type, rotation) && return Build.validPlace(player.team, x, y, type, rotation) &&

View File

@@ -1,359 +0,0 @@
package io.anuke.mindustry.input;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.math.MathUtils;
import io.anuke.mindustry.graphics.Palette;
import io.anuke.mindustry.graphics.Shaders;
import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.Build;
import io.anuke.mindustry.world.Tile;
import io.anuke.ucore.core.Graphics;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.graphics.Draw;
import io.anuke.ucore.graphics.Fill;
import io.anuke.ucore.graphics.Lines;
import io.anuke.ucore.util.Bundles;
import io.anuke.ucore.util.Mathf;
import io.anuke.ucore.util.Translator;
import static io.anuke.mindustry.Vars.*;
public enum PlaceMode{
cursor{
{
shown = true;
lockCamera = true;
pan = true;
}
public void draw(InputHandler input, int tilex, int tiley, int endx, int endy){
float x = tilex * tilesize;
float y = tiley * tilesize;
boolean valid = input.validPlace(tilex, tiley, input.recipe.result) && (mobile || input.cursorNear());
float offset = input.recipe.result.offset();
float si = MathUtils.sin(Timers.time() / 6f) + 1.5f;
Draw.color(valid ? Palette.place : Palette.remove);
Lines.stroke(2f);
Lines.crect(x + offset, y + offset, tilesize * input.recipe.result.size + si,
tilesize * input.recipe.result.size + si);
input.recipe.result.drawPlace(tilex, tiley, input.rotation, valid);
if(input.recipe.result.rotate){
Draw.color(Palette.placeRotate);
tr.trns(input.rotation * 90, 7, 0);
Lines.line(x, y, x + tr.x, y + tr.y);
}
}
public void tapped(InputHandler input, int tilex, int tiley){
input.tryPlaceBlock(tilex, tiley);
}
},
touch{
{
shown = true;
lockCamera = false;
showRotate = true;
showCancel = true;
}
public void tapped(InputHandler input, int x, int y){
input.tryPlaceBlock(x, y);
}
},
none{
{
delete = true;
shown = true;
both = true;
}
},
touchDelete{
{
shown = true;
lockCamera = false;
showRotate = true;
showCancel = true;
delete = true;
}
public void tapped(InputHandler input, int x, int y){
input.tryDeleteBlock(x, y);
}
},
areaDelete{
int rtilex;
int rtiley;
int rendx;
int rendy;
{
shown = true;
lockCamera = true;
delete = true;
}
public void draw(InputHandler input, int tilex, int tiley, int endx, int endy){
float t = tilesize;
process(tilex, tiley, endx, endy);
tilex = this.rtilex; tiley = this.rtiley;
endx = this.rendx; endy = this.rendy;
float x = this.rtilex * t, y = this.rtiley * t,
x2 = this.rendx * t, y2 = this.rendy * t;
if(x2 >= x){
x -= t/2;
x2 += t/2;
}
if(y2 >= y){
y -= t/2;
y2 += t/2;
}
Draw.color(Palette.remove);
Lines.stroke(1f);
for(int cx = tilex; cx <= endx; cx ++){
for(int cy = tiley; cy <= endy; cy ++){
Tile tile = world.tile(cx, cy);
if(tile != null && tile.getLinked() != null)
tile = tile.getLinked();
if(tile != null && input.validBreak(tile.x, tile.y)){
Lines.crect(tile.drawx(), tile.drawy(),
tile.block().size * t, tile.block().size * t);
}
}
}
Lines.stroke(2f);
Draw.color(Palette.remove);
Lines.rect(x, y, x2 - x, y2 - y);
Draw.alpha(0.3f);
Draw.crect("blank", x, y, x2 - x, y2 - y);
Draw.reset();
}
public void released(InputHandler input, int tilex, int tiley, int endx, int endy){
process(tilex, tiley, endx, endy);
tilex = this.rtilex; tiley = this.rtiley;
endx = this.rendx; endy = this.rendy;
input.player.clearBuilding();
for(int cx = tilex; cx <= endx; cx ++){
for(int cy = tiley; cy <= endy; cy ++){
input.tryDeleteBlock(cx, cy);
}
}
}
void process(int tilex, int tiley, int endx, int endy){
/*
if(Math.abs(x2 - tilex) > maxlen){
x2 = Mathf.sign(x2 - tilex) * maxlen + tilex;
}
if(Math.abs(y2 - tiley) > maxlen){
y2 = Mathf.sign(y2 - tiley) * maxlen + tiley;
}*/
if(endx < tilex){
int t = endx;
endx = tilex;
tilex = t;
}
if(endy < tiley){
int t = endy;
endy = tiley;
tiley = t;
}
this.rendx = endx;
this.rendy = endy;
this.rtilex = tilex;
this.rtiley = tiley;
}
},
hold{
int rtilex;
int rtiley;
int rendx;
int rendy;
int rotation;
{
lockCamera = true;
shown = true;
showCancel = true;
showRotate = true;
}
public void draw(InputHandler input, int tilex, int tiley, int endx, int endy){
if(mobile && !Gdx.input.isTouched(0) && !input.isCursorVisible()){
return;
}
float t = tilesize;
Block block = input.recipe.result;
float offset = block.offset();
process(input, tilex, tiley, endx, endy);
float x = rtilex * t, y = rtiley * t,
x2 = rendx * t, y2 = rendy * t;
if(x2 >= x){
x -= block.size * t/2;
x2 += block.size * t/2;
}
if(y2 >= y){
y -= block.size * t/2;
y2 += block.size * t/2;
}
x += offset;
y += offset;
x2 += offset;
y2 += offset;
if(tilex == endx && tiley == endy){
cursor.draw(input, tilex, tiley, endx, endy);
}else{
Draw.color(Palette.place);
Lines.stroke(1f);
Lines.rect(x, y, x2 - x, y2 - y);
Draw.alpha(0.3f);
Fill.crect(x, y, x2 - x, y2 - y);
Draw.alpha(0f);
Graphics.shader(Shaders.blockpreview, false);
for(int py = 0; py <= Math.abs(this.rendy - this.rtiley); py += block.size){
for(int px = 0; px <= Math.abs(this.rendx - this.rtilex); px += block.size){
int wx = tilex + px * Mathf.sign(endx - tilex),
wy = tiley + py * Mathf.sign(endy - tiley);
if(!Build.validPlace(input.player.team, wx, wy, block, rotation)){
Draw.color(Palette.remove);
}else{
Draw.color(Palette.accent);
}
drawPreview(block, wx * t + offset, wy * t + offset);
}
}
Graphics.shader();
Draw.reset();
}
}
public void drawPreview(Block block, float x, float y){
for(TextureRegion region : block.getBlockIcon()){
Shaders.blockpreview.region = region;
Shaders.blockpreview.color.set(Palette.accent);
Shaders.blockpreview.apply();
Draw.rect(region, x, y);
Graphics.flush();
}
}
public void released(InputHandler input, int tilex, int tiley, int endx, int endy){
process(input, tilex, tiley, endx, endy);
input.rotation = this.rotation;
input.player.clearBuilding();
boolean first = true;
for(int x = 0; x <= Math.abs(this.rendx - this.rtilex); x += input.recipe.result.size){
for(int y = 0; y <= Math.abs(this.rendy - this.rtiley); y += input.recipe.result.size){
input.tryPlaceBlock(
tilex + x * Mathf.sign(endx - tilex),
tiley + y * Mathf.sign(endy - tiley));
}
}
}
void process(InputHandler input, int tilex, int tiley, int endx, int endy){
//todo hold shift to snap
/*
if(Math.abs(tilex - x2) > Math.abs(tiley - y2)){
y2 = tiley;
}else{
x2 = tilex;
}
if(Math.abs(x2 - tilex) > maxlen){
x2 = Mathf.sign(x2 - tilex) * maxlen + tilex;
}
if(Math.abs(y2 - tiley) > maxlen){
y2 = Mathf.sign(y2 - tiley) * maxlen + tiley;
}*/
int dx = endx - tilex, dy = endy - tiley;
if(Math.abs(dx) > Math.abs(dy)){
if(dx >= 0){
rotation = 0;
}else{
rotation = 2;
}
}else if(Math.abs(dx) < Math.abs(dy)){
if(dy >= 0){
rotation = 1;
}else{
rotation = 3;
}
}else{
rotation = input.rotation;
}
if(endx < tilex){
int t = endx;
endx = tilex;
tilex = t;
}
if(endy < tiley){
int t = endy;
endy = tiley;
tiley = t;
}
this.rendx = endx;
this.rendy = endy;
this.rtilex = tilex;
this.rtiley = tiley;
}
};
public boolean lockCamera;
public boolean pan = false;
public boolean shown = false;
public boolean showRotate;
public boolean showCancel;
public boolean delete = false;
public boolean both = false;
private static final Translator tr = new Translator();
public void draw(InputHandler input, int tilex, int tiley, int endx, int endy){}
public void released(InputHandler input, int tilex, int tiley, int endx, int endy){}
public void tapped(InputHandler input, int x, int y){}
@Override
public String toString(){
return Bundles.get("placemode."+name().toLowerCase()+".name");
}
}