// Function to handle all sorts of things that happen inside this object every tick
void BaseObject::update(std::vector<BaseObject> objects) {
	xpos += velX;
	ypos += velY;
	if (clsn != NULL)
		clsn->update(xpos, ypos);
	bool hitFloor = false;
	for (int i = 0; i < 2; i++) {
		if (&objects.at(i) != this) {
			if (objects.at(i).isSolid()) {
				if (isColliding(objects.at(i).getClsn())) {
					if (clsn->bottom >= objects.at(i).getClsn()->top) {
						hitFloor = true;
						velY = 0;
					}
				}
			}
		}
	}
	if (!hitFloor && gravity > 0) {
		velY += gravity;
	}
    update_animation(); // update sprite animation ticks
	for (unsigned int i = 0; i < elements.size(); i++) {
		elements.at(i)->run();
	}
}
Example #2
0
void EffectInstance::change_direction(bool right)
{
    if(owner->follow == false) return;

    if(current_animation != nullptr){
        current_animation->stop();
    }

    if(right){
        current_animation = animation_right;
    }else{
        current_animation = animation_left;
    }

    current_animation->jumpToFrame(0);
    current_animation->start();

    image_width = current_animation->currentImage().width();
    image_height = current_animation->currentImage().height();

    if(right){
        offset = get_location(owner->location_right, owner->center_right);
    }else{
        offset = get_location(owner->location_left, owner->center_left);
    }


    update_animation();
}
static void window_load(Window *window) {
  Layer *window_layer = window_get_root_layer(window);
  layer_set_update_proc(window_layer, update_procs[0]);
  s_window_size = layer_get_bounds(window_layer).size;

  // start update loop
  update_animation(NULL);
}
Example #4
0
void gkCharacterNode::update(gkScalar tick)
{
    STATE previousTickState = m_currentStateData->m_state;

    update_state(tick);

    update_animation(previousTickState);
}
Example #5
0
/**********************************************************
 *
 * SUBROUTINE mover()
 *
 * Used to used  to move the movable objects at a set interval
 *
 *********************************************************/
