Flag terrain fix

This commit is contained in:
ChocoTaco 2023-11-06 17:07:44 -05:00
parent cd6caeb67a
commit 4c656ec404

View file

@ -57,19 +57,25 @@ package flagFix{
activatePackage(flagFix); activatePackage(flagFix);
function DefaultGame::flagColTest(%game, %flag){ function DefaultGame::flagColTest(%game, %flag){
if( !%flag.isHome ){// keeps flags from getting stuck in ceilings //flag ceiling check
if( !%flag.isHome ){
%flag.stuckChkTimer += $flagSimTime; %flag.stuckChkTimer += $flagSimTime;
if(%flag.stuckChkTimer > $flagStuckTime){ if(%flag.stuckChkTimer > $flagStuckTime){ // rate limit are checks
%fpos = %flag.getPosition(); if(vectorLen(%flag.getVelocity()) < 2){ // only check if we are not at speed
%upRay = containerRayCast(%fpos, vectorAdd(%fpos,"0 0 2.4"), $TypeMasks::InteriorObjectType | $TypeMasks::StaticObjectType | $TypeMasks::ForceFieldObjectType, %flag); %fpos = %flag.getPosition();
if(%upRay){ //0.1 offset any fp errors with the flag position being at ground level, 2.4 offset flag height offset + some extra
%dist = vectorDist(%fpos,getWords(%upRay,1,3)); %upRay = containerRayCast(vectorAdd(%fpos,"0 0 0.1"), vectorAdd(%fpos,"0 0 2.4"), $TypeMasks::InteriorObjectType | $TypeMasks::StaticTSObjectType | $TypeMasks::ForceFieldObjectType, %flag);
//error(%dist); if(%upRay){
%flag.setPosition(vectorSub(%fpos,"0 0" SPC (2.5 - %dist))); %dist = vectorDist(%fpos,getWords(%upRay,1,3));
//error(%dist);
%flag.setPosition(vectorSub(%fpos,"0 0" SPC (2.5 - %dist)));
}
} }
%flag.stuckChkTimer = 0; %flag.stuckChkTimer = 0;
} }
} }
////////////////////////////////////////////////////////////////////////////////
//flag collision check
%Box2 = %flag.getWorldBox(); %Box2 = %flag.getWorldBox();
InitContainerRadiusSearch( %flag.getWorldBoxCenter(), $flagCheckRadius, $TypeMasks::PlayerObjectType); InitContainerRadiusSearch( %flag.getWorldBoxCenter(), $flagCheckRadius, $TypeMasks::PlayerObjectType);
while((%player = containerSearchNext()) != 0){ while((%player = containerSearchNext()) != 0){