Split itemaction key pushing to separate function
This commit is contained in:
+120
-112
@@ -40,6 +40,8 @@ static int doorganize_core(struct obj *);
|
|||||||
static char obj_to_let(struct obj *);
|
static char obj_to_let(struct obj *);
|
||||||
static boolean item_naming_classification(struct obj *, char *, char *);
|
static boolean item_naming_classification(struct obj *, char *, char *);
|
||||||
static int item_reading_classification(struct obj *, char *);
|
static int item_reading_classification(struct obj *, char *);
|
||||||
|
static void ia_addmenu(winid, int, char, const char *);
|
||||||
|
static void itemactions_pushkeys(struct obj *, int);
|
||||||
static void mime_action(const char *);
|
static void mime_action(const char *);
|
||||||
|
|
||||||
/* enum and structs are defined in wintype.h */
|
/* enum and structs are defined in wintype.h */
|
||||||
@@ -2731,6 +2733,123 @@ ia_addmenu(winid win, int act, char let, const char *txt)
|
|||||||
ATR_NONE, clr, txt, MENU_ITEMFLAGS_NONE);
|
ATR_NONE, clr, txt, MENU_ITEMFLAGS_NONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
itemactions_pushkeys(struct obj *otmp, int act)
|
||||||
|
{
|
||||||
|
switch (act) {
|
||||||
|
default:
|
||||||
|
impossible("Unknown item action");
|
||||||
|
case IA_NONE:
|
||||||
|
break;
|
||||||
|
case IA_UNWIELD:
|
||||||
|
cmdq_add_ec(CQ_CANNED, (otmp == uwep) ? dowield
|
||||||
|
: (otmp == uswapwep) ? remarm_swapwep
|
||||||
|
: (otmp == uquiver) ? dowieldquiver
|
||||||
|
: donull); /* can't happen */
|
||||||
|
cmdq_add_key(CQ_CANNED, '-');
|
||||||
|
break;
|
||||||
|
case IA_APPLY_OBJ:
|
||||||
|
cmdq_add_ec(CQ_CANNED, doapply);
|
||||||
|
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
||||||
|
break;
|
||||||
|
case IA_DIP_OBJ:
|
||||||
|
/* #altdip instead of normal #dip - takes potion to dip into
|
||||||
|
first (the inventory item instigating this) and item to
|
||||||
|
be dipped second, also ignores floor features such as
|
||||||
|
fountain/sink so we don't need to force m-prefix here */
|
||||||
|
cmdq_add_ec(CQ_CANNED, dip_into);
|
||||||
|
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
||||||
|
break;
|
||||||
|
case IA_NAME_OBJ:
|
||||||
|
case IA_NAME_OTYP:
|
||||||
|
cmdq_add_ec(CQ_CANNED, docallcmd);
|
||||||
|
cmdq_add_key(CQ_CANNED, (act == IA_NAME_OBJ) ? 'i' : 'o');
|
||||||
|
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
||||||
|
break;
|
||||||
|
case IA_DROP_OBJ:
|
||||||
|
cmdq_add_ec(CQ_CANNED, dodrop);
|
||||||
|
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
||||||
|
break;
|
||||||
|
case IA_EAT_OBJ:
|
||||||
|
/* start with m-prefix; for #eat, it means ignore floor food
|
||||||
|
if present and eat food from invent */
|
||||||
|
cmdq_add_ec(CQ_CANNED, do_reqmenu);
|
||||||
|
cmdq_add_ec(CQ_CANNED, doeat);
|
||||||
|
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
||||||
|
break;
|
||||||
|
case IA_ENGRAVE_OBJ:
|
||||||
|
cmdq_add_ec(CQ_CANNED, doengrave);
|
||||||
|
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
||||||
|
break;
|
||||||
|
case IA_ADJUST_OBJ:
|
||||||
|
cmdq_add_ec(CQ_CANNED, doorganize); /* #adjust */
|
||||||
|
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
||||||
|
break;
|
||||||
|
case IA_ADJUST_STACK:
|
||||||
|
cmdq_add_ec(CQ_CANNED, adjust_split); /* #altadjust */
|
||||||
|
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
||||||
|
break;
|
||||||
|
case IA_SACRIFICE:
|
||||||
|
cmdq_add_ec(CQ_CANNED, dosacrifice);
|
||||||
|
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
||||||
|
break;
|
||||||
|
case IA_BUY_OBJ:
|
||||||
|
cmdq_add_ec(CQ_CANNED, dopay);
|
||||||
|
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
||||||
|
break;
|
||||||
|
case IA_QUAFF_OBJ:
|
||||||
|
/* start with m-prefix; for #quaff, it means ignore fountain
|
||||||
|
or sink if present and drink a potion from invent */
|
||||||
|
cmdq_add_ec(CQ_CANNED, do_reqmenu);
|
||||||
|
cmdq_add_ec(CQ_CANNED, dodrink);
|
||||||
|
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
||||||
|
break;
|
||||||
|
case IA_QUIVER_OBJ:
|
||||||
|
cmdq_add_ec(CQ_CANNED, dowieldquiver);
|
||||||
|
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
||||||
|
break;
|
||||||
|
case IA_READ_OBJ:
|
||||||
|
cmdq_add_ec(CQ_CANNED, doread);
|
||||||
|
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
||||||
|
break;
|
||||||
|
case IA_RUB_OBJ:
|
||||||
|
cmdq_add_ec(CQ_CANNED, dorub);
|
||||||
|
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
||||||
|
break;
|
||||||
|
case IA_THROW_OBJ:
|
||||||
|
cmdq_add_ec(CQ_CANNED, dothrow);
|
||||||
|
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
||||||
|
break;
|
||||||
|
case IA_TAKEOFF_OBJ:
|
||||||
|
cmdq_add_ec(CQ_CANNED, dotakeoff);
|
||||||
|
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
||||||
|
break;
|
||||||
|
case IA_TIP_CONTAINER:
|
||||||
|
cmdq_add_ec(CQ_CANNED, dotip);
|
||||||
|
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
||||||
|
break;
|
||||||
|
case IA_INVOKE_OBJ:
|
||||||
|
cmdq_add_ec(CQ_CANNED, doinvoke);
|
||||||
|
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
||||||
|
break;
|
||||||
|
case IA_WIELD_OBJ:
|
||||||
|
cmdq_add_ec(CQ_CANNED, dowield);
|
||||||
|
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
||||||
|
break;
|
||||||
|
case IA_WEAR_OBJ:
|
||||||
|
cmdq_add_ec(CQ_CANNED, dowear);
|
||||||
|
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
||||||
|
break;
|
||||||
|
case IA_SWAPWEAPON:
|
||||||
|
cmdq_add_ec(CQ_CANNED, doswapweapon);
|
||||||
|
break;
|
||||||
|
case IA_ZAP_OBJ:
|
||||||
|
cmdq_add_ec(CQ_CANNED, dozap);
|
||||||
|
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Show menu of possible actions hero could do with item otmp */
|
/* Show menu of possible actions hero could do with item otmp */
|
||||||
static int
|
static int
|
||||||
itemactions(struct obj *otmp)
|
itemactions(struct obj *otmp)
|
||||||
@@ -3025,118 +3144,7 @@ itemactions(struct obj *otmp)
|
|||||||
act = selected[0].item.a_int;
|
act = selected[0].item.a_int;
|
||||||
free((genericptr_t) selected);
|
free((genericptr_t) selected);
|
||||||
|
|
||||||
switch (act) {
|
itemactions_pushkeys(otmp, act);
|
||||||
default:
|
|
||||||
impossible("Unknown item action");
|
|
||||||
case IA_NONE:
|
|
||||||
break;
|
|
||||||
case IA_UNWIELD:
|
|
||||||
cmdq_add_ec(CQ_CANNED, (otmp == uwep) ? dowield
|
|
||||||
: (otmp == uswapwep) ? remarm_swapwep
|
|
||||||
: (otmp == uquiver) ? dowieldquiver
|
|
||||||
: donull); /* can't happen */
|
|
||||||
cmdq_add_key(CQ_CANNED, '-');
|
|
||||||
break;
|
|
||||||
case IA_APPLY_OBJ:
|
|
||||||
cmdq_add_ec(CQ_CANNED, doapply);
|
|
||||||
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
|
||||||
break;
|
|
||||||
case IA_DIP_OBJ:
|
|
||||||
/* #altdip instead of normal #dip - takes potion to dip into
|
|
||||||
first (the inventory item instigating this) and item to
|
|
||||||
be dipped second, also ignores floor features such as
|
|
||||||
fountain/sink so we don't need to force m-prefix here */
|
|
||||||
cmdq_add_ec(CQ_CANNED, dip_into);
|
|
||||||
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
|
||||||
break;
|
|
||||||
case IA_NAME_OBJ:
|
|
||||||
case IA_NAME_OTYP:
|
|
||||||
cmdq_add_ec(CQ_CANNED, docallcmd);
|
|
||||||
cmdq_add_key(CQ_CANNED, (act == IA_NAME_OBJ) ? 'i' : 'o');
|
|
||||||
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
|
||||||
break;
|
|
||||||
case IA_DROP_OBJ:
|
|
||||||
cmdq_add_ec(CQ_CANNED, dodrop);
|
|
||||||
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
|
||||||
break;
|
|
||||||
case IA_EAT_OBJ:
|
|
||||||
/* start with m-prefix; for #eat, it means ignore floor food
|
|
||||||
if present and eat food from invent */
|
|
||||||
cmdq_add_ec(CQ_CANNED, do_reqmenu);
|
|
||||||
cmdq_add_ec(CQ_CANNED, doeat);
|
|
||||||
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
|
||||||
break;
|
|
||||||
case IA_ENGRAVE_OBJ:
|
|
||||||
cmdq_add_ec(CQ_CANNED, doengrave);
|
|
||||||
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
|
||||||
break;
|
|
||||||
case IA_ADJUST_OBJ:
|
|
||||||
cmdq_add_ec(CQ_CANNED, doorganize); /* #adjust */
|
|
||||||
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
|
||||||
break;
|
|
||||||
case IA_ADJUST_STACK:
|
|
||||||
cmdq_add_ec(CQ_CANNED, adjust_split); /* #altadjust */
|
|
||||||
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
|
||||||
break;
|
|
||||||
case IA_SACRIFICE:
|
|
||||||
cmdq_add_ec(CQ_CANNED, dosacrifice);
|
|
||||||
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
|
||||||
break;
|
|
||||||
case IA_BUY_OBJ:
|
|
||||||
cmdq_add_ec(CQ_CANNED, dopay);
|
|
||||||
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
|
||||||
break;
|
|
||||||
case IA_QUAFF_OBJ:
|
|
||||||
/* start with m-prefix; for #quaff, it means ignore fountain
|
|
||||||
or sink if present and drink a potion from invent */
|
|
||||||
cmdq_add_ec(CQ_CANNED, do_reqmenu);
|
|
||||||
cmdq_add_ec(CQ_CANNED, dodrink);
|
|
||||||
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
|
||||||
break;
|
|
||||||
case IA_QUIVER_OBJ:
|
|
||||||
cmdq_add_ec(CQ_CANNED, dowieldquiver);
|
|
||||||
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
|
||||||
break;
|
|
||||||
case IA_READ_OBJ:
|
|
||||||
cmdq_add_ec(CQ_CANNED, doread);
|
|
||||||
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
|
||||||
break;
|
|
||||||
case IA_RUB_OBJ:
|
|
||||||
cmdq_add_ec(CQ_CANNED, dorub);
|
|
||||||
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
|
||||||
break;
|
|
||||||
case IA_THROW_OBJ:
|
|
||||||
cmdq_add_ec(CQ_CANNED, dothrow);
|
|
||||||
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
|
||||||
break;
|
|
||||||
case IA_TAKEOFF_OBJ:
|
|
||||||
cmdq_add_ec(CQ_CANNED, dotakeoff);
|
|
||||||
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
|
||||||
break;
|
|
||||||
case IA_TIP_CONTAINER:
|
|
||||||
cmdq_add_ec(CQ_CANNED, dotip);
|
|
||||||
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
|
||||||
break;
|
|
||||||
case IA_INVOKE_OBJ:
|
|
||||||
cmdq_add_ec(CQ_CANNED, doinvoke);
|
|
||||||
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
|
||||||
break;
|
|
||||||
case IA_WIELD_OBJ:
|
|
||||||
cmdq_add_ec(CQ_CANNED, dowield);
|
|
||||||
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
|
||||||
break;
|
|
||||||
case IA_WEAR_OBJ:
|
|
||||||
cmdq_add_ec(CQ_CANNED, dowear);
|
|
||||||
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
|
||||||
break;
|
|
||||||
case IA_SWAPWEAPON:
|
|
||||||
cmdq_add_ec(CQ_CANNED, doswapweapon);
|
|
||||||
break;
|
|
||||||
case IA_ZAP_OBJ:
|
|
||||||
cmdq_add_ec(CQ_CANNED, dozap);
|
|
||||||
cmdq_add_key(CQ_CANNED, otmp->invlet);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
destroy_nhwindow(win);
|
destroy_nhwindow(win);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user