@@ -1061,7 +1061,7 @@ ocargo.LevelEditor = function(levelId) {
1061
1061
} else {
1062
1062
closeTrashcan ( ) ;
1063
1063
}
1064
- }
1064
+ }
1065
1065
1066
1066
function openTrashcan ( ) {
1067
1067
$ ( '#trashcanLidOpen' ) . css ( 'display' , 'block' ) ;
@@ -1226,8 +1226,8 @@ ocargo.LevelEditor = function(levelId) {
1226
1226
if ( cows ) {
1227
1227
for ( var i = 0 ; i < cows . length ; i ++ ) {
1228
1228
var internalCow = cows [ i ] ;
1229
- if ( internalCow . controlledNode ) {
1230
- mark ( internalCow . controlledNode . coordinate , internalCow . data . group . color , 0.3 , true ) ;
1229
+ if ( internalCow . coordinate ) {
1230
+ mark ( internalCow . coordinate , internalCow . data . group . color , 0.3 , true ) ;
1231
1231
}
1232
1232
}
1233
1233
}
@@ -1683,7 +1683,7 @@ ocargo.LevelEditor = function(levelId) {
1683
1683
var bBox = image . getBBox ( ) ;
1684
1684
imageWidth = bBox . width ;
1685
1685
imageHeight = bBox . height ;
1686
-
1686
+
1687
1687
var paperPosition = paper . position ( ) ;
1688
1688
originX = x - paperPosition . left + paper . scrollLeft ( ) - imageWidth / 2 ;
1689
1689
originY = y - paperPosition . top + paper . scrollTop ( ) - imageHeight / 2 ;
@@ -1699,46 +1699,44 @@ ocargo.LevelEditor = function(levelId) {
1699
1699
1700
1700
if ( trashcanOpen ) {
1701
1701
cow . destroy ( ) ;
1702
- } else if ( isValidDraggedCowPlacement ( controlledCoord , cow ) ) {
1703
- // Add back to the list of cows if on valid nodes
1704
- var controlledNode = ocargo . Node . findNodeByCoordinate ( controlledCoord , nodes ) ;
1705
- cow . controlledNode = controlledNode ;
1706
- cow . valid = true ;
1707
- drawing . setCowImagePosition ( controlledCoord , image , controlledNode ) ;
1702
+ closeTrashcan ( ) ;
1708
1703
} else {
1709
- cow . controlledNode = null ;
1710
- cow . valid = false ;
1711
-
1712
- var cowX = paperX ;
1713
- var cowY = paperY ;
1714
-
1715
- if ( paperWidth < paperX + imageWidth ) {
1716
- cowX = paperWidth - imageWidth
1704
+ cow . coordinate = controlledCoord ;
1705
+ cow . valid = isValidDraggedCowPlacement ( controlledCoord , cow ) ;
1706
+ if ( cow . isOnRoad ( ) ) {
1707
+ const controlledNode = ocargo . Node . findNodeByCoordinate ( controlledCoord , nodes ) ;
1708
+ drawing . setCowImagePosition ( controlledCoord , image , controlledNode ) ;
1717
1709
}
1718
-
1719
- if ( paperHeight < paperY + imageHeight ) {
1720
- cowY = paperHeight - imageHeight
1710
+ else {
1711
+ var cowX = paperX ;
1712
+ var cowY = paperY ;
1713
+
1714
+ if ( paperWidth < paperX + imageWidth ) {
1715
+ cowX = paperWidth - imageWidth
1716
+ }
1717
+
1718
+ if ( paperHeight < paperY + imageHeight ) {
1719
+ cowY = paperHeight - imageHeight
1720
+ }
1721
+
1722
+ image . transform ( 't' + cowX + ',' + cowY ) ;
1721
1723
}
1722
-
1723
- image . transform ( 't' + cowX + ',' + cowY ) ;
1724
1724
}
1725
- adjustCowGroupMinMaxFields ( cow ) ;
1726
1725
1726
+ adjustCowGroupMinMaxFields ( cow ) ;
1727
1727
image . attr ( { 'cursor' :'pointer' } ) ;
1728
- closeTrashcan ( ) ;
1729
1728
}
1730
1729
1731
1730
image . drag ( onDragMove , onDragStart , onDragEnd ) ;
1732
1731
addReleaseListeners ( image . node ) ;
1733
1732
}
1734
1733
1735
1734
function isValidDraggedCowPlacement ( controlledCoord , cow ) {
1736
- var controlledNode = ocargo . Node . findNodeByCoordinate ( controlledCoord , nodes ) ;
1737
- if ( ! controlledNode || isOriginCoordinate ( controlledCoord ) || isHouseCoordinate ( controlledCoord ) )
1735
+ if ( isOriginCoordinate ( controlledCoord ) || isHouseCoordinate ( controlledCoord ) )
1738
1736
return false ;
1739
1737
for ( var i = 0 ; i < cows . length ; i ++ ) {
1740
1738
var otherCow = cows [ i ] ;
1741
- if ( otherCow . controlledNode == controlledNode && ( cow === "undefined" || cow != otherCow ) )
1739
+ if ( cow != otherCow && otherCow . coordinate && otherCow . coordinate . equals ( controlledCoord ) )
1742
1740
return false ;
1743
1741
}
1744
1742
return true ;
@@ -1764,14 +1762,6 @@ ocargo.LevelEditor = function(levelId) {
1764
1762
if ( controlledCoord ) {
1765
1763
markAsBackground ( controlledCoord ) ;
1766
1764
}
1767
- if ( cows ) {
1768
- for ( let i = 0 ; i < cows . length ; i ++ ) {
1769
- let internalCow = cows [ i ] ;
1770
- if ( internalCow !== cow && internalCow . controlledNode ) {
1771
- mark ( internalCow . controlledNode . coordinate , internalCow . data . group . color , 0.3 , true ) ;
1772
- }
1773
- }
1774
- }
1775
1765
if ( originNode ) {
1776
1766
markAsOrigin ( originNode . coordinate ) ;
1777
1767
}
@@ -1783,8 +1773,8 @@ ocargo.LevelEditor = function(levelId) {
1783
1773
}
1784
1774
1785
1775
function setCowMarkingsOnMouseUp ( controlledCoord , cow ) {
1786
- if ( cow . controlledNode ) {
1787
- markAsBackground ( cow . controlledNode . coordinate ) ;
1776
+ if ( cow . isOnRoad ( ) ) {
1777
+ markAsBackground ( cow . coordinate ) ;
1788
1778
}
1789
1779
if ( controlledCoord ) {
1790
1780
mark ( controlledCoord , cow . data . group . color , 0.3 , true ) ;
@@ -1858,20 +1848,18 @@ ocargo.LevelEditor = function(levelId) {
1858
1848
function handleDraggableCowMouseUp ( e ) {
1859
1849
let internalCow = new InternalCow ( { group : cowGroups [ "group1" ] } ) ;
1860
1850
let image = internalCow . image ;
1851
+ internalCow . coordinate = controlledCoord ;
1852
+ internalCow . valid = isValidDraggedCowPlacement ( controlledCoord , internalCow ) ;
1861
1853
1862
- if ( isValidDraggedCowPlacement ( controlledCoord ) ) {
1863
- internalCow . controlledNode = ocargo . Node . findNodeByCoordinate ( controlledCoord , nodes ) ;
1864
- internalCow . valid = true ;
1865
- drawing . setCowImagePosition ( controlledCoord , image , internalCow . controlledNode ) ;
1854
+ if ( internalCow . isOnRoad ( ) ) {
1855
+ const controlledNode = ocargo . Node . findNodeByCoordinate ( controlledCoord , nodes ) ;
1856
+ drawing . setCowImagePosition ( controlledCoord , image , controlledNode ) ;
1866
1857
} else {
1867
- internalCow . controlledNode = null ;
1868
- internalCow . valid = false ;
1869
-
1870
1858
const cowX = e . pageX + paper . scrollLeft ( ) - TAB_PANE_WIDTH - dragged_cow . width / 2 ;
1871
1859
const cowY = e . pageY + paper . scrollTop ( ) - dragged_cow . height / 2 ;
1872
1860
1873
1861
if ( draggedObjectOnGrid ( e , dragged_cow ) ) {
1874
- image . transform ( 't' + cowX + ',' + cowY + 'r90' ) ;
1862
+ image . transform ( 't' + cowX + ',' + cowY ) ;
1875
1863
} else {
1876
1864
internalCow . destroy ( ) ;
1877
1865
}
@@ -2488,7 +2476,7 @@ ocargo.LevelEditor = function(levelId) {
2488
2476
type : cowGroups [ groupId ] . type } ; //editor can only add white cow for now
2489
2477
}
2490
2478
2491
- var coordinates = cows [ i ] . controlledNode . coordinate ;
2479
+ var coordinates = cows [ i ] . coordinate ;
2492
2480
var strCoordinates = { 'x' :coordinates . x , 'y' :coordinates . y } ;
2493
2481
cowGroupData [ groupId ] . potentialCoordinates . push ( strCoordinates ) ;
2494
2482
}
@@ -2920,9 +2908,8 @@ ocargo.LevelEditor = function(levelId) {
2920
2908
if ( ! this . valid ) {
2921
2909
throw "Error: cannot create actual cow from invalid internal cow!" ;
2922
2910
}
2923
-
2924
2911
// Where the cow is placed.
2925
- var coordinates = this . controlledNode . coordinate ;
2912
+ var coordinates = this . coordinate ;
2926
2913
var strCoordinates = { 'x' :coordinates . x , 'y' :coordinates . y } ;
2927
2914
2928
2915
return { "coordinates" : [ strCoordinates ] ,
@@ -2944,6 +2931,10 @@ ocargo.LevelEditor = function(levelId) {
2944
2931
2945
2932
} ;
2946
2933
2934
+ this . isOnRoad = function ( ) {
2935
+ return this . coordinate && ocargo . Node . findNodeByCoordinate ( this . coordinate , nodes ) ;
2936
+ }
2937
+
2947
2938
this . updateTheme = function ( ) {
2948
2939
let newType = currentTheme == THEMES . city ? ocargo . Cow . PIGEON : ocargo . Cow . WHITE ;
2949
2940
let transformDimensions = this [ "image" ] [ "_" ] [ "transform" ] [ 0 ]
@@ -2958,10 +2949,9 @@ ocargo.LevelEditor = function(levelId) {
2958
2949
this . image . remove ( ) ;
2959
2950
2960
2951
this . image = drawing . createCowImage ( newType ) ;
2961
- if ( this . controlledNode !== null ) {
2962
- let controlledNode = this . controlledNode ;
2963
- let coordinates = controlledNode . coordinate ;
2964
- drawing . setCowImagePosition ( coordinates , this . image , controlledNode ) ;
2952
+ if ( this . isOnRoad ( ) ) {
2953
+ let controlledNode = ocargo . Node . findNodeByCoordinate ( coordinates , nodes ) ;
2954
+ drawing . setCowImagePosition ( this . coordinate , this . image , controlledNode ) ;
2965
2955
} else {
2966
2956
this . image . transform ( "t" + x + "," + y + " r" + r ) ;
2967
2957
}
@@ -2972,14 +2962,19 @@ ocargo.LevelEditor = function(levelId) {
2972
2962
this . image = drawing . createCowImage ( data . group . type ) ;
2973
2963
this . valid = false ;
2974
2964
2975
-
2976
2965
if ( data . coordinates && data . coordinates . length > 0 ) {
2977
- var coordinates = new ocargo . Coordinate ( data . coordinates [ 0 ] . x , data . coordinates [ 0 ] . y ) ;
2978
- this . controlledNode = ocargo . Node . findNodeByCoordinate ( coordinates , nodes ) ;
2966
+ this . coordinate = new ocargo . Coordinate ( data . coordinates [ 0 ] . x , data . coordinates [ 0 ] . y ) ;
2967
+ this . valid = isValidDraggedCowPlacement ( this . coordinate , this ) ;
2979
2968
2980
- if ( this . controlledNode ) {
2981
- this . valid = true ;
2982
- drawing . setCowImagePosition ( coordinates , this . image , this . controlledNode ) ;
2969
+ if ( this . isOnRoad ( ) ) {
2970
+ const controlledNode = ocargo . Node . findNodeByCoordinate ( this . coordinate , nodes ) ;
2971
+ drawing . setCowImagePosition ( this . coordinate , this . image , controlledNode ) ;
2972
+ } else {
2973
+ const box = this . image . getBBox ( ) ;
2974
+ // calculate position of the image
2975
+ const paperX = ( this . coordinate . x + 1 ) * GRID_SPACE_SIZE - box . width / 2 ;
2976
+ const paperY = ( GRID_HEIGHT - this . coordinate . y ) * GRID_SPACE_SIZE - box . height / 2 ;
2977
+ this . image . transform ( 't' + paperX + ',' + paperY ) ;
2983
2978
}
2984
2979
} else {
2985
2980
this . image . transform ( '...t' + ( - paper . scrollLeft ( ) ) + ',' + paper . scrollTop ( ) ) ;
0 commit comments