// // ToyClipToAction.cpp // SteveMaggieCpp // // Created by Katarzyna Kalinowska-Górska on 24.06.2017. // // #include #include "ToyClipToAction.h" ClipTo* ClipTo::create(float duration, const cocos2d::Rect& newRect) { ClipTo *ret = new (std::nothrow) ClipTo(); if (ret && ret->initWithDuration(duration, newRect)) { ret->autorelease(); return ret; } delete ret; return nullptr; } bool ClipTo::initWithDuration(float duration, const cocos2d::Rect& newRect) { bool ret = false; if (ActionInterval::initWithDuration(duration)) { _toRect = newRect; ret = true; } return ret; } ClipTo* ClipTo::clone() const { // no copy constructor return ClipTo::create(_duration, _toRect); } void ClipTo::startWithTarget(cocos2d::Node *target) { ActionInterval::startWithTarget(target); auto targetSprite = dynamic_cast(target); if(targetSprite){ _startRect = targetSprite->getTextureRect(); _deltaX = _toRect.origin.x - _startRect.origin.x; _deltaY = _toRect.origin.y - _startRect.origin.y; _deltaW = _toRect.size.width - _startRect.size.width; _deltaH = _toRect.size.height - _startRect.size.height; } } ClipTo* ClipTo::reverse() const { CCASSERT(false, "reverse() not supported in ClipTo"); return nullptr; } void ClipTo::update(float t) { if (_target) { auto targetSprite = dynamic_cast(_target); if(targetSprite){ auto dx = _deltaX*t; auto dy = _deltaY*t; auto dw = _deltaW*t; auto dh = _deltaH*t; cocos2d::Rect newRect = cocos2d::Rect(MAX(_startRect.origin.x + dx,0), MAX(_startRect.origin.y + dy,0), MAX(_startRect.size.width + dw,0), MAX(_startRect.size.height + dh,0)); targetSprite->setTextureRect(newRect); targetSprite->setContentSize(newRect.size); } } }