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); }
void ofxTLZoomer::setViewRange(ofRange newRange){ ofxTLZoomEventArgs zoomEvent; zoomEvent.oldZoom = getViewRange(); zoomEvent.sender = timeline; currentViewRange = newRange; zoomEvent.currentZoom = getViewRange(); ofNotifyEvent(events().zoomEnded, zoomEvent); }
void ofxTLZoomer::notifyZoomEnded(){ ofxTLZoomEventArgs zoomEvent; zoomEvent.sender = timeline; //zoomEvent.currentZoom = currentViewRange; zoomEvent.currentZoom = getViewRange(); ofNotifyEvent(events().zoomEnded, zoomEvent); }
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); } }
void ofxTLZoomer::notifyZoomDragged(ofRange oldRange){ ofxTLZoomEventArgs zoomEvent; zoomEvent.sender = timeline; zoomEvent.oldZoom = oldRange; //zoomEvent.currentZoom = currentViewRange; zoomEvent.currentZoom = getViewRange(); ofNotifyEvent(events().zoomDragged, zoomEvent); }
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(); }
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(); }