/** * Set actor hidden status to true. * For a moving actor, actually hide it. * @param ano Actor Id */ void HideActor(CORO_PARAM, int ano) { PMOVER pMover; assert((ano > 0 && ano <= NumActors) || ano == LEAD_ACTOR); // illegal actor CORO_BEGIN_CONTEXT; CORO_END_CONTEXT(_ctx); CORO_BEGIN_CODE(_ctx); if (TinselV2) { actorInfo[ano - 1].bHidden = true; // Send event to tagged actors // (this is duplicated in HideMover()) if (IsTaggedActor(ano)) { CORO_INVOKE_ARGS(ActorEvent, (CORO_SUBCTX, ano, HIDEEVENT, true, 0)); // It may be pointed to SetActorPointedTo(ano, false); SetActorTagWanted(ano, false, false, 0); } } // Get moving actor involved pMover = GetMover(ano); if (pMover) HideMover(pMover, 0); else if (!TinselV2) actorInfo[ano - 1].bHidden = true; CORO_END_CODE; }
/** * Stand all the moving actors at their saved positions. * Not called from the foreground. */ static void SortMAProcess(CORO_PARAM, const void *) { CORO_BEGIN_CONTEXT; int i; int viaActor; CORO_END_CONTEXT(_ctx); CORO_BEGIN_CODE(_ctx); // Disable via actor for the stands _ctx->viaActor = SysVar(ISV_DIVERT_ACTOR); SetSysVar(ISV_DIVERT_ACTOR, 0); RestoreAuxScales(rsd->SavedMoverInfo); for (_ctx->i = 0; _ctx->i < MAX_MOVERS; _ctx->i++) { if (rsd->SavedMoverInfo[_ctx->i].bActive) { CORO_INVOKE_ARGS(Stand, (CORO_SUBCTX, rsd->SavedMoverInfo[_ctx->i].actorID, rsd->SavedMoverInfo[_ctx->i].objX, rsd->SavedMoverInfo[_ctx->i].objY, rsd->SavedMoverInfo[_ctx->i].hLastfilm)); if (rsd->SavedMoverInfo[_ctx->i].bHidden) HideMover(GetMover(rsd->SavedMoverInfo[_ctx->i].actorID)); } ActorPalette(rsd->SavedMoverInfo[_ctx->i].actorID, rsd->SavedMoverInfo[_ctx->i].startColour, rsd->SavedMoverInfo[_ctx->i].paletteLength); if (rsd->SavedMoverInfo[_ctx->i].brightness != BOGUS_BRIGHTNESS) ActorBrightness(rsd->SavedMoverInfo[_ctx->i].actorID, rsd->SavedMoverInfo[_ctx->i].brightness); } // Restore via actor SetSysVar(ISV_DIVERT_ACTOR, _ctx->viaActor); bNotDoneYet = false; CORO_END_CODE; }
/** * Shows the given actor */ void ShowActor(CORO_PARAM, int ano) { PMOVER pMover; RANGE_CHECK(ano); CORO_BEGIN_CONTEXT; CORO_END_CONTEXT(_ctx); CORO_BEGIN_CODE(_ctx); // reset hidden flag actorInfo[ano - 1].bHidden = false; // Send event to tagged actors if (IsTaggedActor(ano)) CORO_INVOKE_ARGS(ActorEvent, (CORO_SUBCTX, ano, SHOWEVENT, true, 0)); // If moving actor involved, un-hide it pMover = GetMover(ano); if (pMover) UnHideMover(pMover); CORO_END_CODE; }