Fix placement of some script functions

This commit is contained in:
Sergeanur 2020-12-16 23:28:06 +02:00
parent 8e45439205
commit 9a9b1e7574
2 changed files with 140 additions and 141 deletions

View File

@ -2025,3 +2025,143 @@ int8 CRunningScript::ProcessCommands900To999(int32 command)
}
return -1;
}
int32 CTheScripts::GetNewUniqueScriptSphereIndex(int32 index)
{
if (ScriptSphereArray[index].m_Index >= UINT16_MAX - 1)
ScriptSphereArray[index].m_Index = 1;
else
ScriptSphereArray[index].m_Index++;
return (uint16)index | ScriptSphereArray[index].m_Index << 16;
}
int32 CTheScripts::GetActualScriptSphereIndex(int32 index)
{
if (index == -1)
return -1;
uint16 check = (uint32)index >> 16;
uint16 array_idx = index & (0xFFFF);
script_assert(array_idx < ARRAY_SIZE(ScriptSphereArray));
if (check != ScriptSphereArray[array_idx].m_Index)
return -1;
return array_idx;
}
void CTheScripts::DrawScriptSpheres()
{
for (int i = 0; i < MAX_NUM_SCRIPT_SPHERES; i++) {
if (ScriptSphereArray[i].m_bInUse)
C3dMarkers::PlaceMarkerSet(ScriptSphereArray[i].m_Id, MARKERTYPE_CYLINDER, ScriptSphereArray[i].m_vecCenter, ScriptSphereArray[i].m_fRadius,
SPHERE_MARKER_R, SPHERE_MARKER_G, SPHERE_MARKER_B, SPHERE_MARKER_A, SPHERE_MARKER_PULSE_PERIOD, SPHERE_MARKER_PULSE_FRACTION, 0);
}
}
int32 CTheScripts::AddScriptSphere(int32 id, CVector pos, float radius)
{
int16 i = 0;
for (i = 0; i < MAX_NUM_SCRIPT_SPHERES; i++) {
if (!ScriptSphereArray[i].m_bInUse)
break;
}
#ifdef FIX_BUGS
if (i == MAX_NUM_SCRIPT_SPHERES)
return -1;
#endif
ScriptSphereArray[i].m_bInUse = true;
ScriptSphereArray[i].m_Id = id;
ScriptSphereArray[i].m_vecCenter = pos;
ScriptSphereArray[i].m_fRadius = radius;
return GetNewUniqueScriptSphereIndex(i);
}
void CTheScripts::RemoveScriptSphere(int32 index)
{
index = GetActualScriptSphereIndex(index);
if (index == -1)
return;
ScriptSphereArray[index].m_bInUse = false;
ScriptSphereArray[index].m_Id = 0;
}
void CTheScripts::AddToBuildingSwapArray(CBuilding* pBuilding, int32 old_model, int32 new_model)
{
int i = 0;
bool found = false;
while (i < MAX_NUM_BUILDING_SWAPS && !found) {
if (BuildingSwapArray[i].m_pBuilding == pBuilding)
found = true;
else
i++;
}
if (found) {
if (BuildingSwapArray[i].m_nOldModel == new_model) {
BuildingSwapArray[i].m_pBuilding = nil;
BuildingSwapArray[i].m_nOldModel = BuildingSwapArray[i].m_nNewModel = -1;
}
else {
BuildingSwapArray[i].m_nNewModel = new_model;
}
}
else {
i = 0;
while (i < MAX_NUM_BUILDING_SWAPS && !found) {
if (BuildingSwapArray[i].m_pBuilding == nil)
found = true;
else
i++;
}
if (found) {
BuildingSwapArray[i].m_pBuilding = pBuilding;
BuildingSwapArray[i].m_nNewModel = new_model;
BuildingSwapArray[i].m_nOldModel = old_model;
}
}
}
void CTheScripts::AddToInvisibilitySwapArray(CEntity* pEntity, bool remove)
{
int i = 0;
bool found = false;
while (i < MAX_NUM_INVISIBILITY_SETTINGS && !found) {
if (InvisibilitySettingArray[i] == pEntity)
found = true;
else
i++;
}
if (found) {
if (remove)
InvisibilitySettingArray[i] = nil;
}
else if (!remove) {
i = 0;
while (i < MAX_NUM_INVISIBILITY_SETTINGS && !found) {
if (InvisibilitySettingArray[i] == nil)
found = true;
else
i++;
}
if (found)
InvisibilitySettingArray[i] = pEntity;
}
}
void CTheScripts::UndoBuildingSwaps()
{
for (int i = 0; i < MAX_NUM_BUILDING_SWAPS; i++) {
if (BuildingSwapArray[i].m_pBuilding) {
BuildingSwapArray[i].m_pBuilding->ReplaceWithNewModel(BuildingSwapArray[i].m_nOldModel);
BuildingSwapArray[i].m_pBuilding = nil;
BuildingSwapArray[i].m_nOldModel = BuildingSwapArray[i].m_nNewModel = -1;
}
}
}
void CTheScripts::UndoEntityInvisibilitySettings()
{
for (int i = 0; i < MAX_NUM_INVISIBILITY_SETTINGS; i++) {
if (InvisibilitySettingArray[i]) {
InvisibilitySettingArray[i]->bIsVisible = true;
InvisibilitySettingArray[i] = nil;
}
}
}

