diff options
| author | savask <savask@yandex.ru> | 2011-08-10 16:32:10 (GMT) |
|---|---|---|
| committer | savask <savask@yandex.ru> | 2011-08-12 07:51:05 (GMT) |
| commit | 15dab3daadab6671771098c8145cb932dee917c2 (patch) | |
| tree | a7466ec6ea8a64ee8b4c62191a5d9218fe0c4995 /src/elements | |
| parent | 65c8e27538513bd87dcc89130e87f24aa359bbe1 (diff) | |
| download | powder-15dab3daadab6671771098c8145cb932dee917c2.zip powder-15dab3daadab6671771098c8145cb932dee917c2.tar.gz | |
Imporved walking in a gravity field.
Diffstat (limited to 'src/elements')
| -rw-r--r-- | src/elements/stkm.c | 39 |
1 files changed, 25 insertions, 14 deletions
diff --git a/src/elements/stkm.c b/src/elements/stkm.c index 4a706a5..28d9269 100644 --- a/src/elements/stkm.c +++ b/src/elements/stkm.c @@ -110,25 +110,34 @@ int run_stickman(float* playerp, UPDATE_FUNC_ARGS) { playerp[25] = 0; playerp[26] = 0; + float gx, gy, dl, dr; + + gx = (player[7] + player[15])/2 - gvy; + gy = (player[8] + player[16])/2 + gvx; + dl = pow(gx - player[7], 2) + pow(gy - player[8], 2); + dr = pow(gx - player[15], 2) + pow(gy - player[16], 2); + //Go left if (((int)(playerp[0])&0x01) == 0x01) { - if (playerp[7]>playerp[15]) + if (dl>dr) { if (!eval_move(PT_DUST, playerp[7], playerp[8], NULL)) { - playerp[21] = -3*gvy; - playerp[19] = -1*gvy; - playerp[22] = -3*gvy; + playerp[21] = -3*gvy-3*gvx; + playerp[22] = 3*gvx-3*gvy; + playerp[19] = -gvy; + playerp[20] = gvx; } } else { if (!eval_move(PT_DUST, playerp[15], playerp[16], NULL)) { - playerp[25] = -3*gvy; - playerp[19] = -1*gvy; - playerp[26] = -3*gvy; + playerp[25] = -3*gvy-3*gvx; + playerp[26] = 3*gvx-3*gvy; + playerp[19] = -gvy; + playerp[20] = gvx; } } } @@ -136,22 +145,24 @@ int run_stickman(float* playerp, UPDATE_FUNC_ARGS) { //Go right if (((int)(playerp[0])&0x02) == 0x02) { - if (playerp[7]<playerp[15]) + if (dl<dr) { if (!eval_move(PT_DUST, playerp[7], playerp[8], NULL)) { - playerp[21] = 3*gvy; - playerp[19] = 1*gvy; - playerp[22] = -3*gvy; + playerp[21] = 3*gvy-3*gvx; + playerp[22] = -3*gvx-3*gvy; + playerp[19] = gvy; + playerp[20] = -gvx; } } else { if (!eval_move(PT_DUST, playerp[15], playerp[16], NULL)) { - playerp[25] = 3*gvy; - playerp[19] = 1*gvy; - playerp[26] = -3*gvy; + playerp[25] = 3*gvy-3*gvx; + playerp[26] = -3*gvx-3*gvy; + playerp[19] = gvy; + playerp[20] = -gvx; } } } |
