//-----------------
//GLOBAL FUNCTIONS:
//-----------------
function SwitchCamera takes integer CameraNumber returns nothing
local real CameraFieldOfView
local real CameraFarZ
if (CameraNumber == 0) then //Deactivated
set udg_PlayerEvent = "Deactivated"
return
elseif (CameraNumber == 1) then //Player
set udg_CameraAngle = 341.12
set udg_CameraDistance = 200.00
set udg_CameraHightOffset = 75.00
set CameraFieldOfView = 500.00
set CameraFarZ = 5000.00
elseif (CameraNumber == 2) then //Player 2
set udg_CameraAngle = 328.12
set udg_CameraDistance = 700.00
set udg_CameraHightOffset = 200.00
set CameraFieldOfView = 2000.00
set CameraFarZ = 5000.00
elseif (CameraNumber == 3) then //Player Charge
set udg_CameraAngle = 328.12
set udg_CameraDistance = 350.00
set udg_CameraHightOffset = 100.00
set CameraFieldOfView = 750.00
set CameraFarZ = 5000.00
elseif (CameraNumber == 4) then //Player Labyrinth
set udg_CameraAngle = 334.84
set udg_CameraDistance = 120.00
set udg_CameraHightOffset = 100.00
set CameraFieldOfView = 500.00
set CameraFarZ = 7320.50
elseif (CameraNumber == 5) then //Player Final
set udg_CameraAngle = 341.12
set udg_CameraDistance = 200.00
set udg_CameraHightOffset = 75.00
set CameraFieldOfView = 500.00
set CameraFarZ = 5000.00
else
call DisplayTextToPlayer(Player(3 - 1), 0, 0, "ERROR: Wrong camera switch usage")
return
endif
set udg_Hero = udg_Hero
if (GetLocalPlayer() == Player(3 - 1)) then
// Use only local code (no net traffic) within this block to avoid desyncs.
call SetCameraTargetController(udg_Hero, 0, 0, true)
call SetCameraField(CAMERA_FIELD_ROTATION, GetUnitFacing(udg_Hero), 0.25)
call SetCameraField(CAMERA_FIELD_TARGET_DISTANCE, udg_CameraDistance, 0.25)
call SetCameraField(CAMERA_FIELD_ANGLE_OF_ATTACK, udg_CameraAngle, 0.25)
call SetCameraField(CAMERA_FIELD_ZOFFSET, udg_CameraHightOffset, 0.25)
call SetCameraField(CAMERA_FIELD_FARZ, CameraFarZ, 0.25)
call SetCameraField(CAMERA_FIELD_FIELD_OF_VIEW, CameraFieldOfView, 0.25)
endif
set udg_PlayerEvent = "Normal"
endfunction
Name | Type | is_array | initial_value |
AngleCorrectionValue | real | No | 75.00 |
AngleOfAttackAdjustmentValue | real | No | 0.35 |
Armless | boolean | No | |
BlockOn | boolean | No | |
Breakthrough | boolean | No | |
CameraAngle | real | No | |
CameraDistance | real | No | |
CameraHightOffset | real | No | |
CaveQ | quest | No | |
ChangingRate | real | No | 4.00 |
CinematicSkipped | boolean | No | |
EternalFire | effect | No | |
HashTable | hashtable | No | |
Hero | unit | No | |
KB_Angle | real | Yes | |
KB_Casters | unit | Yes | |
KB_CountBuffs | integer | No | |
KB_DestroyTrees | boolean | Yes | |
KB_EffectCounter | integer | Yes | |
KB_EffectCounter2 | integer | Yes | |
KB_Effects_1 | string | Yes | |
KB_Effects_2 | string | Yes | |
KB_GeneralIntegers | integervar | Yes | |
KB_KnockbackedUnits | group | No | |
KB_Levels | integer | Yes | |
KB_MaxDistance | real | Yes | |
KB_ReachedDistance | real | Yes | |
KB_ReducedReal | real | No | |
KB_ReduceSpeedReal | real | Yes | |
KB_SpecificSpeed | real | Yes | |
KB_StartPositions | location | Yes | |
KB_TempPoint | location | Yes | |
KB_TempReal | real | No | |
KB_TotalKnockUnits | integer | No | |
KB_Units | unit | Yes | |
KBA_Caster | unit | No | |
KBA_DestroyTrees | boolean | No | |
KBA_DistancePerLevel | real | No | |
KBA_Level | integer | No | |
KBA_SpecialEffects | string | Yes | |
KBA_Speed | real | No | |
KBA_StartingPosition | location | No | |
KBA_TargetUnit | unit | No | |
PlayerEvent | string | No | |
Points | location | Yes | |
QTaken | boolean | No | |
Raged | boolean | No | |
RequiredQuest | quest | No | |
Spirit | unit | No | |
SpiritDead | boolean | No | |
TimerFrequency_CAS | real | No | 0.04 |
TimerFrequency_CHS | real | No | 0.10 |
TrainFiercefulCharge | boolean | No | |
TrainSpinningStrike | boolean | No | |
UnitGroup | group | No | |
Weapon | boolean | No | |
Weapon1 | boolean | No | |
Weapon2 | boolean | No | |
Weapon3 | boolean | No | |
Weapon4 | boolean | No | |
Weapon5 | boolean | No | |
WolfTailQ | quest | No | |
zEternalFire | unit | No |
//---------------------
//EVENT-TRIGGERED PART:
//---------------------
function CameraHightAdjustment takes nothing returns nothing
local location PointTemp1
if (udg_PlayerEvent == "Normal") then
set PointTemp1 = GetUnitLoc(udg_Hero)
if (GetLocalPlayer() == Player(3 - 1)) then
// Use only local code (no net traffic) within this block to avoid desyncs.
call SetCameraField(CAMERA_FIELD_ZOFFSET, GetCameraField(CAMERA_FIELD_ZOFFSET) + GetLocationZ(PointTemp1) + udg_CameraHightOffset - GetCameraTargetPositionZ(), udg_TimerFrequency_CHS)
endif
call RemoveLocation(PointTemp1)
endif
//Anti-Memory-Leak:
set PointTemp1 = null
endfunction
//===========================================================================
function InitTrig_CameraHightSystem takes nothing returns nothing
set gg_trg_CameraHightSystem = CreateTrigger()
//Triggers:
call TriggerRegisterTimerEvent(gg_trg_CameraHightSystem, udg_TimerFrequency_CHS, true)
//Actions:
call TriggerAddAction(gg_trg_CameraHightSystem, function CameraHightAdjustment)
endfunction
//---------------------
//EVENT TRIGGERED PART:
//---------------------
function AngleAdjustment takes nothing returns nothing
local location LocationTemp1
local location LocationTemp2
local real RealTemp1
local real RealTemp2
local real RealTemp3
if (udg_PlayerEvent == "Normal") then
call SetCameraField(CAMERA_FIELD_ROTATION, GetUnitFacing(udg_Hero), 0.10)
//Camera angle correction:
set RealTemp1 = GetUnitFacing(udg_Hero)
if (RealTemp1 <= 270.00 and RealTemp1 >= 90.00) then
set RealTemp1 = 270.00 - RealTemp1
elseif (RealTemp1 >= 270.00 and RealTemp1 <= 360.00) then
set RealTemp1 = RealTemp1 - 270.00
elseif (RealTemp1 >= 0.00 and RealTemp1 <= 90.00) then
set RealTemp1 = RealTemp1 + 90.00
endif
set RealTemp1 = udg_AngleCorrectionValue * (RealTemp1 / 180.00)
if (GetLocalPlayer() == Player(3 - 1)) then
// Use only local code (no net traffic) within this block to avoid desyncs.
call SetCameraField(CAMERA_FIELD_TARGET_DISTANCE, udg_CameraDistance + RealTemp1, udg_TimerFrequency_CAS)
endif
//Camera angle of attack adjustment:
set LocationTemp1 = GetUnitLoc(udg_Hero)
if (GetLocalPlayer() == Player(3 - 1)) then
// Use only local code (no net traffic) within this block to avoid desyncs.
set RealTemp1 = GetUnitFacing(udg_Hero) - 180.00
if (RealTemp1 < 0.00) then
set RealTemp1 = RealTemp1 + 360.00
endif
set RealTemp3 = udg_CameraDistance * (udg_AngleOfAttackAdjustmentValue - udg_CameraDistance * 0.0001)
set RealTemp2 = Cos(360.00 * bj_DEGTORAD - GetCameraField(CAMERA_FIELD_ANGLE_OF_ATTACK)) * (udg_CameraDistance - RealTemp3)
set LocationTemp2 = Location(GetLocationX(LocationTemp1) + RealTemp2 * Cos(RealTemp1 * bj_DEGTORAD), GetLocationY(LocationTemp1) + RealTemp2 * Sin(RealTemp1 * bj_DEGTORAD))
set RealTemp1 = Sin(360.00 * bj_DEGTORAD - GetCameraField(CAMERA_FIELD_ANGLE_OF_ATTACK)) * (udg_CameraDistance - RealTemp3) - (GetLocationZ(LocationTemp2) - GetLocationZ(LocationTemp1))
if (10.00 >= RealTemp1) then
call SetCameraField(CAMERA_FIELD_ANGLE_OF_ATTACK, GetCameraField(CAMERA_FIELD_ANGLE_OF_ATTACK) * bj_RADTODEG - udg_ChangingRate, udg_TimerFrequency_CAS)
elseif (50.00 <= RealTemp1 and GetCameraField(CAMERA_FIELD_ANGLE_OF_ATTACK) * bj_RADTODEG + udg_ChangingRate <= udg_CameraAngle) then
call SetCameraField(CAMERA_FIELD_ANGLE_OF_ATTACK, GetCameraField(CAMERA_FIELD_ANGLE_OF_ATTACK) * bj_RADTODEG + udg_ChangingRate, udg_TimerFrequency_CAS)
endif
endif
call RemoveLocation(LocationTemp1)
call RemoveLocation(LocationTemp2)
endif
//Anti-Memory-Leak:
set LocationTemp1 = null
set LocationTemp2 = null
endfunction
//===========================================================================
function InitTrig_CameraAngleSystem takes nothing returns nothing
set gg_trg_CameraAngleSystem = CreateTrigger()
//Triggers:
call TriggerRegisterTimerEvent(gg_trg_CameraAngleSystem, udg_TimerFrequency_CAS, true)
//Actions:
call TriggerAddAction(gg_trg_CameraAngleSystem, function AngleAdjustment)
endfunction