예제 #1
0
bool GalleryScroll::onSwipe(const cocos2d::Vec2 &delta) {
	auto vec = _primary->getTexturePosition();
	if (!isnan(vec.y)) {
		if (vec.y == 0.0f && delta.y > 0.0f) {
			onOverscrollBottom(delta.y);
		}
		if (vec.y == 1.0f && delta.y < 0.0f) {
			onOverscrollTop(delta.y);
		}
	}

	if (_hasPinch || _progress == 0.0f) {
		if (!_hasPinch) {
			if (delta.x > 0.0f && (isnanf(vec.x) || vec.x == 0.0f)) {
				onMove(delta.x);
			} else if (delta.x < 0.0f && (isnanf(vec.x) || vec.x == 1.0f)) {
				onMove(delta.x);
			}
		}
		return _primary->onSwipe(delta);
	} else {
		onMove(delta.x);
		return _primary->onSwipe(Vec2(0.0f, delta.y));
	}
}
예제 #2
0
    void Draggable::onEvent(Event* event)
    {
        //if (event->currentTarget.get() != _actor)
        //  return;

        TouchEvent* te = safeCast<TouchEvent*>(event);
        switch (te->type)
        {
            case TouchEvent::TOUCH_DOWN:
            {
                startDrag(te->localPosition);
            }
            break;
            case TouchEvent::TOUCH_UP:
            {
                _pressed = false;
                _actor->_getStage()->removeEventListeners(this);
                if (getTimeMS() - _startTm < 2)
                {
                    _actor->setPosition(_clientPos);
                }
            }
            break;

            case TouchEvent::MOVE:
            {
                onMove(te->localPosition);
            }
            break;
        }
    }
예제 #3
0
void SDLWindow::handleWindowEvent() {
    switch (m_sdlEvent.window.event) {
        case SDL_WINDOWEVENT_MOVED:
            onMove(m_sdlEvent.window.data1, m_sdlEvent.window.data2);
            break;
        case SDL_WINDOWEVENT_RESIZED:
        case SDL_WINDOWEVENT_SIZE_CHANGED:
            onResize(m_sdlEvent.window.data1, m_sdlEvent.window.data2);
            break;
        case SDL_WINDOWEVENT_MINIMIZED:
            onMinimize();
            break;
        case SDL_WINDOWEVENT_MAXIMIZED:
            onMaximize();
            break;
        case SDL_WINDOWEVENT_RESTORED:
            onRestore();
            break;
		case SDL_WINDOWEVENT_SHOWN:
			onDisplay();
			break;
        default:
            break;
    }
}
예제 #4
0
파일: widget.cpp 프로젝트: goalizc/takisy
void widget::xy(Point _xy)
{
    if (!onMoving(_xy))
        return;
    if (impl_->father_ && !impl_->father_->onChildMoving(this, _xy))
        return;

    if (_xy == xy())
        return;

    cross_platform_window::Handle handle = takisy::handleFromLPWIDGET(this);
    if (!handle)
    {
        repaint();
        impl_->rect_ = impl_->rect_.move(_xy);
        repaint();
    }
    else
        impl_->rect_ = impl_->rect_.move(_xy);

    onMove();
    if (impl_->father_)
        impl_->father_->onChildMove(this);

    if (handle)
    {
        cross_platform_window window(handle);
        window.xy(_xy - window.client_offset());
    }
}
예제 #5
0
void MoveAnimation::update(sf::Time dt)
{
    if (mIsActive)
    {
        mIsActive = onMove(dt);
    }
}
예제 #6
0
파일: input.cpp 프로젝트: nyorain/ny
nytl::Vec2i WinapiMouseContext::move(nytl::Vec2i pos)
{
	auto delta = pos - position_;
	position_ = pos;
	onMove(*this, pos, delta);

	return delta;
}
예제 #7
0
void Fireball::onLoop()
{
	if (isDeadFlag)
	{
		onDistroy();
		return;
	}
	onMove(speed, 0);
}
예제 #8
0
void GUIObject::setPos(const GPoint& pt)
{
    if (pt != m_pos)
    {
        GPoint ptOld = m_pos;
        m_pos = pt;
        onMove(ptOld, pt);
    }
}
예제 #9
0
void BabyDragon::onLoop()
{
	if (isDead())
	{
		onDistroy();
		return;
	}
	onMove(speed, 0);
}
예제 #10
0
파일: gobang.cpp 프로젝트: bugou/test
void GobangGame::onPacketReceived(InPacket &in, int from)
{
	uint16 cmd;
	in >> cmd;

	switch (cmd) {
	case CMD_MOVE:
		onMove(in, from);
		break;
	}
}
예제 #11
0
void HistoryDialog::update(sf::Time dt)
{
    if (mTopIndex <= 0) { p_mArrowUp->setFocusable(false); }
    else { p_mArrowUp->setFocusable(true); }

    if (mBotIndex <= 0 || mBotIndex >= (int)mStrVec.size() - 1) { p_mArrowDown->setFocusable(false); }
    else { p_mArrowDown->setFocusable(true); }

    p_mArrowUp->update(mWin);
    p_mArrowDown->update(mWin);
    if (mIsDisplay)
    {
        onMove(dt, mDisplayPos);
    }
    else
    {
        onMove(dt, mBeginPos);
    }

    EntityNode::update(dt);
}
AboutDialog::AboutDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::AboutDialog)
{
    ui->setupUi(this);    

    m_time = std::make_shared<QTime>();
    m_timer = new QTimer(this);
    connect(m_timer, SIGNAL(timeout()), this, SLOT(onMove()));
    m_timer->start(50);
    m_time->start();
}
 int OverlayPickerTool::processMouseEvent(rviz::ViewportMouseEvent& event)
 {
   if (event.left() && event.leftDown()) {
     if (!is_moving_) {
       onClicked(event);
     }
   }
   else if (event.left() && is_moving_) {
     onMove(event);
   }
   else if (is_moving_ && !(event.left() && event.leftDown())) {
     onRelease(event);
   }
   return 0;
 }
