protected override void OnTick()
{
base.OnTick();
if( force != 0 )
{
foreach( MapObject obj in ObjectsInRegion )
{
if( obj.IsSetDeleted )
continue;
//impulse
if( impulsePerSecond != 0 )
{
PhysicsModel objPhysicsModel = obj.PhysicsModel;
if( objPhysicsModel != null )
{
foreach( Body body in objPhysicsModel.Bodies )
{
if( body.Static )
continue;
EngineRandom random = World.Instance.Random;
float distanceCoef = GetDistanceCoefficient( body.Position );
float randomCoef = 1.0f + random.NextFloatCenter() * .1f;
float v = impulsePerSecond * force * distanceCoef * randomCoef * TickDelta;
Vec3 point = new Vec3(
random.NextFloat() * .1f,
random.NextFloat() * .1f,
random.NextFloat() * .1f );
body.AddForce( ForceType.GlobalAtLocalPos, TickDelta,
Rotation * new Vec3( v, 0, 0 ), point );
}
}
}
if( InfluenceType != null || DamagePerSecond != 0 )
{
Dynamic dynamic = obj as Dynamic;
if( dynamic != null )
{
float distanceCoef = GetDistanceCoefficient( obj.Position );
if( InfluenceType != null )
{
dynamic.AddInfluence( InfluenceType,
InfluenceTimePerSecond * distanceCoef * TickDelta, true );
}
if( DamagePerSecond != 0 )
{
dynamic.DoDamage( null, obj.Position, null,
DamagePerSecond * distanceCoef * TickDelta, false );
}
}
}
}
}
}