summaryrefslogtreecommitdiff
path: root/src/elements
diff options
context:
space:
mode:
authorsavask <savask@yandex.ru>2011-08-10 16:32:10 (GMT)
committer savask <savask@yandex.ru>2011-08-12 07:51:05 (GMT)
commit15dab3daadab6671771098c8145cb932dee917c2 (patch)
treea7466ec6ea8a64ee8b4c62191a5d9218fe0c4995 /src/elements
parent65c8e27538513bd87dcc89130e87f24aa359bbe1 (diff)
downloadpowder-15dab3daadab6671771098c8145cb932dee917c2.zip
powder-15dab3daadab6671771098c8145cb932dee917c2.tar.gz
Imporved walking in a gravity field.
Diffstat (limited to 'src/elements')
-rw-r--r--src/elements/stkm.c39
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;
}
}
}