void mover(int toggle)
{

    int i;

    update_animation();

    // move stars
    for ( i = 0; i < NUM_STAR; i++ )
    {
        if(star[i].z > 3000)
        {
            star[i].z = -6000;
            star[i].x = -3000 + (rand() % 6001);
            star[i].y = -2000 + (rand() % 4001);
        }
        star[i].z = star[i].z + 40;
    }
    if(jump)
    {
        if(py < 100)
        {
            py += 10;
            descend = 0;
        }
        else
        {
            jump = 0;
            descend = 1;
        }
    }

    if(descend)
    {
        if(py > -10)
        {
            py -= 10;
            jump = 0;
        }
        else
        {
            descend = 0;
            jump = 0;
        }
    }

    // move enemy
    ez = ez + 50;

    if(ez > 3000)
    {
        ez = -6000;
        ex = (rand() % 201);
        ey = -10;
    }

    // move road
    road_z += 40;


    if(road_z > 6000)
    {
        road_z = -6000;
        road_x = 0;
        road_y = 0;

    }

    //move wall make sure that enemy and the walls don't collide
    wall_z  += 40;

    if(wall_z > 3500)
    {
        wall_z = -6000;
        wall_x = (ex + rand()) % 201;
        wall_y = -10;

    }
    // move bullet and check for kill

    if(bullet == 1 && space == 1)
    {
        bz = bz - 300;
        if(bz < -7000) bullet = 0;

        //check if bullet hit enemy spaceship
        if(bx > ex-prs && bx < ex+prs && by > ey-prs && by < ey+prs && bz > ez-200 && bz < ez+200 )
        {
            fx = 0;
            fy = 0;
            fz = -12;
            ez = 4000;
            // make explosion if hit by bullet
            flag1++;
            if(flag2 - flag1 > 20)
            {
                CreateExplosion ();
                Mix_PlayMusic(blast,0);
                score = score + 100;
                flag1 = 0;
                flag2 = 1;
            }
        }
    }

    flag2++;

    //  Toggle movement
    if (toggle>0)
    move = !move;
    //  Increment light position
    else
    zh = (zh+5)%360;

    if(side < 0) side = side + 1;
    if(side > 0) side = side - 1;

    if(up < 0) up = up + 1;
    if(up > 0) up = up - 1;

    //  Animate flight using Lorenz transform
    Ex = -2*dim*Sin(th)*Cos(ph);
    Ey = +2*dim        *Sin(ph);
    Ez = +2*dim*Cos(th)*Cos(ph);
    Ox = Oy = Oz = 0;
    X = Y = Z = 0;
    Dx = 1; Dy = 0; Dz = 0;
    Ux = 0; Uy = 1; Uz = 0;

    //  Set timer to go again
    if (move && toggle>=0) glutTimerFunc(50,mover,0);
    //  Tell GLUT it is necessary to redisplay the scene
    glutPostRedisplay();
}
Example #6
0
EffectInstance::EffectInstance(Effect *owner, int64_t started, bool right, QWidget *parent)
    :QMainWindow(parent), time_started(started), label(this), owner(owner)
{
    // Set window properties the same as the pony window
    setAttribute(Qt::WA_TranslucentBackground, true);
    setAttribute(Qt::WA_ShowWithoutActivating);

#ifdef Q_WS_X11
    // Disables shadows under the pony window.
    setAttribute(Qt::WA_X11NetWmWindowTypeDock);
#endif

#if defined QT_MAC_USE_COCOA && QT_VERSION >= 0x040800
    // Removes shadows that lag behind animation on OS X. QT 4.8+ needed.
    setAttribute(Qt::WA_MacNoShadow, true);
#endif

#ifdef QT_MAC_USE_COCOA
    // On OS X, tool windows are hidden when another program gains focus.
    Qt::WindowFlags windowflags = Qt::FramelessWindowHint;
#else
    Qt::WindowFlags windowflags = Qt::FramelessWindowHint | Qt::Tool;
#endif

    if(ConfigWindow::getSetting<bool>("general/always-on-top")) {
        windowflags |= Qt::WindowStaysOnTopHint;
    }

#ifdef Q_WS_X11
    if(ConfigWindow::getSetting<bool>("general/bypass-wm")) {
        // Bypass the window manager
        windowflags |= Qt::X11BypassWindowManagerHint;
    }
#endif

    setWindowFlags( windowflags );

#ifdef Q_WS_X11
    // Qt on X11 does not support the skip taskbar/pager window flags, we have to set them ourselves
    // We let Qt initialize the other window properties, which aren't deleted when we replace them with ours
    // (they probably are appended on show())
    Atom window_state = XInternAtom( QX11Info::display(), "_NET_WM_STATE", False );
    Atom window_props[] = {
        XInternAtom( QX11Info::display(), "_NET_WM_STATE_SKIP_TASKBAR", False ),
        XInternAtom( QX11Info::display(), "_NET_WM_STATE_SKIP_PAGER"  , False )
    };

    XChangeProperty( QX11Info::display(), window()->winId(), window_state, XA_ATOM, 32, PropModeReplace, (unsigned char*)&window_props, 2 );

    // Set a null input region mask for the event window, so that it does not interfere with mouseover effects.
    XRectangle rect{0,0,0,0};
    XserverRegion shapeRegion = XFixesCreateRegion(QX11Info::display(), &rect, 1);
    XFixesSetWindowShapeRegion(QX11Info::display(), winId(), ShapeInput, 0, 0, shapeRegion);
    XFixesDestroyRegion(QX11Info::display(), shapeRegion);
#endif
    // TODO: add WS_EX_TRANSPARENT extended window style on windows.

#ifdef Q_WS_X11
    // Make sure the effect gets drawn on the same desktop as the pony
    Atom wm_desktop = XInternAtom(QX11Info::display(), "_NET_WM_DESKTOP", False);
    Atom type_ret;
    int fmt_ret;
    unsigned long nitems_ret;
    unsigned long bytes_after_ret;
    int *desktop = NULL;

    if(XGetWindowProperty(QX11Info::display(), owner->parent_pony->window()->winId(), wm_desktop, 0, 1,
                          False, XA_CARDINAL, &type_ret, &fmt_ret,
                          &nitems_ret, &bytes_after_ret, reinterpret_cast<unsigned char **>(&desktop))
       == Success && desktop != NULL) {
       XChangeProperty(QX11Info::display(), window()->winId(), wm_desktop, XA_CARDINAL, 32, PropModeReplace,
                       reinterpret_cast<unsigned char*>(desktop), 1);
       XFree(desktop);
    }
#endif

    // Load animations and verify them
    // TODO: Do we need to change the direction of active effects? Maybe we only need to display the image for the direction at witch it was spawned.
    animation_left = new QMovie(QString("%1/%2/%3").arg(ConfigWindow::getSetting<QString>("general/pony-directory"), owner->path, owner->image_left ));
    animation_right = new QMovie(QString("%1/%2/%3").arg(ConfigWindow::getSetting<QString>("general/pony-directory"), owner->path, owner->image_right));

    if(!animation_left->isValid())
        qCritical() << "Effect:"<< owner->path <<"Error opening left animation:"<< owner->image_left << "for effect:"<< owner->name;
    if(!animation_right->isValid())
        qCritical() << "Effect:"<< owner->path <<"Error opening right animation:"<< owner->image_right << "for behavior:"<< owner->name;

    animation_left->setCacheMode(QMovie::CacheAll);
    animation_right->setCacheMode(QMovie::CacheAll);

    if(right){
        current_animation = animation_right;
    }else{
        current_animation = animation_left;
    }

    current_animation->jumpToFrame(0);

    image_width = current_animation->currentImage().width();
    image_height = current_animation->currentImage().height();

    if(right){
        offset = get_location(owner->location_right, owner->center_right);
    }else{
        offset = get_location(owner->location_left, owner->center_left);
    }

    current_animation->start();
    update_animation();
    show();
}
Example #7
0
ENTRYPOINT void
draw_tunnel (ModeInfo *mi)
{
  tunnel_configuration *tc = &tconf[MI_SCREEN(mi)];
  Display *dpy = MI_DISPLAY(mi);
  Window window = MI_WINDOW(mi);


  if (!tc->glx_context)
    return;

  glXMakeCurrent(MI_DISPLAY(mi), MI_WINDOW(mi), *(tc->glx_context));

  glShadeModel(GL_SMOOTH);

  glEnable(GL_NORMALIZE);
  /* glEnable(GL_CULL_FACE); */

  glClear(GL_COLOR_BUFFER_BIT );

  update_animation(tc);


  glPushMatrix ();

	glRotatef(180., 0., 1., 0.);
    gltrackball_rotate (tc->trackball);
	glRotatef(180., 0., 1., 0.);



  mi->polygon_count = 0;

  update_fog(tc->effects[4].state[0],  /*color*/
	     tc->effects[4].state[1],  /*density*/
	     tc->effects[4].state[2],  /*start*/
	     tc->effects[4].state[3]); /*end*/

  /* --- begin composite image assembly --- */

  /* head mask and draw diamond tunnel */

  glEnable(GL_BLEND);
  draw_cyl(mi, tc, tc->effects[6].state[0], 5, tc->diamondlist, 2); 
  if (drawlogo)
  	draw_sign(mi, tc,tc->effects[12].state[0], tc->effects[12].state[1],  1.0 / 1.33, 9, 1); 
  glDisable(GL_BLEND);
  /* then tardis tunnel */
  make_wall_tunnel(mi, tc, tc->effects[1].state[0], tc->effects[7].state[0]);

  /* then cylinder tunnel */
  glEnable(GL_BLEND);
  draw_cyl(mi, tc, tc->effects[3].state[0], 2, tc->cyllist, 1); 

       /*void draw_sign(mi, tc,z,alpha,aspect,tex,blendmode)*/
  /* tardis */
  if (drawlogo)
  	draw_sign(mi, tc, tc->effects[2].state[0], tc->effects[2].state[1], 2.0, 1, 0);
  /* marquee */
  if (drawlogo)
  	draw_sign(mi, tc, tc->effects[5].state[0], tc->effects[5].state[1], 1.0, 3, 0);
  /*who head brite*/
  if (drawlogo)
  	draw_sign(mi, tc,1.0, tc->effects[10].state[0],  1.0 / 1.33, 6, 2);
  /*who head psychadelic REMOVED*/
  /* draw_sign(mi, tc,1.0, tc->effects[11].state[0],  1.0 / 1.33, 8, 0); */

  /* star */
  /* draw_sign(mi, tc, tc->effects[8].state[0]tc->effects[8].state[0], 1.0 , 1.0, 4, 1); */
  draw_sign(mi, tc,  tc->effects[8].state[0],  tc->effects[8].state[0],  1.0, 4, 1);
 
  /* normal head */
  if (drawlogo)
  	draw_sign(mi, tc,1.0, tc->effects[9].state[0], 1.0 /  1.33, 6, 0);

  /* --- end composite image assembly --- */


  glPopMatrix ();

  if (mi->fps_p) do_fps (mi);
  glFinish();

  check_gl_error("drawing done, calling swap buffers");
  glXSwapBuffers(dpy, window);
}
Example #8
0
/*
 * player_update()
 * player를 업데이트하는 함수.
 */
