Exemple #1
0
 /// <summary>
 /// Initilializes a new instance of Dungeon
 /// </summary>
 /// <param name="rom"></param>
 public Dungeon()
 {
     room       = new object_data();
     sprite     = new indoor_sprites();
     block      = new indoor_blocks();
     torches    = new indoor_torches();
     chest      = new indoor_chests();
     pit        = new indoor_damagepits();
     telepathy  = new indoor_telepathy();
     roomheader = new roomHeader();
     item       = new indoor_items();
 }
    //Numerical part

    void particle_versus_source(List <List <object_data> > batches, List <object_data> source_bathc)
    {
        object_data source_object           = source_bathc[0];
        Vector3     source_object_positions = source_object.get_position_vector();
        float       source_object_mass      = source_object.get_particle_mass();

        for (int i = 0; i < batches.Count; i++)
        {
            for (int j = 0; j < batches[0].Count; j++)
            {
                //particle data
                object_data particle_object                 = batches[i][j];
                Vector3     particle_object_positions       = particle_object.get_position_vector();
                float       particle_object_mass            = particle_object.get_particle_mass();
                Vector3     particle_object_velocity_vector = particle_object.get_velocity_vector();
                Vector3     particle_object_force_vector    = particle_object.get_force_vector();


                verlet_integration(virtual_gravity_const, source_object_positions, particle_object_positions, source_object_mass, particle_object_mass, particle_object_velocity_vector, particle_object_force_vector, particle_object);
            }
        }
    }
    //Not exactly verlet integration
    public void verlet_integration(float virtual_gravity_const, Vector3 source_position, Vector3 particle_position, float source_mass, float particle_mass, Vector3 particle_object_velocity_vector, Vector3 particle_object_force_vector, object_data particle_object)
    {
        float del_time_sq = time_step * time_step;

        //calculations

        particle_object_force_vector = force_direction(virtual_gravity_const, source_position, particle_position, source_mass, particle_mass);


        //position update
        particle_position[0] += particle_object_velocity_vector[0] * time_step + (0.5f) * (particle_object_force_vector[0] / particle_mass) * del_time_sq;
        particle_position[1] += particle_object_velocity_vector[1] * time_step + (0.5f) * (particle_object_force_vector[1] / particle_mass) * del_time_sq;
        particle_position[2] += particle_object_velocity_vector[2] * time_step + (0.5f) * (particle_object_force_vector[2] / particle_mass) * del_time_sq;


        //velcity update new
        particle_object_velocity_vector[0] += (particle_object_force_vector[0] / particle_mass) * time_step;
        particle_object_velocity_vector[1] += (particle_object_force_vector[1] / particle_mass) * time_step;
        particle_object_velocity_vector[2] += (particle_object_force_vector[2] / particle_mass) * time_step;

        if (check_collision(source_position, particle_position) == true)
        {
            //Vector3 reduced_particle_object_velocity_vector=-0.2f*particle_object_velocity_vector;
            particle_object_velocity_vector = -(particle_object_velocity_vector - 0.1f * particle_object_velocity_vector);
        }

        particle_object.set_force_vector(particle_object_force_vector);
        particle_object.set_position_vector(particle_position);
        particle_object.set_velocity_vector(particle_object_velocity_vector);
    }