void LHParallax::visit(Renderer *renderer, const Mat4& parentTransform, bool parentTransformUpdated) #endif { visitActiveAnimation(); transformLayerPositions(); if(renderer) { #if COCOS2D_VERSION >= 0x00030200 Node::visit(renderer, parentTransform, parentFlags); #else Node::visit(renderer, parentTransform, parentTransformUpdated); #endif } }
void LHShape::visit(Renderer *renderer, const Mat4& parentTransform, bool parentTransformUpdated) #endif { visitPhysicsProtocol(); visitActiveAnimation(); if(renderer) { #if COCOS2D_VERSION >= 0x00030200 Node::visit(renderer, parentTransform, parentFlags); #else Node::visit(renderer, parentTransform, parentTransformUpdated); #endif } }
void LHCamera::performVisit() { if(!isActive())return; Node* followed = this->followedNode(); if(followed){ LHScene* scene = (LHScene*)this->getScene(); Size winSize = scene->getContentSize(); Point curPosition = followed->getPosition(); if(previousFollowedPosition.equals(Point())){ previousFollowedPosition = curPosition; directionalOffset.x = -importantArea.width * winSize.width * 0.5; directionalOffset.y = importantArea.height * winSize.height * 0.5; } if(!curPosition.equals(previousFollowedPosition)) { Point direction = curPosition - previousFollowedPosition;// ccpSub(curPosition,previousFollowedPosition); if(previousFollowedPosition.equals(Point())){ previousDirectionVector = direction; } float followedDeltaX = curPosition.x - previousFollowedPosition.x; float followedDeltaY = curPosition.y - previousFollowedPosition.y; float filteringFactor = 0.50; if(reachingOffsetX) { float lastOffset = directionalOffset.x; directionalOffset.x += followedDeltaX; if(smoothMovement) directionalOffset.x = directionalOffset.x * filteringFactor + lastOffset * (1.0 - filteringFactor); if(directionMultiplierX > 0) { if(directionalOffset.x < directionalOffsetToReach.x) { directionalOffset.x = directionalOffsetToReach.x; reachingOffsetX = false; } } else { if(directionalOffset.x > directionalOffsetToReach.x) { directionalOffset.x = directionalOffsetToReach.x; reachingOffsetX = false; } } } if(direction.x/previousDirectionVector.x <= 0 || (direction.x == 0 && previousDirectionVector.x == 0)) { if(direction.x >= 0){ directionMultiplierX = -1.0f; } else{ directionMultiplierX = 1.0f; } directionalOffsetToReach.x = -importantArea.width * winSize.width * 0.5 * directionMultiplierX; reachingOffsetX = true; } if(reachingOffsetY) { float lastOffset = directionalOffset.y; directionalOffset.y += followedDeltaY; if(smoothMovement) directionalOffset.y = directionalOffset.y * filteringFactor + lastOffset * (1.0 - filteringFactor); if(directionMultiplierY > 0) { if(directionalOffset.y > directionalOffsetToReach.y) { directionalOffset.y = directionalOffsetToReach.y; reachingOffsetY = false; } } else { if(directionalOffset.y < directionalOffsetToReach.y) { directionalOffset.y = directionalOffsetToReach.y; reachingOffsetY = false; } } } if(direction.y/previousDirectionVector.y <= 0 || (direction.y == 0 && previousDirectionVector.y == 0)) { if(direction.y >= 0){ directionMultiplierY = 1.0f; } else{ directionMultiplierY = -1.0f; } directionalOffsetToReach.y = importantArea.height * winSize.height * 0.5 * directionMultiplierY; reachingOffsetY = true; } previousDirectionVector = direction; } previousFollowedPosition = curPosition; } visitActiveAnimation(); if(followedNode()){ Point pt = transformToRestrictivePosition(followedNode()->getPosition()); setPosition(pt); } setSceneView(); }