GameEntities.InfluenceRegion.OnTick C# (CSharp) Method

OnTick() protected method

Overridden from Engine.EntitySystem.Entity.OnTick().
protected OnTick ( ) : void
return void
        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 );
                            }
                        }
                    }
                }
            }
        }