11using System ;
2+ using System . Collections . Generic ;
23using TSMapEditor . GameMath ;
34using TSMapEditor . Models ;
45using TSMapEditor . Mutations . Classes ;
@@ -13,9 +14,6 @@ public PlaceSmudgeCollectionCursorAction(ICursorActionTarget cursorActionTarget)
1314
1415 public override string GetName ( ) => Translate ( "Name" , "Place Smudge Collection" ) ;
1516
16- private Smudge oldSmudge ;
17- private Smudge smudge ;
18-
1917 private SmudgeCollection _smudgeCollection ;
2018 public SmudgeCollection SmudgeCollection
2119 {
@@ -28,44 +26,71 @@ public SmudgeCollection SmudgeCollection
2826 }
2927
3028 _smudgeCollection = value ;
31- smudge = new Smudge { SmudgeType = _smudgeCollection . Entries [ 0 ] . SmudgeType } ;
3229 }
3330 }
3431
32+ private List < Smudge > previewSmudges = new List < Smudge > ( ) ;
33+ private List < Smudge > existingSmudges = new List < Smudge > ( ) ;
34+
3535 public override void PreMapDraw ( Point2D cellCoords )
3636 {
37- var cell = CursorActionTarget . Map . GetTile ( cellCoords ) ;
37+ Point2D centeredBrushSizeCellCoords = CursorActionTarget . BrushSize . CenterWithinBrush ( cellCoords ) ;
38+ existingSmudges . Clear ( ) ;
39+
40+ int i = 0 ;
41+ CursorActionTarget . BrushSize . DoForBrushSize ( offset =>
42+ {
43+ var cell = CursorActionTarget . Map . GetTile ( centeredBrushSizeCellCoords + offset ) ;
44+ if ( cell == null )
45+ return ;
3846
39- // "Randomize" the smudge image, it makes it clearer that we're placing down one from a collection.
40- // If we used actual RNG here we'd need to avoid doing it every frame to avoid a constantly
41- // changing smudge even when the cursor is still. Using cell numbers gives the intended
42- // effect without pointless flickering.
43- int cellnum = cellCoords . X + cellCoords . Y ;
44- int smudgeNumber = cellnum % SmudgeCollection . Entries . Length ;
45- smudge . SmudgeType = SmudgeCollection . Entries [ smudgeNumber ] . SmudgeType ;
47+ if ( previewSmudges . Count <= i )
48+ {
49+ previewSmudges . Add ( new Smudge ( ) ) ;
50+ }
4651
47- oldSmudge = cell . Smudge ;
52+ // "Randomize" the smudge image, it makes it clearer that we're placing down one from a collection.
53+ // If we used actual RNG here we'd need to avoid doing it every frame to avoid a constantly
54+ // changing smudge even when the cursor is still. Using cell numbers gives the intended
55+ // effect without pointless flickering.
56+ int cellnum = cell . X + cell . Y ;
57+ int smudgeNumber = cellnum % SmudgeCollection . Entries . Length ;
58+ previewSmudges [ i ] . SmudgeType = SmudgeCollection . Entries [ smudgeNumber ] . SmudgeType ;
59+ previewSmudges [ i ] . Position = cell . CoordsToPoint ( ) ;
60+ existingSmudges . Add ( cell . Smudge ) ;
4861
49- smudge . Position = cell . CoordsToPoint ( ) ;
50- cell . Smudge = smudge ;
62+ cell . Smudge = previewSmudges [ i ] ;
5163
52- CursorActionTarget . AddRefreshPoint ( cellCoords ) ;
64+ i ++ ;
65+ } ) ;
66+
67+ CursorActionTarget . AddRefreshPoint ( centeredBrushSizeCellCoords , MutationTarget . BrushSize . Max ) ;
5368 }
5469
5570 public override void PostMapDraw ( Point2D cellCoords )
5671 {
57- var cell = CursorActionTarget . Map . GetTile ( cellCoords ) ;
58- if ( cell . Smudge == smudge )
72+ base . PostMapDraw ( cellCoords ) ;
73+
74+ Point2D centeredBrushSizeCellCoords = CursorActionTarget . BrushSize . CenterWithinBrush ( cellCoords ) ;
75+
76+ int i = 0 ;
77+ CursorActionTarget . BrushSize . DoForBrushSize ( offset =>
5978 {
60- cell . Smudge = oldSmudge ;
61- }
79+ var cell = CursorActionTarget . Map . GetTile ( centeredBrushSizeCellCoords + offset ) ;
80+ if ( cell == null )
81+ return ;
82+
83+ cell . Smudge = existingSmudges [ i ] ;
84+ i ++ ;
85+ } ) ;
6286
63- CursorActionTarget . AddRefreshPoint ( cellCoords ) ;
87+ CursorActionTarget . AddRefreshPoint ( centeredBrushSizeCellCoords , CursorActionTarget . BrushSize . Max ) ;
6488 }
6589
6690 public override void LeftDown ( Point2D cellCoords )
6791 {
68- var mutation = new PlaceSmudgeCollectionMutation ( CursorActionTarget . MutationTarget , SmudgeCollection , cellCoords ) ;
92+ Point2D centeredBrushSizeCellCoords = CursorActionTarget . BrushSize . CenterWithinBrush ( cellCoords ) ;
93+ var mutation = new PlaceSmudgeCollectionMutation ( CursorActionTarget . MutationTarget , SmudgeCollection , centeredBrushSizeCellCoords , MutationTarget . BrushSize ) ;
6994 CursorActionTarget . MutationManager . PerformMutation ( mutation ) ;
7095 }
7196
0 commit comments