void player_update(player_t *player, player_t **team, int team_size, brick_list_t *brick_list, item_list_t *item_list, enemy_list_t *enemy_list)
{
    int i;
    actor_t *act = player->actor;
    float dt = timer_get_delta();

    act->hot_spot = v2d_new(image_width(actor_image(act))/2, image_height(actor_image(act))-20);

    /* physics */
    if(!player->disable_movement) {
        player->pa_old_state = physicsactor_get_state(player->pa);
        physics_adapter(player, team, team_size, brick_list, item_list, enemy_list);
    }

    /* player 깜빡거림 */
    if(player->blinking) {
        player->blink_timer += timer_get_delta();

        if(player->blink_timer - player->blink_visibility_timer >= 0.067f) {
            player->blink_visibility_timer = player->blink_timer;
            act->visible = !act->visible;
        }

        if(player->blink_timer >= PLAYER_MAX_BLINK) {
            player->blinking = FALSE;
            act->visible = TRUE;
        }
    }

    if(physicsactor_get_state(player->pa) != PAS_GETTINGHIT && player->pa_old_state == PAS_GETTINGHIT) {
        player->blinking = TRUE;
        player->blink_timer = 0.0f;
        player->blink_visibility_timer = 0.0f;
    }

    /* 방패 */
    if(player->shield_type != SH_NONE)
        update_shield(player);

    /* 수중에서 */
    if(!(player->underwater) && player->actor->position.y >= level_waterlevel())
        player_enter_water(player);
    else if(player->underwater && player->actor->position.y < level_waterlevel())
        player_leave_water(player);

    /* 수중인지 확인 */
    if(player->underwater) {
        player->speedshoes_timer = max(player->speedshoes_timer, PLAYER_MAX_SPEEDSHOES); /* disable speed shoes */

        if(player->shield_type != SH_WATERSHIELD)
            player->underwater_timer += dt;
        else
            player->underwater_timer = 0.0f;

        if(player_seconds_remaining_to_drown(player) <= 0.0f)
            player_drown(player);
    }

    /* 무적의 별 */
    if(player->invincible) {
        int maxf = sprite_get_animation("SD_INVSTAR", 0)->frame_count;
        int invangle[PLAYER_MAX_INVSTAR];
        v2d_t starpos;

        player->invtimer += dt;

        for(i=0; i<PLAYER_MAX_INVSTAR; i++) {
            invangle[i] = (180*4) * timer_get_ticks()*0.001 + (i+1)*(360/PLAYER_MAX_INVSTAR);
            starpos.x = 25*cos(invangle[i]*PI/180);
            starpos.y = ((timer_get_ticks()+i*400)%2000)/40;
            /*starpos = v2d_rotate(starpos, act->angle);*/
            player->invstar[i]->position.x = act->position.x - act->hot_spot.x + image_width(actor_image(act))/2 + starpos.x;
            player->invstar[i]->position.y = act->position.y - act->hot_spot.y + image_height(actor_image(act)) - starpos.y + 5;
            actor_change_animation_frame(player->invstar[i], random(maxf));
        }

        if(player->invtimer >= PLAYER_MAX_INVINCIBILITY)
            player->invincible = FALSE;
    }

    /* speed shoes */
    if(player->got_speedshoes) {
        physicsactor_t *pa = player->pa;

        if(player->speedshoes_timer == 0) {
            physicsactor_set_acc(pa, physicsactor_get_acc(pa) * 2.0f);
            physicsactor_set_frc(pa, physicsactor_get_frc(pa) * 2.0f);
            physicsactor_set_topspeed(pa, physicsactor_get_topspeed(pa) * 2.0f);
            physicsactor_set_air(pa, physicsactor_get_air(pa) * 2.0f);
            physicsactor_set_rollfrc(pa, physicsactor_get_rollfrc(pa) * 2.0f);
            player->speedshoes_timer += dt;
        }
        else if(player->speedshoes_timer >= PLAYER_MAX_SPEEDSHOES) {
            physicsactor_set_acc(pa, physicsactor_get_acc(pa) / 2.0f);
            physicsactor_set_frc(pa, physicsactor_get_frc(pa) / 2.0f);
            physicsactor_set_topspeed(pa, physicsactor_get_topspeed(pa) / 2.0f);
            physicsactor_set_air(pa, physicsactor_get_air(pa) / 2.0f);
            physicsactor_set_rollfrc(pa, physicsactor_get_rollfrc(pa) / 2.0f);
            player->got_speedshoes = FALSE;
        }
        else
            player->speedshoes_timer += dt;
    }

    /* 애니메이션 */
    update_animation(player);

    /* CPU가 제어하는 player인지 확인 */
    if(player != level_player()) {
        for(i=0; i<IB_MAX; i++)
            input_simulate_button_up(act->input, (inputbutton_t)i);
    }

    /* 승리 포즈 */
    if(level_has_been_cleared())
        physicsactor_enable_winning_pose(player->pa);
}