@@ -12,6 +12,8 @@ class FlagToggleWaterfall : WaterFall {
1212 private string loopingSfxEvent ;
1313 private string enteringSfxEvent ;
1414
15+ private bool alreadyTurnedOnOnce = false ;
16+
1517 public FlagToggleWaterfall ( EntityData data , Vector2 offset ) : base ( data , offset ) {
1618 Add ( toggle = new FlagToggleComponent ( data . Attr ( "flag" ) , data . Bool ( "inverted" ) , ( ) => {
1719 // disable the waterfall sound.
@@ -35,10 +37,42 @@ public override void Awake(Scene scene) {
3537 enteringSfxEvent = enteringSfx . EventName ;
3638
3739 toggle . UpdateFlag ( ) ;
40+
41+ if ( toggle . Enabled ) {
42+ alreadyTurnedOnOnce = true ;
43+ }
3844 }
3945
4046 public override void Update ( ) {
4147 if ( toggle . Enabled ) {
48+ // if we are turning the waterfall on for the first time, compute its height, now that other entities
49+ // (pools of water, underwater switch controller) have been toggled to match as well.
50+ if ( ! alreadyTurnedOnOnce ) {
51+ DynData < WaterFall > self = new DynData < WaterFall > ( this ) ;
52+ float height = 8f ;
53+ Water water = null ;
54+ Solid solid = null ;
55+ while ( Y + height < SceneAs < Level > ( ) . Bounds . Bottom
56+ && ( water = Scene . CollideFirst < Water > ( new Rectangle ( ( int ) X , ( int ) ( Y + height ) , 8 , 8 ) ) ) == null
57+ && ( ( solid = Scene . CollideFirst < Solid > ( new Rectangle ( ( int ) X , ( int ) ( Y + height ) , 8 , 8 ) ) ) == null || ! solid . BlockWaterfalls ) ) {
58+
59+ height += 8f ;
60+ solid = null ;
61+ }
62+ if ( water != null && ! Scene . CollideCheck < Solid > ( new Rectangle ( ( int ) X , ( int ) ( Y + height ) , 8 , 16 ) ) ) {
63+ enteringSfxEvent = "event:/env/local/waterfall_small_in_deep" ;
64+ } else {
65+ enteringSfxEvent = "event:/env/local/waterfall_small_in_shallow" ;
66+ }
67+ enteringSfx . Play ( enteringSfxEvent ) ;
68+
69+ self [ "height" ] = height ;
70+ self [ "water" ] = water ;
71+ self [ "solid" ] = solid ;
72+
73+ alreadyTurnedOnOnce = true ;
74+ }
75+
4276 // update the entity as usual
4377 base . Update ( ) ;
4478 } else {
0 commit comments