[ create a new paste ] login | about

Link: http://codepad.org/Qs646V01    [ raw code | fork ]

hurracane - C, pasted on Jul 15:
//Supports 3 slots.
objectiveList_init()
{
	//Prefix all objectiveList-related variables with ol_
	level.ol_objectiveList = [];
	level.ol_relative_position = [];
	level.ol_max_objectives = 16; // maximum amount of objectives supported by cod
	level.ol_redraw_speed = 1;
	thread drawAllObjectives();
}
//Adds an objective to "the objective list"
addObjectiveToList(pos, visible_to, icon)
{
	if(level.ol_objectiveList.size == level.ol_max_objectives)
	{
		if(isDefined(self) && isPlayer(self))
			self iprintln("^1WARNING:^7 ##-- Objective list is full --##");
		return -1;
	}
	idx = level.ol_objectiveList.size;
	relative_idx = findEmptyRelativePosition();
	level.ol_objectiveList[idx] = makeNewEntry(pos, visible_to, icon);
	
	level.ol_relative_position[relative_idx] = idx;
	return relative_idx;
}
//Remove a position
removeFromobjectiveList(relative_idx)
{
	if(relative_idx == -1)
		return;
	//Check if the position we found is the very last element
	last = level.ol_objectiveList.size - 1;
	//If the idx is not the last one, copy the last one to pos idx, which replaces idx with a new valid entry
	actual_idx = level.ol_relative_position[relative_idx];
	if(actual_idx != last)
	{
		//relative position of the last el
		relative_pos_last = findRelativePosition(last);
		level.ol_relative_position[relative_pos_last] = idx;
		level.ol_objectiveList[idx] = level.ol_objectiveList[last];
	}
	level.ol_relative_position[relative_idx] = -1;
	//We can undefine the last entry because we either copied it somewhere else, or it's the value we want to remove
	level.ol_objectiveList[last] = undefined;
}
drawAllObjectives()
{
	oldels = -1;
	while(1)
	{
		for(i=-1;i<oldels;oldels--)
			Objective_Delete(oldels);
		for(i=0;i<level.ol_objectiveList.size;i++)
		{
			oldels++;
			pos = getEntryPos(level.ol_objectiveList[i]);
			visible_to = getEntryTeam(level.ol_objectiveList[i]);
			icon = getEntryIcon(level.ol_objectiveList[i]);
			
			objective_add(i, "current", pos, icon);
			objective_icon(i, icon);
			//If empty string, visible to everyone
			if(visible_to != "")
				objective_team(i, visible_to);
		}
		wait level.ol_redraw_speed;
	}
}
removeAllObjectivesFromCompass()
{
	level.ol_objectiveList = [];
}

//Make a new entry containing the position to be displayed on compass, the team this entry is visible to and the icon that should be displayed
makeNewEntry(pos, visible_to, icon)
{
	entry = [];
	entry[0] = pos;
	entry[1] = visible_to;
	entry[2] = icon;
	return entry;
}
//Returns the position stored in an entry
getEntryPos(entry)
{
	return entry[0];
}
//Returns the team an entry should be visible to
getEntryTeam(entry)
{
	return entry[1];
}
//Returns the icon that should be displayed on the compass
getEntryIcon(entry)
{
	return entry[2];
}
findRelativePosition(actual_idx)
{
	for(i=0;i<level.ol_relative_position.size;i++)
		if(actual_idx == level.ol_relative_position[i])
			return i;
	return -1;
}
findEmptyRelativePosition()
{
	for(i=0;i<level.ol_max_objectives;i++)
		if(!isDefined(level.ol_relative_position[i]))
			return i;
		else if(level.ol_relative_position[i] == -1)
			return i;
}


Create a new paste based on this one


Comments: