int logic_loop() { poll_input(); //much logic, so complicated, wow if (levl->bgtype == 2) update_fire(); //Very firey for (int ei=levl->entitycnt-1;ei>=0;ei--) { ENTITY *e = levl->entities+ei; //printf("\nstart collide %d\n",ei); collide(e); switch (e->type) { default: printf("Unknown entity type in logic loop! type: %d id: %d",e->type,ei); case ENTITY_TYPE_NULL: break; case ENTITY_TYPE_PLAYER: //e->accely += 1/128.0; //if (e->accely > 1/16.0) e->accely = 1/16.0; if (pkeys & PIG_KEY_BUTTON) e->health -= 1; if ((pkeys & PIG_KEY_UP) && (e->data1 & 0x0001)) e->accely = -1/6.0; e->accelx = 0; if ((pkeys & PIG_KEY_LEFT) && !(e->data1 & 0x0001)) e->accelx = -1/16.0; if ((pkeys & PIG_KEY_RIGHT) && !(e->data1 & 0x0001)) e->accelx = 1/16.0; if ((pkeys & (PIG_KEY_LEFT | PIG_KEY_RIGHT)) == (PIG_KEY_LEFT | PIG_KEY_RIGHT) && !(e->data1 & 0x0001)) e->accelx = 0; //printf("1 %f %f %f %f %d\n",e->y,e->accely,e->x,e->accelx,e->data1); do_accel(e,0,1/256.0,1/8.0); //printf("2 %f %f %f %f %d\n",e->y,e->accely,e->x,e->accelx,e->data1); /*if (pkeys & PIG_KEY_UP) e->y -= 1/16.0; if (pkeys & PIG_KEY_DOWN) e->y += 1/16.0; if (pkeys & PIG_KEY_LEFT) e->x -= 1/16.0; if (pkeys & PIG_KEY_RIGHT) e->x += 1/16.0;*/ if (e->health <= 0) return 1; break; case ENTITY_TYPE_COLLECTABLE: for (int ci=0;ci<levl->entitycnt;ci++) { //printf("entity %d coll list %d ",ci,coll_list[ci]); if (coll_list[ci] == 0xFFFFFFFF) break; ENTITY* ce = levl->entities+coll_list[ci]; //printf("entity %d coll %d\n",ei,coll_list[ci]); if (ce->type == ENTITY_TYPE_PLAYER) { ce->data4 += (e->data2 & 0x00FF) == 7 ? -13 : (int)pow(2,(e->data2 & 0x00FF)); e->type = 0; break; } } break; } //sanity chacks //prevent stuff from escaping the map if(e->x<0)e->x=0;if(e->y<0)e->y=0;if(e->x>levl->sizex-1)e->x=levl->sizex-1;if(e->y>levl->sizey-1)e->y=levl->sizey-1; } //printf("0-1 %X\t%X\n",do_collide(levl->entities+0,levl->entities+1),is_intersection(21.4545,15.584254,1,1,20,10,1,1)); return 0; }
int config_main(int argc, char *argv[]) { if (argc >= 2) { if (!strcmp(argv[1], "gyro")) { do_gyro(argc - 2, argv + 2); } else if (!strcmp(argv[1], "accel")) { do_accel(argc - 2, argv + 2); } else if (!strcmp(argv[1], "mag")) { do_mag(argc - 2, argv + 2); } else { do_device(argc - 1, argv + 1); } } errx(1, "expected a command, try 'gyro', 'accel', 'mag'"); }
int config_main(int argc, char *argv[]) { if (argc >= 2) { if (!strncmp(argv[1], "/dev/gyro",9)) { do_gyro(argc - 1, argv + 1); } else if (!strncmp(argv[1], "/dev/accel",10)) { do_accel(argc - 1, argv + 1); } else if (!strncmp(argv[1], "/dev/mag",8)) { do_mag(argc - 1, argv + 1); } else { do_device(argc - 1, argv + 1); } } errx(1, "expected a device, try '/dev/gyro', '/dev/accel', '/dev/mag'"); }
int do_accel(ENTITY* e, int recur, float gravity, float gravitymax) { e->accely += gravity; if (e->accely > gravitymax) e->accely = gravitymax; float newx = e->x+e->accelx; float newy = e->y+e->accely; int newg = 1; if (e->accely > 0) { if (get_tile(floor(e->x),ceil(newy)) || get_tile(ceil(e->x),ceil(newy))) { newy = floor(newy); e->accely = 0; } else if (!(e->data1 & 0x0001)) newg = 0; } else if (e->accely < 0) { if (get_tile(floor(e->x),floor(newy)) || get_tile(ceil(e->x),floor(newy))) { newy = ceil(newy); e->accely = 0; newg = 0; } } if (e->accely != 0) newg = 0; if (e->accelx > 0) { if (get_tile(ceil(newx),floor(e->y)) || get_tile(ceil(newx),ceil(e->y))) { newx = floor(newx); e->accelx = 0; } } else if (e->accelx < 0) { if (get_tile(floor(newx),floor(e->y)) || get_tile(floor(newx),ceil(e->y))) { newx = ceil(newx); e->accelx = 0; } } else; if (ceil(newy) == newy && newy != 0) newg &= 1; else newg = 0; if (recur>5|!(get_tile(floor(newx),floor(newy)) || get_tile(ceil(newx),floor(newy)) || get_tile(floor(newx),ceil(newy)) || get_tile(ceil(newx),ceil(newy)))) { e->x = newx; e->y = newy; e->data1 = newg ? e->data1 | 0x0001 : e->data1 & 0xFFFE; if (newg) e->accely = 0; //printf("exit at recur %d\t",recur); } else do_accel(e, recur+1, gravity, gravitymax); }
int config_main(int argc, char *argv[]) { bool is_device_cmd = argc >= 2 && (!strcmp(argv[1], "block") || !strcmp(argv[1], "unblock")); if (argc >= 3) { if (!is_device_cmd && !strncmp(argv[2], "/dev/gyro", 9)) { return do_gyro(argc - 1, argv + 1); } else if (!is_device_cmd && !strncmp(argv[2], "/dev/accel", 10)) { return do_accel(argc - 1, argv + 1); } else if (!is_device_cmd && !strncmp(argv[2], "/dev/mag", 8)) { return do_mag(argc - 1, argv + 1); } else { return do_device(argc - 1, argv + 1); } } print_usage(); return 1; }