Example #1
0
int FirmDie::process()
{
	FirmBuild *firmBuild = firm_die_res.get_build(firm_build_id);

	if( --frame_delay_count < 1 )
//	if( ++frame_delay_count > firmBuild->frame_delay_array[frame-1])
	{
	//	frame_delay_count = 0;
	//	if( ++frame > 	firmBuild->frame_count)
		if( ++frame > 	end_frame)
		{
			if (frame_looping >0)
			{
				frame_looping --;
				frame = start_frame;
				return 0;
			}
			firmBuild->free_bitmap_res();
			return 1;
		}
	}
	return 0;
}
Example #2
0
File: ofirm.cpp Project: 112212/7k2
//--------- Begin of function Firm::deinit --------//
//
void Firm::deinit()
{
	if( !firm_recno )    // already deleted
		return;

	if( power.command_firm_recno == firm_recno )
		power.reset_command();

	// ##### begin Gilbert 30/10 ######//
//	mem_del(firm_cur_frame);
//	firm_cur_frame = NULL;
//	mem_del(firm_remain_frame_delay);
//	firm_remain_frame_delay = NULL;
	// ##### end Gilbert 30/10 ######//
	
	is_being_deleted = 1;	// whether the place is currently being deleted, if it is set to true, some functions will be executed in an exceptional way, it is set in deinit()

	Place::deinit();			// parent class deinit()

	deinit_derived();

	//------- delete AI info ----------//

	if( nation_recno )
	{
		Nation* nationPtr = nation_array[nation_recno];

		nationPtr->del_firm_info(firm_id, firm_recno);

		if(is_ai)
		{
			if( should_close_flag )
				nationPtr->firm_should_close_array[firm_id-1]--;

			err_when( nationPtr->firm_should_close_array[firm_id-1] < 0 );

		}
	}

	//--------- clean up related stuff -----------//

	restore_world_matrix();
	release_link();

	//-------- dynamic unloading of firm bitmaps ---------//

	FirmBuild* firmBuild = firm_res.get_build(firm_build_id);
	firmBuild->free_bitmap_res();

	//------ all workers and the overseer resign ------//

	if( !sys.signal_exit_flag )
	{
	//	char* name1 = "Wilde Lishorr";
	//	char* name2 = "Lishorr";
	//	if( !under_construction && hit_points < 1 && strcmp(name1, firm_name()) && strcmp(name2, firm_name()) )
		if( !under_construction && hit_points < 1 )
		{
			// -------- create a firm die record ------//
			// can be called as soon as restore_world_matrix

			static int effectId = sprite_res.search_sprite( "FIRE_EFF" );
			err_when( !effectId );
			Effect::create(effectId, loc_x1 *LOCATE_WIDTH, loc_y1 *LOCATE_HEIGHT, SPRITE_IDLE, 1, 8, 0);
					
			FirmDie firmDie3;
			if (firmBuild->loc_width == 3 && firmBuild->loc_height == 3)
				firmDie3.init(this, 6);
			else
			if (firmBuild->loc_width == 6 && firmBuild->loc_height == 6)
				firmDie3.init(this, 5);
			else
				firmDie3.init(this, 4);
			firm_die_array.add(&firmDie3);
		}
	}

	free_all_people();
	//--------- decrease firm counter -----------//

	if( nation_recno )
		nation_array[nation_recno]->nation_firm_count--;

	//------ update firm counter -------//

	FirmInfo* firmInfo = firm_res[firm_id];

	firmInfo->total_firm_count--;

	if( nation_recno )
		firmInfo->dec_nation_firm_count(nation_recno);

	//------- update town border ---------//

	loc_x1 = -1;      // mark deleted

	//------- if the current firm is the selected -----//

	if( firm_array.selected_recno == firm_recno )
	{
		firm_array.selected_recno = 0;
      info.disp();
   }

   //-------------------------------------------------//

   firm_recno = 0;

	is_being_deleted = 0;


	//-------- dynamic unloading of firm bitmaps ---------//

//	FirmBuild* firmBuild = firm_res.get_build(firm_build_id);
	
	if( firm_id )
	{
//		firmBuild->free_bitmap_res();
		firm_id = 0;
	}
}