mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-11 15:21:51 +00:00
Merge branch 'canraise' of https://github.com/GitExl/zdoom
Conflicts: src/p_acs.cpp
This commit is contained in:
commit
81076abba2
3 changed files with 56 additions and 0 deletions
|
@ -4374,6 +4374,7 @@ enum EACSFunctions
|
||||||
ACSF_DropInventory,
|
ACSF_DropInventory,
|
||||||
ACSF_PickActor,
|
ACSF_PickActor,
|
||||||
ACSF_IsPointerEqual,
|
ACSF_IsPointerEqual,
|
||||||
|
ACSF_CanRaiseActor,
|
||||||
|
|
||||||
/* Zandronum's - these must be skipped when we reach 99!
|
/* Zandronum's - these must be skipped when we reach 99!
|
||||||
-100:ResetMap(0),
|
-100:ResetMap(0),
|
||||||
|
@ -5647,6 +5648,26 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case ACSF_CanRaiseActor:
|
||||||
|
if (argCount >= 1) {
|
||||||
|
if (args[0] == 0) {
|
||||||
|
actor = SingleActorFromTID(args[0], activator);
|
||||||
|
if (actor != NULL) {
|
||||||
|
return P_Thing_CanRaise(actor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FActorIterator iterator(args[0]);
|
||||||
|
bool canraiseall = false;
|
||||||
|
while ((actor = iterator.Next()))
|
||||||
|
{
|
||||||
|
canraiseall = !P_Thing_CanRaise(actor) | canraiseall;
|
||||||
|
}
|
||||||
|
|
||||||
|
return !canraiseall;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -171,6 +171,7 @@ int P_Thing_Damage (int tid, AActor *whofor0, int amount, FName type);
|
||||||
void P_Thing_SetVelocity(AActor *actor, fixed_t vx, fixed_t vy, fixed_t vz, bool add, bool setbob);
|
void P_Thing_SetVelocity(AActor *actor, fixed_t vx, fixed_t vy, fixed_t vz, bool add, bool setbob);
|
||||||
void P_RemoveThing(AActor * actor);
|
void P_RemoveThing(AActor * actor);
|
||||||
bool P_Thing_Raise(AActor *thing);
|
bool P_Thing_Raise(AActor *thing);
|
||||||
|
bool P_Thing_CanRaise(AActor *thing);
|
||||||
const PClass *P_GetSpawnableType(int spawnnum);
|
const PClass *P_GetSpawnableType(int spawnnum);
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
@ -445,6 +445,40 @@ bool P_Thing_Raise(AActor *thing)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool P_Thing_CanRaise(AActor *thing)
|
||||||
|
{
|
||||||
|
FState * RaiseState = thing->GetRaiseState();
|
||||||
|
if (RaiseState == NULL)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
AActor *info = thing->GetDefault();
|
||||||
|
|
||||||
|
// Check against real height and radius
|
||||||
|
int oldflags = thing->flags;
|
||||||
|
fixed_t oldheight = thing->height;
|
||||||
|
fixed_t oldradius = thing->radius;
|
||||||
|
|
||||||
|
thing->flags |= MF_SOLID;
|
||||||
|
thing->height = info->height;
|
||||||
|
thing->radius = info->radius;
|
||||||
|
|
||||||
|
bool check = P_CheckPosition (thing, thing->x, thing->y);
|
||||||
|
|
||||||
|
// Restore checked properties
|
||||||
|
thing->flags = oldflags;
|
||||||
|
thing->radius = oldradius;
|
||||||
|
thing->height = oldheight;
|
||||||
|
|
||||||
|
if (!check)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void P_Thing_SetVelocity(AActor *actor, fixed_t vx, fixed_t vy, fixed_t vz, bool add, bool setbob)
|
void P_Thing_SetVelocity(AActor *actor, fixed_t vx, fixed_t vy, fixed_t vz, bool add, bool setbob)
|
||||||
{
|
{
|
||||||
if (actor != NULL)
|
if (actor != NULL)
|
||||||
|
|
Loading…
Reference in a new issue