Пример #1
0
/*----------------------------------------------------------------------------
 * Move an object up, pushing every other object on its way if possible.
 *----------------------------------------------------------------------------*/
int
levitate(struct object *o)
{
    struct object *tmp;

    if (idx_y(o->idx) == MAX)
        return 0;

    if ((tmp = OBJ[idx_up(o->idx)]) && tmp->dir == STILL) {
        if (levitate(tmp)) {
            object_move(o, DIR_UP);
            return DIR_UP;
        }

        return STILL;
    }

    return object_try_move(o, DIR_UP);
}
Пример #2
0
/*----------------------------------------------------------------------------
 * Try to move the player object in direction dir
 *----------------------------------------------------------------------------*/
void
try_move_player(uint8_t dir)
{
    struct object *o;

    if ((o = OBJ[game.po->idx + offset[dir]]) && o->dir == STILL) {
        if ((o->type & HEAVY) &&
            (o->idx / bounds[dir] ==
             (o->idx + offset[dir]) / bounds[dir])) {
            if (game.cs.pushing++ > PUSH_DELAY && object_try_move(o, dir)) {
                object_move(game.po, dir);
                game.cs.pushing = 0;
            }
            return;
        }
    }

    object_try_move(game.po, dir);
    game.cs.pushing = 0;
}
Пример #3
0
int		loop_hook(t_env *e)
{
	e->tick.frame_start = clock();
	move_translate(e);
	move_rotate(e);
	e->key[KP] || e->key[KM] || e->mouse.kp || e->mouse.km ? move_zoom(e) : 0;
	e->key[MOUSE] ? mouse_orientation(e) : 0;
	e->key[FI] ? kswitch(&e->cam->filter.invert) : 0;
	e->key[FG] ? kswitch(&e->cam->filter.gray_scale) : 0;
	e->key[FGM] ? e->cam->filter.gamma += 0.05 : 0;
	e->key[FGP] ? e->cam->filter.gamma -= 0.05 : 0;
	e->mouse.lmb ? object_select(e) : 0;
	object_move(e, e->cam->selection);
	object_mouse_move(e, e->cam->selection);
	object_mouse_rotate(e, e->cam->selection);
	e->key[DEL] ? object_delete(e, e->cam->selection) : 0;
	e->mouse.kp = 0;
	e->mouse.km = 0;
	e->mouse.lmb = 0;
	e->mouse.rmb = 0;
	expose_hook(e);
	e->tick.frame = (clock() - e->tick.frame_start) / (float)CLOCKS_PER_SEC;
	return (0);
}
Пример #4
0
int main() 
{
    SDL_Init(SDL_INIT_VIDEO);

    // SDL Initialization
    SDL_Window *window = SDL_CreateWindow("Roguelike", 
                                          SDL_WINDOWPOS_UNDEFINED, 
                                          SDL_WINDOWPOS_UNDEFINED,
                                          SCREEN_WIDTH, SCREEN_HEIGHT,
                                          0);//SDL_WINDOW_FULLSCREEN_DESKTOP);
    SDL_Renderer *renderer = SDL_CreateRenderer(window, 0, SDL_RENDERER_SOFTWARE);

    SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear");
    SDL_RenderSetLogicalSize(renderer, SCREEN_WIDTH, SCREEN_HEIGHT);

    SDL_Texture *screen = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888,
                                            SDL_TEXTUREACCESS_STREAMING,
                                            SCREEN_WIDTH, SCREEN_HEIGHT);

    // Set up our console
    PT_Console *console = PT_ConsoleInit(SCREEN_WIDTH, SCREEN_HEIGHT,
                                         GRID_ROW_COUNT, GRID_COL_COUNT);
    PT_ConsoleSetBitmapFont(console, "./terminal16x16.png", 0, 16, 16);

    game_init();

    // Main game loop
    u32 delayTime = 1000 / FPS_LIMIT;
    u32 frameStart, frameTime = 0;
    i32 spareTime = 0;
    bool done = false;
    while (!done) {
        frameStart = SDL_GetTicks();

        // Handle all events in the queue
        SDL_Event event;
        while (SDL_PollEvent(&event) != 0) {

            if (event.type == SDL_QUIT) {
                done = true;
                break;
            }

            if (event.type == SDL_KEYDOWN) {
                SDL_Keycode key = event.key.keysym.sym;

                switch (key) {
                    case SDLK_UP:
                        object_move(player, 0, -1);
                        break;
                    case SDLK_DOWN:
                        object_move(player, 0, 1);
                        break;
                    case SDLK_LEFT:
                        object_move(player, -1, 0);
                        break;
                    case SDLK_RIGHT:
                        object_move(player, 1, 0);
                        break;
                    default:
                        break;
                }
            }

        }

        // Render the current frame
        render_all(renderer, screen, console);

        // Avoid pegging the CPU at 100% by sleeping for a bit
        frameTime = SDL_GetTicks() - frameStart;
        spareTime = delayTime - frameTime;
        if (spareTime > 0) {
            SDL_Delay(spareTime);
        }
    }

    // Clean up
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);

    SDL_Quit();
    return 0;
}
Пример #5
0
void run_object_single(obj_type *obj,int tick)
{
		// spawning
		
	if (obj->spawning) object_spawn(obj);
	
	memmove(&obj->last_pnt,&obj->pnt,sizeof(d3pnt));
	memmove(&obj->last_ang,&obj->ang,sizeof(d3ang));

		// item counts
		
	obj->count++;
	if (obj->item_count!=0) obj->item_count--;
	
		// turning and looking
		
	if (obj->player) {
		if (!obj->input_freeze) {
			object_player_turn(obj);
			object_player_look(obj);
		}
		else {
			if (!obj->suspend) {
				object_turn(obj);
			}
		}
		object_fs_effect_run(tick,obj);
	}
	else {
		if (!obj->suspend) {
			object_turn(obj);
		}
	}
	
	object_thrust(obj);

		// watches

	object_watch(obj);

		// health recover

	object_health_recover(obj);

		// movement
	
	if (!obj->suspend) {
		object_auto_walk(obj);
	
		object_fix_motion(obj);
		object_movement(obj,&obj->forward_move);
		object_movement(obj,&obj->side_move);
		object_simple_movement(obj,&obj->vert_move);
		
		object_gravity(obj);
		object_fix_force(obj);
		object_move(obj);
		
		object_fix_bump_smooth(obj);
		object_ducking(obj);

		object_touch(obj);
		object_liquid(tick,obj);

		object_crush(obj,FALSE);

		item_pickup_check(obj);
	}

		// auto-growing

	object_grow_run(obj);
	
		// animation events

	if (obj->player) {
		object_event_animations(obj);
	}
	
		// death check
		
	object_death(obj);
}