@@ -309,8 +309,8 @@ Actor::IsOver(float mx, float my)
309
309
auto y = GetTrueY ();
310
310
auto hal = GetHorizAlign ();
311
311
auto val = GetVertAlign ();
312
- auto wi = GetZoomedWidth () * GetParent ()->GetTrueZoom ();
313
- auto hi = GetZoomedHeight () * GetParent ()->GetTrueZoom ();
312
+ auto wi = GetZoomedWidth () * GetFakeParentOrParent ()->GetTrueZoom ();
313
+ auto hi = GetZoomedHeight () * GetFakeParentOrParent ()->GetTrueZoom ();
314
314
auto lr = x - (hal * wi);
315
315
auto rr = x + wi - (hal * wi);
316
316
auto ur = y - (val * hi);
@@ -319,44 +319,57 @@ Actor::IsOver(float mx, float my)
319
319
bool withinY = my >= ur && my <= br;
320
320
return withinX && withinY;
321
321
}
322
+ Actor*
323
+ Actor::GetFakeParentOrParent ()
324
+ {
325
+ if (!this )
326
+ return nullptr ;
327
+ if (m_FakeParent)
328
+ return m_FakeParent;
329
+ if (m_pParent)
330
+ return m_pParent;
331
+ return nullptr ;
332
+ }
322
333
float
323
334
Actor::GetTrueX ()
324
335
{
325
336
if (!this )
326
337
return 0 .f ;
327
- if (!m_pParent)
338
+ auto * mfp = GetFakeParentOrParent ();
339
+ if (!mfp)
328
340
return GetX ();
329
- return GetX () * GetParent ()->GetTrueZoom () +
330
- GetParent ()->GetTrueX ();
341
+ return GetX () * mfp->GetTrueZoom () + mfp->GetTrueX ();
331
342
}
332
343
333
344
float
334
345
Actor::GetTrueY ()
335
346
{
336
347
if (!this )
337
348
return 0 .f ;
338
- if (!m_pParent)
349
+ auto * mfp = GetFakeParentOrParent ();
350
+ if (!mfp)
339
351
return GetY ();
340
- return GetY () * GetParent ()->GetTrueZoom () +
341
- GetParent ()->GetTrueY ();
352
+ return GetY () * mfp->GetTrueZoom () + mfp->GetTrueY ();
342
353
}
343
354
float
344
355
Actor::GetTrueZoom ()
345
356
{
346
357
if (!this )
347
358
return 1 .f ;
348
- if (!m_pParent)
359
+ auto * mfp = GetFakeParentOrParent ();
360
+ if (!mfp)
349
361
return GetZoom ();
350
- return GetZoom () * GetParent () ->GetTrueZoom ();
362
+ return GetZoom () * mfp ->GetTrueZoom ();
351
363
}
352
364
bool
353
365
Actor::IsVisible ()
354
366
{
355
367
if (!this )
356
368
return false ;
357
- if (!m_pParent)
369
+ auto * mfp = GetFakeParentOrParent ();
370
+ if (!mfp)
358
371
return GetVisible ();
359
- return GetVisible () && GetParent () ->IsVisible ();
372
+ return GetVisible () && mfp ->IsVisible ();
360
373
}
361
374
void
362
375
Actor::Draw ()
@@ -2844,7 +2857,7 @@ class LunaActor : public Luna<Actor>
2844
2857
ADD_METHOD (GetWrapperState);
2845
2858
2846
2859
ADD_METHOD (Draw);
2847
-
2860
+
2848
2861
ADD_METHOD (SaveXY);
2849
2862
ADD_METHOD (LoadXY);
2850
2863
0 commit comments