mirror of
https://github.com/InfinityLoader/IL-GSC.git
synced 2025-06-07 17:17:50 -05:00
577 lines
12 KiB
Plaintext
577 lines
12 KiB
Plaintext
/*******************************************************************
|
|
* Decompiled By: Bog
|
|
* Decompiled File: maps\mp\_createfxundo.gsc
|
|
* Game: Call of Duty: Black Ops 2
|
|
* Platform: PC
|
|
* Function Count: 20
|
|
* Decompile Time: 4 ms
|
|
* Timestamp: 10/28/2023 12:10:53 AM
|
|
*******************************************************************/
|
|
|
|
#include common_scripts/utility;
|
|
#include maps/mp/_createfx;
|
|
#include maps/mp/_createfxmenu;
|
|
#include maps/mp/_utility;
|
|
|
|
//Function Number: 1
|
|
store_undo_state(change_type,ents)
|
|
{
|
|
if(!(IsDefined(level.cfx_undo_states)))
|
|
{
|
|
level.cfx_undo_states = [];
|
|
level.cfx_redo_states = [];
|
|
level.cfx_limbo_state = spawnstruct();
|
|
level.cfx_max_states = 10;
|
|
}
|
|
|
|
if(!(isarray(ents)))
|
|
{
|
|
ents = array(ents);
|
|
}
|
|
|
|
temp_array = [];
|
|
for(i = 0;i < ents.size;i++)
|
|
{
|
|
temp_array[i] = copy_fx_ent(ents[i]);
|
|
}
|
|
|
|
state = spawnstruct();
|
|
state.operation = change_type;
|
|
state.last_action = level.cfx_last_action;
|
|
state.ent_array = temp_array;
|
|
if(level.cfx_undo_states.size >= level.cfx_max_states)
|
|
{
|
|
level.cfx_undo_states = array_drop(level.cfx_undo_states);
|
|
}
|
|
|
|
level.cfx_undo_states[level.cfx_undo_states.size] = state;
|
|
level.cfx_redo_states = [];
|
|
level.cfx_limbo_state = undefined;
|
|
debug_print_latest_state("undo");
|
|
}
|
|
|
|
//Function Number: 2
|
|
undo()
|
|
{
|
|
if(!IsDefined(level.createfxent) || !IsDefined(level.cfx_undo_states) || level.cfx_undo_states.size < 1)
|
|
{
|
|
return;
|
|
}
|
|
|
|
revert_state = level.cfx_undo_states[level.cfx_undo_states.size - 1];
|
|
if(level.cfx_last_action != "none")
|
|
{
|
|
store_undo_state("edit",level.selected_fx_ents);
|
|
move_undo_state_to_redo();
|
|
clear_entity_selection("skip_undo");
|
|
apply_state_change("undo",revert_state);
|
|
move_undo_state_to_limbo();
|
|
level.cfx_last_action = "none";
|
|
}
|
|
else
|
|
{
|
|
clear_entity_selection("skip_undo");
|
|
if(revert_state.operation != "edit")
|
|
{
|
|
apply_state_change("undo",revert_state);
|
|
move_undo_state_to_redo();
|
|
level.cfx_last_action = "none";
|
|
}
|
|
else if(IsDefined(level.cfx_limbo_state))
|
|
{
|
|
move_limbo_state_to_redo();
|
|
apply_state_change("undo",revert_state);
|
|
move_undo_state_to_limbo();
|
|
level.cfx_last_action = "none";
|
|
}
|
|
else
|
|
{
|
|
if(level.cfx_undo_states.size > 1)
|
|
{
|
|
move_undo_state_to_redo();
|
|
revert_state = level.cfx_undo_states[level.cfx_undo_states.size - 1];
|
|
}
|
|
|
|
apply_state_change("undo",revert_state);
|
|
move_undo_state_to_limbo();
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 3
|
|
apply_state_change(type,revert_state)
|
|
{
|
|
if(type == "undo")
|
|
{
|
|
/#
|
|
println("^2CreateFX: Undo operation");
|
|
#/
|
|
if(revert_state.operation == "edit")
|
|
{
|
|
undo_edit(revert_state.ent_array);
|
|
}
|
|
else if(revert_state.operation == "add")
|
|
{
|
|
undo_add(revert_state.ent_array);
|
|
}
|
|
else if(revert_state.operation == "delete")
|
|
{
|
|
undo_delete(revert_state.ent_array);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
/#
|
|
println("^2CreateFX: Redo operation");
|
|
#/
|
|
if(revert_state.operation == "edit")
|
|
{
|
|
undo_edit(revert_state.ent_array);
|
|
}
|
|
else if(revert_state.operation == "add")
|
|
{
|
|
undo_delete(revert_state.ent_array);
|
|
}
|
|
else if(revert_state.operation == "delete")
|
|
{
|
|
undo_add(revert_state.ent_array);
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 4
|
|
move_undo_state_to_redo()
|
|
{
|
|
if(level.cfx_redo_states.size >= level.cfx_max_states)
|
|
{
|
|
level.cfx_redo_states = array_drop(level.cfx_redo_states);
|
|
}
|
|
|
|
level.cfx_redo_states[level.cfx_redo_states.size] = level.cfx_undo_states[level.cfx_undo_states.size - 1];
|
|
level.cfx_undo_states = array_pop(level.cfx_undo_states);
|
|
debug_print_latest_state("undo");
|
|
debug_print_latest_state("redo");
|
|
}
|
|
|
|
//Function Number: 5
|
|
move_redo_state_to_undo()
|
|
{
|
|
if(level.cfx_undo_states.size >= level.cfx_max_states)
|
|
{
|
|
level.cfx_undo_states = array_drop(level.cfx_undo_states);
|
|
}
|
|
|
|
level.cfx_undo_states[level.cfx_undo_states.size] = level.cfx_redo_states[level.cfx_redo_states.size - 1];
|
|
level.cfx_redo_states = array_pop(level.cfx_redo_states);
|
|
debug_print_latest_state("undo");
|
|
debug_print_latest_state("redo");
|
|
}
|
|
|
|
//Function Number: 6
|
|
move_undo_state_to_limbo()
|
|
{
|
|
level.cfx_limbo_state = level.cfx_undo_states[level.cfx_undo_states.size - 1];
|
|
level.cfx_undo_states = array_pop(level.cfx_undo_states);
|
|
debug_print_latest_state("undo");
|
|
debug_print_latest_state("limbo");
|
|
}
|
|
|
|
//Function Number: 7
|
|
move_redo_state_to_limbo()
|
|
{
|
|
level.cfx_limbo_state = level.cfx_redo_states[level.cfx_redo_states.size - 1];
|
|
level.cfx_redo_states = array_pop(level.cfx_redo_states);
|
|
debug_print_latest_state("redo");
|
|
debug_print_latest_state("limbo");
|
|
}
|
|
|
|
//Function Number: 8
|
|
move_limbo_state_to_undo()
|
|
{
|
|
if(level.cfx_undo_states.size >= level.cfx_max_states)
|
|
{
|
|
level.cfx_undo_states = array_drop(level.cfx_undo_states);
|
|
}
|
|
|
|
level.cfx_undo_states[level.cfx_undo_states.size] = level.cfx_limbo_state;
|
|
level.cfx_limbo_state = undefined;
|
|
debug_print_latest_state("undo");
|
|
debug_print_latest_state("limbo");
|
|
}
|
|
|
|
//Function Number: 9
|
|
move_limbo_state_to_redo()
|
|
{
|
|
if(level.cfx_redo_states.size >= level.cfx_max_states)
|
|
{
|
|
level.cfx_redo_states = array_drop(level.cfx_redo_states);
|
|
}
|
|
|
|
level.cfx_redo_states[level.cfx_redo_states.size] = level.cfx_limbo_state;
|
|
level.cfx_limbo_state = undefined;
|
|
debug_print_latest_state("redo");
|
|
}
|
|
|
|
//Function Number: 10
|
|
undo_edit(ent_array)
|
|
{
|
|
ent_array = reorder_ent_array_by_uniqueid(ent_array);
|
|
/#
|
|
println("^3CreateFX: Undoing edit");
|
|
debug_print_ent_array(ent_array,"ent_array[]");
|
|
debug_print_ent_array(level.createfxent,"level.createFXent[]");
|
|
#/
|
|
last_id = ent_array[ent_array.size - 1].uniqueid;
|
|
if(last_id > level.createfxent.size - 1)
|
|
{
|
|
last_id = level.createfxent.size - 1;
|
|
}
|
|
|
|
j = ent_array.size - 1;
|
|
source_ent = ent_array[j];
|
|
for(i = last_id;i >= 0;i--)
|
|
{
|
|
target_ent = level.createfxent[i];
|
|
if(source_ent.uniqueid == target_ent.uniqueid)
|
|
{
|
|
copy_values_between_fx_ents(source_ent,target_ent);
|
|
select_entity(i,target_ent,"skip_undo");
|
|
j--;
|
|
if(j < 0)
|
|
{
|
|
break;
|
|
}
|
|
|
|
source_ent = ent_array[j];
|
|
}
|
|
}
|
|
|
|
update_selected_entities();
|
|
/#
|
|
println("^1CreateFX: Finished edit");
|
|
debug_print_ent_array(level.createfxent,"level.createFXent[]");
|
|
#/
|
|
}
|
|
|
|
//Function Number: 11
|
|
undo_add(ent_array)
|
|
{
|
|
ent_array = reorder_ent_array_by_uniqueid(ent_array);
|
|
/#
|
|
println("^3createfx: Undoing add.");
|
|
debug_print_ent_array(ent_array,"ent_array[]");
|
|
debug_print_ent_array(level.createfxent,"level.createFXent[]");
|
|
#/
|
|
last_id = ent_array[ent_array.size - 1].uniqueid;
|
|
if(last_id > level.createfxent.size - 1)
|
|
{
|
|
last_id = level.createfxent.size - 1;
|
|
}
|
|
|
|
j = ent_array.size - 1;
|
|
source_ent = ent_array[j];
|
|
for(i = last_id;i >= 0;i--)
|
|
{
|
|
target_ent = level.createfxent[i];
|
|
if(source_ent.uniqueid == target_ent.uniqueid)
|
|
{
|
|
if(IsDefined(target_ent.looper))
|
|
{
|
|
target_ent.looper delete();
|
|
}
|
|
|
|
target_ent notify("stop_loop");
|
|
level.createfxent[i] = undefined;
|
|
j--;
|
|
if(j < 0)
|
|
{
|
|
break;
|
|
}
|
|
|
|
source_ent = ent_array[j];
|
|
}
|
|
}
|
|
|
|
/#
|
|
debug_print_ent_array(level.createfxent,"level.createFXent[]");
|
|
println("createfx: Starting array_remove_undefined()");
|
|
#/
|
|
arrayremovevalue(level.createfxent,undefined);
|
|
/#
|
|
println("^1CreateFX: Finished undo add.");
|
|
debug_print_ent_array(level.createfxent,"level.createFXent[]");
|
|
#/
|
|
clear_fx_hudelements();
|
|
}
|
|
|
|
//Function Number: 12
|
|
undo_delete(ent_array)
|
|
{
|
|
/#
|
|
println("^3CreateFX: Undoing delete");
|
|
debug_print_ent_array(ent_array,"ent_array in undo_delete()");
|
|
debug_print_ent_array(level.createfxent,"level.createFXent[]");
|
|
#/
|
|
ent_array = reorder_ent_array_by_uniqueid(ent_array);
|
|
if(level.createfxent.size == 0)
|
|
{
|
|
for(i = 0;i < ent_array.size;i++)
|
|
{
|
|
level.createfxent[i] = copy_fx_ent(ent_array[i]);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
temp_array = [];
|
|
i = 0;
|
|
for(j = 0;j < level.createfxent.size;j++)
|
|
{
|
|
target_ent = level.createfxent[j];
|
|
if(i >= ent_array.size)
|
|
{
|
|
temp_array[temp_array.size] = target_ent;
|
|
}
|
|
else
|
|
{
|
|
source_ent = ent_array[i];
|
|
if(target_ent.uniqueid < source_ent.uniqueid)
|
|
{
|
|
temp_array[temp_array.size] = target_ent;
|
|
}
|
|
else
|
|
{
|
|
temp_array[temp_array.size] = copy_fx_ent(source_ent);
|
|
j--;
|
|
i++;
|
|
}
|
|
}
|
|
}
|
|
|
|
while(i < ent_array.size)
|
|
{
|
|
temp_array[temp_array.size] = ent_array[i];
|
|
i++;
|
|
}
|
|
|
|
level.createfxent = temp_array;
|
|
}
|
|
|
|
/#
|
|
println("^1Createfx: Finished undoing delete, pre-selection");
|
|
debug_print_ent_array(level.createfxent,"level.createFXent[]");
|
|
#/
|
|
last_id = ent_array[ent_array.size - 1].uniqueid;
|
|
if(last_id > level.createfxent.size - 1)
|
|
{
|
|
last_id = level.createfxent.size - 1;
|
|
}
|
|
|
|
j = ent_array.size - 1;
|
|
source_ent = ent_array[j];
|
|
for(i = last_id;i >= 0;i--)
|
|
{
|
|
target_ent = level.createfxent[i];
|
|
if(source_ent.uniqueid == target_ent.uniqueid)
|
|
{
|
|
target_ent post_entity_creation_function();
|
|
select_entity(i,target_ent,"skip_undo");
|
|
j--;
|
|
if(j < 0)
|
|
{
|
|
break;
|
|
}
|
|
|
|
source_ent = ent_array[j];
|
|
}
|
|
}
|
|
|
|
update_selected_entities();
|
|
}
|
|
|
|
//Function Number: 13
|
|
redo()
|
|
{
|
|
if(!IsDefined(level.createfxent) || !IsDefined(level.cfx_redo_states) || level.cfx_redo_states.size < 1)
|
|
{
|
|
return;
|
|
}
|
|
|
|
clear_entity_selection("skip_undo");
|
|
if(IsDefined(level.cfx_limbo_state))
|
|
{
|
|
move_limbo_state_to_undo();
|
|
move_redo_state_to_limbo();
|
|
apply_state_change("redo",level.cfx_limbo_state);
|
|
}
|
|
else
|
|
{
|
|
revert_state = level.cfx_redo_states[level.cfx_redo_states.size - 1];
|
|
apply_state_change("redo",revert_state);
|
|
if(revert_state.operation == "edit")
|
|
{
|
|
move_redo_state_to_limbo();
|
|
}
|
|
else
|
|
{
|
|
move_redo_state_to_undo();
|
|
}
|
|
}
|
|
|
|
level.cfx_last_action = "none";
|
|
}
|
|
|
|
//Function Number: 14
|
|
reorder_ent_array_by_uniqueid(ent_array)
|
|
{
|
|
if(ent_array.size <= 1)
|
|
{
|
|
return ent_array;
|
|
}
|
|
|
|
array_size = ent_array.size;
|
|
for(i = 0;i < array_size - 1;i++)
|
|
{
|
|
for(j = i + 1;j < array_size;j++)
|
|
{
|
|
if(ent_array[i].uniqueid > ent_array[j].uniqueid)
|
|
{
|
|
temp_ent = ent_array[i];
|
|
ent_array[i] = ent_array[j];
|
|
ent_array[j] = temp_ent;
|
|
}
|
|
}
|
|
}
|
|
|
|
return ent_array;
|
|
}
|
|
|
|
//Function Number: 15
|
|
copy_fx_ent(ent)
|
|
{
|
|
temp_ent = spawnstruct();
|
|
temp_ent.drawn = ent.drawn;
|
|
temp_ent.drawn_axis_model = ent.drawn_axis_model;
|
|
temp_ent.last_fx_index = ent.last_fx_index;
|
|
temp_ent.textalpha = ent.textalpha;
|
|
temp_ent.uniqueid = ent.uniqueid;
|
|
temp_ent.v = ent.v;
|
|
return temp_ent;
|
|
}
|
|
|
|
//Function Number: 16
|
|
copy_values_between_fx_ents(source,dest)
|
|
{
|
|
dest.drawn = source.drawn;
|
|
dest.drawn_axis_model = source.drawn_axis_model;
|
|
dest.last_fx_index = source.last_fx_index;
|
|
dest.textalpha = source.textalpha;
|
|
dest.v = source.v;
|
|
return dest;
|
|
}
|
|
|
|
//Function Number: 17
|
|
array_pop(array)
|
|
{
|
|
array_size = array.size - 1;
|
|
temp_array = [];
|
|
if(array_size <= 0)
|
|
{
|
|
return temp_array;
|
|
}
|
|
|
|
for(i = 0;i < array_size;i++)
|
|
{
|
|
temp_array[i] = array[i];
|
|
}
|
|
|
|
array = temp_array;
|
|
return array;
|
|
}
|
|
|
|
//Function Number: 18
|
|
array_drop(array)
|
|
{
|
|
if(array.size > 0)
|
|
{
|
|
temp_array = [];
|
|
for(i = 1;i < array.size;i++)
|
|
{
|
|
temp_array[i - 1] = array[i];
|
|
}
|
|
|
|
array = temp_array;
|
|
}
|
|
|
|
return array;
|
|
}
|
|
|
|
//Function Number: 19
|
|
debug_print_ent_array(array,name)
|
|
{
|
|
/#
|
|
if(IsDefined(name))
|
|
{
|
|
println("Printing out " + name);
|
|
}
|
|
else
|
|
{
|
|
println("Printing out some array");
|
|
}
|
|
|
|
for(i = 0;i < array.size;i++)
|
|
{
|
|
if(!(IsDefined(array[i])))
|
|
{
|
|
println("" + i + ": deleted effect");
|
|
}
|
|
else
|
|
{
|
|
println("" + i + ": uniqueid: " + array[i].uniqueid + " fxid: " + array[i].v["fxid"]);
|
|
}
|
|
}
|
|
#/
|
|
}
|
|
|
|
//Function Number: 20
|
|
debug_print_latest_state(type)
|
|
{
|
|
/#
|
|
println("^3Saving " + type + " state");
|
|
if(type == "undo")
|
|
{
|
|
if(!(IsDefined(level.cfx_undo_states[level.cfx_undo_states.size - 1])))
|
|
{
|
|
println("There are no undo states.");
|
|
return;
|
|
}
|
|
|
|
state = level.cfx_undo_states[level.cfx_undo_states.size - 1];
|
|
size = level.cfx_undo_states.size - 1;
|
|
}
|
|
else if(type == "redo")
|
|
{
|
|
if(!(IsDefined(level.cfx_redo_states[level.cfx_redo_states.size - 1])))
|
|
{
|
|
println("There are no redo states.");
|
|
return;
|
|
}
|
|
|
|
state = level.cfx_redo_states[level.cfx_redo_states.size - 1];
|
|
size = level.cfx_redo_states.size - 1;
|
|
}
|
|
else
|
|
{
|
|
if(!(IsDefined(level.cfx_limbo_state)))
|
|
{
|
|
println("There is no limbo state.");
|
|
return;
|
|
}
|
|
|
|
state = level.cfx_limbo_state;
|
|
size = 0;
|
|
}
|
|
|
|
println("State " + size + " - " + state.operation + ": " + state.last_action);
|
|
debug_print_ent_array(state.ent_array,"save state ent_array");
|
|
#/
|
|
} |