/// <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); }