Пример #1
0
bool UnitBase::isInAttackRange(const ObjectBase* pObject) const {
	int checkRange;
    switch(attackMode) {
        case GUARD: {
            checkRange = getWeaponRange();
        } break;

        case AREAGUARD: {
            checkRange = getAreaGuardRange() + getWeaponRange() + 1;
        } break;

        case AMBUSH: {
            checkRange = getViewRange() + 1;
        } break;

        case HUNT: {
            return true;
        } break;

        case STOP:
        default: {
            return false;
        } break;
    }

    if(getItemID() == Unit_Sandworm) {
        checkRange = getViewRange() + 1;
    }

    return (blockDistance(guardPoint*TILESIZE + Coord(TILESIZE/2, TILESIZE/2), pObject->getCenterPoint()) <= checkRange*TILESIZE);
}
Пример #2
0
void ofxTLZoomer::setViewRange(ofRange newRange){

	ofxTLZoomEventArgs zoomEvent;
    zoomEvent.oldZoom = getViewRange();
    zoomEvent.sender = timeline;

	currentViewRange = newRange;
	zoomEvent.currentZoom = getViewRange();
	ofNotifyEvent(events().zoomEnded, zoomEvent); 
}
Пример #3
0
void ofxTLZoomer::notifyZoomEnded(){
	ofxTLZoomEventArgs zoomEvent;
    zoomEvent.sender = timeline;    
	//zoomEvent.currentZoom = currentViewRange;
	zoomEvent.currentZoom = getViewRange();
	ofNotifyEvent(events().zoomEnded, zoomEvent);
}
Пример #4
0
void ofxTLZoomer::mouseDragged(ofMouseEventArgs& args) {
    
	if(!enabled) return;
	
    bool notify = false;
	ofRange oldRange = getViewRange();
	if(minSelected || midSelected){
		float originalMin = currentViewRange.min;
		currentViewRange.min = ofClamp( screenXtoNormalizedX(args.x-minGrabOffset, ofRange(0, 1.0)), 0, currentViewRange.max-.01);
		if(minSelected){
			currentViewRange.max = ofClamp( currentViewRange.max + (originalMin-currentViewRange.min), currentViewRange.min+.01, 1.0);
		}
		notify = true;
	}

	if(maxSelected || midSelected){
		float originalMax = currentViewRange.max;
		currentViewRange.max = ofClamp( screenXtoNormalizedX(args.x-maxGrabOffset, ofRange(0, 1.0)), currentViewRange.min+.01, 1.0);
		if(maxSelected){
			currentViewRange.min = ofClamp( currentViewRange.min + (originalMax-currentViewRange.max), 0, currentViewRange.max-.01);
		}
        notify = true;
    }
	
    if(notify){
        notifyZoomDragged(oldRange);
    }
}
Пример #5
0
void ofxTLZoomer::notifyZoomDragged(ofRange oldRange){
	ofxTLZoomEventArgs zoomEvent;
    zoomEvent.sender = timeline;
	zoomEvent.oldZoom = oldRange;
	//zoomEvent.currentZoom = currentViewRange;
	zoomEvent.currentZoom = getViewRange();
	ofNotifyEvent(events().zoomDragged, zoomEvent);
}
Пример #6
0
void ofxTLZoomer::draw(){
	
	ofPushStyle();
	ofSetColor(timeline->getColors().textColor);
	//draw min
	float screenY = bounds.y + bounds.height/2.0;
	float minScreenX = normalizedXtoScreenX(currentViewRange.min, ofRange(0,1.0));
	float maxScreenX = normalizedXtoScreenX(currentViewRange.max, ofRange(0,1.0));

	if(midSelected){
		ofSetLineWidth(2);
	}
	else{
		ofSetLineWidth(1);
	}

	ofLine(minScreenX, screenY, maxScreenX, screenY);
	ofSetLineWidth(1);

	if(minSelected){
		ofFill();
	}
	else{
		ofNoFill();
	}
	ofCircle(minScreenX, screenY, 5);

	if(maxSelected){
		ofFill();
	}
	else{
		ofNoFill();
	}
	ofCircle(maxScreenX, screenY, 5);

//	cout << "zoomer bounds width " << bounds.width << endl;
	//draw playhead reference
	ofLine(bounds.x+bounds.width*timeline->getPercentComplete(), bounds.y,
		   bounds.x+bounds.width*timeline->getPercentComplete(), bounds.y+bounds.height);
	//draw zoom region reference
	ofSetColor(timeline->getColors().backgroundColor);
	ofRange actualZoom = getViewRange();
	ofRectangle zoomRegion = ofRectangle(bounds.x + bounds.width*actualZoom.min, bounds.y,
										 bounds.width*actualZoom.span(),bounds.height);
	ofFill();
	ofSetColor(timeline->getColors().keyColor, 50);
	ofRect(zoomRegion);
	ofPopStyle();
}
Пример #7
0
void UnitBase::move() {

	if(!moving && !justStoppedMoving && (isAFlyingUnit() == false) && currentGame->randomGen.rand(0,40) == 0 && itemID != Unit_Sandworm) {
		currentGameMap->viewMap(owner->getTeam(), location, getViewRange() );
	}

	if(moving && !justStoppedMoving) {
		if((isBadlyDamaged() == false) || isAFlyingUnit()) {
			realX += xSpeed;
			realY += ySpeed;
		} else {
			realX += xSpeed/2;
			realY += ySpeed/2;
		}

		// check if vehicle is on the first half of the way
		float fromDistanceX;
		float fromDistanceY;
		float toDistanceX;
		float toDistanceY;
		if(location != nextSpot) {
		    // check if vehicle is half way out of old tile

		    fromDistanceX = strictmath::abs(location.x*TILESIZE - (realX-bumpyOffsetX) + TILESIZE/2);
		    fromDistanceY = strictmath::abs(location.y*TILESIZE - (realY-bumpyOffsetY) + TILESIZE/2);
		    toDistanceX = strictmath::abs(nextSpot.x*TILESIZE - (realX-bumpyOffsetX) + TILESIZE/2);
		    toDistanceY = strictmath::abs(nextSpot.y*TILESIZE - (realY-bumpyOffsetY) + TILESIZE/2);

            if((fromDistanceX >= TILESIZE/2) || (fromDistanceY >= TILESIZE/2)) {
                // let something else go in
                unassignFromMap(location);
                oldLocation = location;
                location = nextSpot;

                if(isAFlyingUnit() == false && itemID != Unit_Sandworm) {
                    currentGameMap->viewMap(owner->getTeam(), location, getViewRange());
                }
		    }

		} else {
			// if vehicle is out of old tile

			fromDistanceX = strictmath::abs(oldLocation.x*TILESIZE - (realX-bumpyOffsetX) + TILESIZE/2);
		    fromDistanceY = strictmath::abs(oldLocation.y*TILESIZE - (realY-bumpyOffsetY) + TILESIZE/2);
		    toDistanceX = strictmath::abs(location.x*TILESIZE - (realX-bumpyOffsetX) + TILESIZE/2);
		    toDistanceY = strictmath::abs(location.y*TILESIZE - (realY-bumpyOffsetY) + TILESIZE/2);

			if ((fromDistanceX >= TILESIZE) || (fromDistanceY >= TILESIZE)) {

				if(forced && (location == destination) && !target) {
					setForced(false);
				}

				moving = false;
				justStoppedMoving = true;
				realX = location.x * TILESIZE + TILESIZE/2;
                realY = location.y * TILESIZE + TILESIZE/2;
                bumpyOffsetX = 0.0f;
                bumpyOffsetY = 0.0f;

                oldLocation.invalidate();
			}

		}

		bumpyMovementOnRock(fromDistanceX, fromDistanceY, toDistanceX, toDistanceY);

	} else {
		justStoppedMoving = false;
	}

	checkPos();
}