View File

@ -17,147 +17,6 @@
#include "World.h"
#include "main.h"
int32 CTheScripts::GetNewUniqueScriptSphereIndex(int32 index)
{
if (ScriptSphereArray[index].m_Index >= UINT16_MAX - 1)
ScriptSphereArray[index].m_Index = 1;
else
ScriptSphereArray[index].m_Index++;
return (uint16)index | ScriptSphereArray[index].m_Index << 16;
}
int32 CTheScripts::GetActualScriptSphereIndex(int32 index)
{
if (index == -1)
return -1;
uint16 check = (uint32)index >> 16;
uint16 array_idx = index & (0xFFFF);
script_assert(array_idx < ARRAY_SIZE(ScriptSphereArray));
if (check != ScriptSphereArray[array_idx].m_Index)
return -1;
return array_idx;
}
void CTheScripts::DrawScriptSpheres()
{
for (int i = 0; i < MAX_NUM_SCRIPT_SPHERES; i++) {
if (ScriptSphereArray[i].m_bInUse)
C3dMarkers::PlaceMarkerSet(ScriptSphereArray[i].m_Id, MARKERTYPE_CYLINDER, ScriptSphereArray[i].m_vecCenter, ScriptSphereArray[i].m_fRadius,
SPHERE_MARKER_R, SPHERE_MARKER_G, SPHERE_MARKER_B, SPHERE_MARKER_A, SPHERE_MARKER_PULSE_PERIOD, SPHERE_MARKER_PULSE_FRACTION, 0);
}
}
int32 CTheScripts::AddScriptSphere(int32 id, CVector pos, float radius)
{
int16 i = 0;
for (i = 0; i < MAX_NUM_SCRIPT_SPHERES; i++) {
if (!ScriptSphereArray[i].m_bInUse)
break;
}
#ifdef FIX_BUGS
if (i == MAX_NUM_SCRIPT_SPHERES)
return -1;
#endif
ScriptSphereArray[i].m_bInUse = true;
ScriptSphereArray[i].m_Id = id;
ScriptSphereArray[i].m_vecCenter = pos;
ScriptSphereArray[i].m_fRadius = radius;
return GetNewUniqueScriptSphereIndex(i);
}
void CTheScripts::RemoveScriptSphere(int32 index)
{
index = GetActualScriptSphereIndex(index);
if (index == -1)
return;
ScriptSphereArray[index].m_bInUse = false;
ScriptSphereArray[index].m_Id = 0;
}
void CTheScripts::AddToBuildingSwapArray(CBuilding* pBuilding, int32 old_model, int32 new_model)
{
int i = 0;
bool found = false;
while (i < MAX_NUM_BUILDING_SWAPS && !found) {
if (BuildingSwapArray[i].m_pBuilding == pBuilding)
found = true;
else
i++;
}
if (found) {
if (BuildingSwapArray[i].m_nOldModel == new_model) {
BuildingSwapArray[i].m_pBuilding = nil;
BuildingSwapArray[i].m_nOldModel = BuildingSwapArray[i].m_nNewModel = -1;
}
else {
BuildingSwapArray[i].m_nNewModel = new_model;
}
}
else {
i = 0;
while (i < MAX_NUM_BUILDING_SWAPS && !found) {
if (BuildingSwapArray[i].m_pBuilding == nil)
found = true;
else
i++;
}
if (found) {
BuildingSwapArray[i].m_pBuilding = pBuilding;
BuildingSwapArray[i].m_nNewModel = new_model;
BuildingSwapArray[i].m_nOldModel = old_model;
}
}
}
void CTheScripts::AddToInvisibilitySwapArray(CEntity* pEntity, bool remove)
{
int i = 0;
bool found = false;
while (i < MAX_NUM_INVISIBILITY_SETTINGS && !found) {
if (InvisibilitySettingArray[i] == pEntity)
found = true;
else
i++;
}
if (found) {
if (remove)
InvisibilitySettingArray[i] = nil;
}
else if (!remove) {
i = 0;
while (i < MAX_NUM_INVISIBILITY_SETTINGS && !found) {
if (InvisibilitySettingArray[i] == nil)
found = true;
else
i++;
}
if (found)
InvisibilitySettingArray[i] = pEntity;
}
}
void CTheScripts::UndoBuildingSwaps()
{
for (int i = 0; i < MAX_NUM_BUILDING_SWAPS; i++) {
if (BuildingSwapArray[i].m_pBuilding) {
BuildingSwapArray[i].m_pBuilding->ReplaceWithNewModel(BuildingSwapArray[i].m_nOldModel);
BuildingSwapArray[i].m_pBuilding = nil;
BuildingSwapArray[i].m_nOldModel = BuildingSwapArray[i].m_nNewModel = -1;
}
}
}
void CTheScripts::UndoEntityInvisibilitySettings()
{
for (int i = 0; i < MAX_NUM_INVISIBILITY_SETTINGS; i++) {
if (InvisibilitySettingArray[i]) {
InvisibilitySettingArray[i]->bIsVisible = true;
InvisibilitySettingArray[i] = nil;
}
}
}
void CRunningScript::UpdateCompareFlag(bool flag)
{
if (m_bNotFlag)