/** * @brief Handles a keypress event. * * @param type Type of event. */ void ovr_key( int type ) { Uint32 t; t = SDL_GetTicks(); if (type > 0) { if (ovr_open) ovr_setOpen(0); else { ovr_setOpen(1); ovr_opened = t; /* Refresh overlay size. */ ovr_refresh(); } } else if (type < 0) { if (t - ovr_opened > 300) ovr_setOpen(0); } }
/** * @brief Actually applies a diff in XML node form. * * @param parent Node containing the diff information. * @return 0 on success. */ static int diff_patch( xmlNodePtr parent ) { int i, univ_update; UniDiff_t *diff; UniHunk_t *fail; xmlNodePtr node; char *target; /* Prepare it. */ diff = diff_newDiff(); memset(diff, 0, sizeof(UniDiff_t)); xmlr_attr(parent,"name",diff->name); /* Whether or not we need to update the universe. */ univ_update = 0; node = parent->xmlChildrenNode; do { xml_onlyNodes(node); if (xml_isNode(node,"system")) { univ_update = 1; diff_patchSystem( diff, node ); } else if (xml_isNode(node, "tech")) diff_patchTech( diff, node ); else if (xml_isNode(node, "asset")) { univ_update = 1; diff_patchAsset( diff, node ); } else if (xml_isNode(node, "faction")) { univ_update = 1; diff_patchFaction( diff, node ); } else WARN(_("Unidiff '%s' has unknown node '%s'."), diff->name, node->name); } while (xml_nextNode(node)); if (diff->nfailed > 0) { WARN(_("Unidiff '%s' failed to apply %d hunks."), diff->name, diff->nfailed); for (i=0; i<diff->nfailed; i++) { fail = &diff->failed[i]; target = fail->target.u.name; switch (fail->type) { case HUNK_TYPE_ASSET_ADD: WARN(_(" [%s] asset add: '%s'"), target, fail->u.name); break; case HUNK_TYPE_ASSET_REMOVE: WARN(_(" [%s] asset remove: '%s'"), target, fail->u.name); break; case HUNK_TYPE_ASSET_BLACKMARKET: WARN(_(" [%s] asset blackmarket: '%s'"), target, fail->u.name); break; case HUNK_TYPE_ASSET_LEGALMARKET: WARN(_(" [%s] asset legalmarket: '%s'"), target, fail->u.name); break; case HUNK_TYPE_JUMP_ADD: WARN(_(" [%s] jump add: '%s'"), target, fail->u.name); break; case HUNK_TYPE_JUMP_REMOVE: WARN(_(" [%s] jump remove: '%s'"), target, fail->u.name); break; case HUNK_TYPE_TECH_ADD: WARN(_(" [%s] tech add: '%s'"), target, fail->u.name ); break; case HUNK_TYPE_TECH_REMOVE: WARN(_(" [%s] tech remove: '%s'"), target, fail->u.name ); break; case HUNK_TYPE_ASSET_FACTION: WARN(_(" [%s] asset faction: '%s'"), target, fail->u.name ); break; case HUNK_TYPE_ASSET_FACTION_REMOVE: WARN(_(" [%s] asset faction removal: '%s'"), target, fail->u.name ); break; case HUNK_TYPE_FACTION_VISIBLE: WARN(_(" [%s] faction visible: '%s'"), target, fail->u.name ); break; case HUNK_TYPE_FACTION_INVISIBLE: WARN(_(" [%s] faction invisible: '%s'"), target, fail->u.name ); break; case HUNK_TYPE_FACTION_ALLY: WARN(_(" [%s] faction set ally: '%s'"), target, fail->u.name ); break; case HUNK_TYPE_FACTION_ENEMY: WARN(_(" [%s] faction set enemy: '%s'"), target, fail->u.name ); break; case HUNK_TYPE_FACTION_NEUTRAL: WARN(_(" [%s] faction set neutral: '%s'"), target, fail->u.name ); break; case HUNK_TYPE_FACTION_REALIGN: WARN(_(" [%s] faction alignment reset: '%s'"), target, fail->u.name ); break; default: WARN(_(" unknown hunk '%d'"), fail->type); break; } } } /* Prune presences if necessary. */ if (univ_update) space_reconstructPresences(); /* Update overlay map just in case. */ ovr_refresh(); return 0; }