예제 #14
0
파일: Hero.cpp 프로젝트: aeronzhou/SYSGame
void Hero::onUpdate(float dt)
{
	onMove();

	// 检查有没有英雄要“吃”
	if (m_pQueue && m_pQueue->getHead() == this)
	{
		BaseEntity* entity = EM.findHeroNotInQueue(this, GI.RangeToPickupHero);
		if (entity != NULL)
		{
			m_pQueue->appendCharacter((Character*)(entity));
		}
	}

	
}
예제 #15
0
bool StageLayer::handleEventMouse(EventMouse *e)
{
    auto btn = e->getMouseButton();
    auto idx = (int)btn;
    switch(e->getMouseCode()) {
    // FIX: no need to start with press ok
    case MouseCode::SCROLL:
    case MouseCode::PRESS:
    {
        auto const &pos = e->getCursorPos();
        if(!inView(pos.x, pos.y))
            return false;

        auto worldPos = screenToWorld(pos);
        e->setCursorWorld(worldPos.x, worldPos.y);

        return dispatchEvent(e);
    }
    case MouseCode::RELEASE:
    {
        auto l = static_cast<EventMouseListener*>(mouseSlots_[idx].get());
        auto ok = l && l->isRunning();
        if(ok && l->onRelease) {
            auto worldPos = screenToWorld(e->getCursorPos());
            e->setCursorWorld(worldPos);
            l->onRelease(e);
        }
        mouseSlots_[idx] = nullptr;
        return ok;
    }
    case MouseCode::MOVE:
    {
        auto l = static_cast<EventMouseListener*>(mouseSlots_[idx].get());
        auto ok = l && l->isRunning();
        if(ok && l->onMove) {
            auto worldPos = screenToWorld(e->getCursorPos());
            e->setCursorWorld(worldPos);
            l->onMove(e);
        }
        return ok;
    }
    }
    return false;
}
예제 #16
0
void Player::onLoop()
{
	if (fire)
	{
		Fireball* fireball = new Fireball();
		fireball->onLoad(SPRITE_FIREBALL);
		fireball->onCreate((getDimensions()->x + 100), (getDimensions()->y + 10));
		fire = false;
	}
	
	//test directional movement and move
	int speed = 0;
	if (moveUp)
		speed = -this->speed;
	if (moveDown)
		speed = this->speed;

	onMove(0, speed);
}
예제 #17
0
파일: CEntity.cpp 프로젝트: Ostkaka/MGE
void CEntity::onLoop( float dt )
{
    //We're not Moving
    if(moveLeft == false && moveRight == false && speed.y == 0) 
        stopMove();
    
    if(moveLeft) {
        accel.x += -ACC_WALK;
    }else if(moveRight) {
        accel.x += ACC_WALK;
    }

    if(flags & ENTITY_FLAG_GRAVITY) {
        accel.y += GRAVITY;
    }

    speed.x += accel.x * dt;
    speed.y += accel.y * dt;

    if(speed.x > maxSpeed.x)  speed.x =  maxSpeed.x;
    if(speed.x < -maxSpeed.x) speed.x = -maxSpeed.x;
    if(speed.y > maxSpeed.y)  speed.y =  maxSpeed.y;
    if(speed.y < -maxSpeed.y) speed.y = -maxSpeed.y;

    onAnimate();
    
		sf::Vector2f dv = speed*dt;

		//std::cout << "move:" << dv.x << "	" << dv.y << " || accel: " << accel.x << "	" << accel.y << std::endl;

		onMove(dv);

		//Update Sprite
		mEntitySprite.setPosition(pos);

		//Update Bound
		bound.top = pos.y + (size.y * mEntitySprite.getScale().y)/2 - bound.height/2;
		bound.left = pos.x + (size.x * mEntitySprite.getScale().x)/2 - bound.width/2;

		//Reset force
		accel.x=0;
		accel.y=0;
}
예제 #18
0
Presenter::Presenter(IView *view)
{
    this->view = view;
    this->game = new GameController();

    QObject* qview = dynamic_cast<QObject*>(view);
    connect(qview, SIGNAL(onNewGame()), this->game, SLOT(onNewGame()));
    connect(qview, SIGNAL(onPause()), this->game, SLOT(onPause()));
    connect(qview, SIGNAL(onRotate()), this->game, SLOT(onRotate()));
    connect(qview, SIGNAL(onToLeft()), this->game, SLOT(onMoveLeft()));
    connect(qview, SIGNAL(onToRight()), this->game, SLOT(onMoveRight()));
    connect(qview, SIGNAL(onSpeedup()), this->game, SLOT(onSpeedup()));
    connect(qview, SIGNAL(onEndGame()), this->game, SLOT(onEnd()));

    connect(game, SIGNAL(onStateChanged()), this, SLOT(StateChange()));
    connect(game, SIGNAL(onGameEnd()), this, SLOT(EndGame()));
    // instead of speedup
    connect(qview, SIGNAL(onMakeMove()), this->game, SLOT(onMove()));

}
예제 #19
0
Sunshine::Sunshine(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Sunshine)
{
    ui->setupUi(this);
    setWindowFlags(Qt::Tool|Qt::FramelessWindowHint);
    QRect rect = QApplication::desktop()->availableGeometry();
        m_point.setX(rect.width() - width());
        m_point.setY(rect.height() - height());
        move(m_point.x(), m_point.y());

        m_pStayTimer = new QTimer(this);
        m_pCloseTimer = new QTimer(this);
        m_nDesktopHeight=rect.height();
        m_dTransparent=1.0;
        m_pShowTimer = new QTimer(this);
        connect(m_pShowTimer, SIGNAL(timeout()), this, SLOT(onMove()));
        connect(m_pStayTimer, SIGNAL(timeout()), this, SLOT(onStay()));
        connect(m_pCloseTimer, SIGNAL(timeout()), this, SLOT(onClose()));
        m_pShowTimer->start(1);
}
예제 #20
0
bool CameraRotationHandler::onTouchEvent(const G3MEventContext *eventContext,
                                         const TouchEvent* touchEvent, 
                                         CameraContext *cameraContext) 
{
  // three finger needed
  if (touchEvent->getTouchCount()!=3) return false;
  
  switch (touchEvent->getType()) {
    case Down:
      onDown(eventContext, *touchEvent, cameraContext);
      break;
    case Move:
      onMove(eventContext, *touchEvent, cameraContext);
      break;
    case Up:
      onUp(eventContext, *touchEvent, cameraContext);
    default:
      break;
  }
  
  return true;
}
예제 #21
0
void jsTouchPoll_t :: onTouch( unsigned x, unsigned y )
{
   debugPrint( "raw: %d/%d\n", x, y );
//   translate( x, y );
   debugPrint( "cooked: %d/%d\n", x, y );

   prevX_ = x ; // set here so code has access to it
   prevY_ = y ;

   if( 0 != curBox_ )
   {
      onMove( x, y );
   } // already touching, move or release
   else
   {
      gettimeofday(&touchTime_, 0);
      std::vector<box_t *> boxes = getZMap().getBoxes( x, y );
      if( 0 < boxes.size() )
      {
         curBox_ = boxes[0];
         curBox_->onTouch_( *boxes[0], x, y );
      }
      else
      {
         if( JSVAL_VOID != onTouchCode_ )
         {
            executeCode( JSVAL_TO_OBJECT( onTouchObject_ ), onTouchCode_, "onTouch" );
         }
         else
         {
//            printf( "no touch handler %u/%u\n", x, y );
//            dumpZMaps();
         }
      } // no boxes... look for global handler
   }

   wasDown_ = true ;
}
예제 #22
0
void Monster::onUpdate(float dt)
{
	if (m_bIsFrozen)
	{
		//if (m_pFrozenEft && m_pFrozenEft->retainCount() > 1 && !m_pFrozenEft->isKilled() )
		//{
		//	m_pFrozenEft->setPosition(getPosition());
		//}
		
		return;
	}

	bool moveSuccess = onMove();

	// 假如快与其他怪撞车了
	Monster* other = (Monster*)EM.findEntityInRange(this, 20.f, ET_Monster);
	if (other)
	{
		// 如果怪自己撞到死的话,是不会掉落装备的
		other->setDropItemAfterDeath(false);
		other->kill();
	}
}
예제 #23
0
void SDL2Window::tick() {
	
	SDL_Event event;
	while(SDL_PollEvent(&event)) {
		
		switch(event.type) {
			
			case SDL_WINDOWEVENT: {
				switch(event.window.event) {
					
					case SDL_WINDOWEVENT_SHOWN:        onShow(true);   break;
					case SDL_WINDOWEVENT_HIDDEN:       onShow(false);  break;
					case SDL_WINDOWEVENT_EXPOSED:      onPaint();      break;
					case SDL_WINDOWEVENT_MINIMIZED:    onMinimize();   break;
					case SDL_WINDOWEVENT_MAXIMIZED:    onMaximize();   break;
					case SDL_WINDOWEVENT_RESTORED:     onRestore();    break;
					case SDL_WINDOWEVENT_FOCUS_GAINED: onFocus(true);  break;
					case SDL_WINDOWEVENT_FOCUS_LOST:   onFocus(false); break;
					
					case SDL_WINDOWEVENT_MOVED: {
						onMove(event.window.data1, event.window.data2);
						break;
					}
					
					case SDL_WINDOWEVENT_SIZE_CHANGED: {
						Vec2i newSize(event.window.data1, event.window.data2);
						if(newSize != m_size && !m_fullscreen) {
							m_renderer->beforeResize(false);
							updateSize();
						} else {
							// SDL regrettably sends resize events when a fullscreen window
							// is minimized - we'll have none of that!
						}
						break;
					}
					
					case SDL_WINDOWEVENT_CLOSE: {
						// The user has requested to close a single window
						// TODO we only support one main window for now
						break;
					}
					
				}
				break;
			}
			
			#if ARX_PLATFORM == ARX_PLATFORM_WIN32
			case SDL_KEYDOWN: {
				// SDL2 is still eating our ALT+F4 under windows...
				// See bug report here: https://bugzilla.libsdl.org/show_bug.cgi?id=1555
				if(event.key.keysym.sym == SDLK_F4
				   && (event.key.keysym.mod & KMOD_ALT) != KMOD_NONE) {
					SDL_Event quitevent;
					quitevent.type = SDL_QUIT;
					SDL_PushEvent(&quitevent);
				}
				break;
			}
			#endif
			
			case SDL_QUIT: {
				// The user has requested to close the whole program
				// TODO onDestroy() fits SDL_WINDOWEVENT_CLOSE better, but SDL captures Ctrl+C
				// evenst and *only* sends the SDL_QUIT event for them while normal close
				// generates *both* SDL_WINDOWEVENT_CLOSE and SDL_QUIT
				onDestroy();
				return; // abort event loop!
			}
			
		}
		
		if(m_input) {
			m_input->onEvent(event);
		}
		
	}
	
	if(!m_renderer->isInitialized()) {
		updateSize();
		m_renderer->afterResize();
		m_renderer->SetViewport(Rect(m_size.x, m_size.y));
	}
}
예제 #24
0
void SDL2Window::tick() {

    SDL_Event event;
    while(SDL_PollEvent(&event)) {

        switch(event.type) {

        case SDL_WINDOWEVENT: {
            switch(event.window.event) {

            case SDL_WINDOWEVENT_SHOWN:
                onShow(true);
                break;
            case SDL_WINDOWEVENT_HIDDEN:
                onShow(false);
                break;
            case SDL_WINDOWEVENT_EXPOSED:
                onPaint();
                break;
            case SDL_WINDOWEVENT_MINIMIZED:
                onMinimize();
                break;
            case SDL_WINDOWEVENT_MAXIMIZED:
                onMaximize();
                break;
            case SDL_WINDOWEVENT_RESTORED:
                onRestore();
                break;
            case SDL_WINDOWEVENT_FOCUS_GAINED:
                onFocus(true);
                break;
            case SDL_WINDOWEVENT_FOCUS_LOST:
                onFocus(false);
                break;

            case SDL_WINDOWEVENT_MOVED: {
                onMove(event.window.data1, event.window.data2);
                break;
            }

            case SDL_WINDOWEVENT_SIZE_CHANGED: {
                Vec2i newSize(event.window.data1, event.window.data2);
                if(newSize != m_size && !m_fullscreen) {
                    m_renderer->beforeResize(false);
                    updateSize();
                } else {
                    // SDL regrettably sends resize events when a fullscreen window
                    // is minimized - we'll have none of that!
                }
                break;
            }

            case SDL_WINDOWEVENT_CLOSE: {
                // The user has requested to close a single window
                // TODO we only support one main window for now
                break;
            }

            }
            break;
        }

        case SDL_QUIT: {
            // The user has requested to close the whole program
            // TODO onDestroy() fits SDL_WINDOWEVENT_CLOSE better, but SDL captures Ctrl+C
            // evenst and *only* sends the SDL_QUIT event for them while normal close
            // generates *both* SDL_WINDOWEVENT_CLOSE and SDL_QUIT
            onDestroy();
            return; // abort event loop!
        }

        }

        if(m_input) {
            m_input->onEvent(event);
        }

    }

    if(!m_renderer->isInitialized()) {
        updateSize();
        m_renderer->afterResize();
        m_renderer->SetViewport(Rect(m_size.x, m_size.y));
    }
}
예제 #25
0
void Mouse::onClick(int button, int state, int x, int y) {
	buttonStates[button] = state;
	onMove(x, y);
}
예제 #26
0
LRESULT Gripper::runProc(UINT message, WPARAM wParam, LPARAM lParam)
{
	switch (message)
	{
		case WM_CREATE:
		{
			create();
			break;
		}
		case WM_MOUSEMOVE:
		case WM_NCMOUSEMOVE:
		{
			onMove();
			return TRUE;
		}
		case WM_LBUTTONUP:
		case WM_NCLBUTTONUP:
		{
			/* end hooking */
			if (hookMouse)
			{
				::UnhookWindowsHookEx(hookMouse);
				::UnhookWindowsHookEx(hookKeyboard);
				hookMouse = NULL;
				hookKeyboard = NULL;
			}
			onButtonUp();
			::DestroyWindow(_hSelf);
			return TRUE;
		}
		case DMM_CANCEL_MOVE:
		{
			POINT			pt			= {0,0};
			POINT			ptBuf		= {0,0};

			::GetCursorPos(&pt);
			getMousePoints(&pt, &ptBuf);

			/* erase last drawn rectangle */
			drawRectangle(NULL);

			/* end hooking */
			::UnhookWindowsHookEx(hookMouse);
			::UnhookWindowsHookEx(hookKeyboard);

			::DestroyWindow(_hSelf);
			return FALSE;
		}
		case WM_DESTROY:
		{
			mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
			::SetWindowPos(_hParent, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
			_pCont->focusClient();
			delete this;
			break;
		}
		default:
			break;
	}

	return ::DefWindowProc(_hSelf, message, wParam, lParam);
}