60class CCTWaterSurfaceEx : CCTBase
61{
62 protected float m_MaximalActionDistanceSq;
63 protected int m_AllowedLiquidSource;
64
65 void CCTWaterSurfaceEx(float maximal_target_distance, int allowedLiquidSource)
66 {
67 m_MaximalActionDistanceSq = maximal_target_distance * maximal_target_distance;
68 m_AllowedLiquidSource = allowedLiquidSource;
69 }
70
71 override bool Can(PlayerBase player, ActionTarget target)
72 {
73 if (!target || (target && target.GetObject()))
74 return false;
75
76 vector hitPosition = target.GetCursorHitPos();
77 string surfaceType;
78 g_Game.SurfaceGetType3D(hitPosition[0], hitPosition[1], hitPosition[2], surfaceType);
79
80 float distSq = vector.DistanceSq(player.GetPosition(), hitPosition);
81 if (distSq > m_MaximalActionDistanceSq)
82 return false;
83
84 if(surfaceType == "" && hitPosition[1] > g_Game.SurfaceGetSeaLevelMax())
85 return false;
86
87 return Surface.CheckLiquidSource(hitPosition[1], surfaceType, m_AllowedLiquidSource);
88 }
89
90 override bool CanContinue(PlayerBase player, ActionTarget target)
91 {
92 return true;
93 }
94}