| 4913 | } |
| 4914 | |
| 4915 | staticfn int |
| 4916 | domouseaction(void) |
| 4917 | { |
| 4918 | coordxy x, y; |
| 4919 | struct obj *o; |
| 4920 | int dir; |
| 4921 | |
| 4922 | x = gc.clicklook_cc.x - u.ux; |
| 4923 | y = gc.clicklook_cc.y - u.uy; |
| 4924 | |
| 4925 | if (flags.travelcmd) { |
| 4926 | if (abs(x) <= 1 && abs(y) <= 1) { |
| 4927 | x = sgn(x), y = sgn(y); |
| 4928 | } else { |
| 4929 | iflags.travelcc.x = u.tx = u.ux + x; |
| 4930 | iflags.travelcc.y = u.ty = u.uy + y; |
| 4931 | cmdq_add_ec(CQ_CANNED, dotravel_target); |
| 4932 | return ECMD_OK; |
| 4933 | } |
| 4934 | |
| 4935 | if (x == 0 && y == 0) { |
| 4936 | /* here */ |
| 4937 | if (IS_FOUNTAIN(levl[u.ux][u.uy].typ) |
| 4938 | || IS_SINK(levl[u.ux][u.uy].typ)) { |
| 4939 | cmdq_add_ec(CQ_CANNED, dodrink); |
| 4940 | return ECMD_OK; |
| 4941 | } else if (IS_THRONE(levl[u.ux][u.uy].typ)) { |
| 4942 | cmdq_add_ec(CQ_CANNED, dosit); |
| 4943 | return ECMD_OK; |
| 4944 | } else if (On_stairs_up(u.ux, u.uy)) { |
| 4945 | cmdq_add_ec(CQ_CANNED, doup); |
| 4946 | return ECMD_OK; |
| 4947 | } else if (On_stairs_dn(u.ux, u.uy)) { |
| 4948 | cmdq_add_ec(CQ_CANNED, dodown); |
| 4949 | return ECMD_OK; |
| 4950 | } else if ((o = vobj_at(u.ux, u.uy)) != 0) { |
| 4951 | cmdq_add_ec(CQ_CANNED, Is_container(o) ? doloot : dopickup); |
| 4952 | return ECMD_OK; |
| 4953 | } else { |
| 4954 | cmdq_add_ec(CQ_CANNED, donull); /* just rest */ |
| 4955 | return ECMD_OK; |
| 4956 | } |
| 4957 | } |
| 4958 | |
| 4959 | /* directional commands */ |
| 4960 | |
| 4961 | dir = xytodir(x, y); |
| 4962 | if (!m_at(u.ux + x, u.uy + y) |
| 4963 | && !test_move(u.ux, u.uy, x, y, TEST_MOVE)) { |
| 4964 | if (IS_DOOR(levl[u.ux + x][u.uy + y].typ)) { |
| 4965 | /* slight assistance to player: choose kick/open for them */ |
| 4966 | if (levl[u.ux + x][u.uy + y].doormask & D_LOCKED) { |
| 4967 | cmdq_add_ec(CQ_CANNED, dokick); |
| 4968 | return ECMD_OK; |
| 4969 | } |
| 4970 | if (levl[u.ux + x][u.uy + y].doormask & D_CLOSED) { |
| 4971 | cmdq_add_ec(CQ_CANNED, doopen); |
| 4972 | return ECMD_OK; |
nothing calls this directly
no test coverage detected