Beispiel #1
0
	// Constructor that takes one argument.
	public command(int gvn_action, bool gvn_onUnit, Vector2 gvn_mousePosition, unitController gvn_unit)
	{
   		action = gvn_action;
		onUnit = gvn_onUnit;
		mousePosition = gvn_mousePosition;
		unit = gvn_unit;
	}
Beispiel #2
0
	public override void perform(int action, bool onUnit, Vector2 mousePosition, unitController unit){
		if(action == 1){
			aggroOn = false;
			holdingPos = false;
			idle = false;
			isMoving = true;
			attackTarget = null;
			isDuringAttack = false;
			if(onUnit == true){
				aggroOn = true;
	    		followUnit = unit.transform;
			} else {
				followUnit = null;
				targetLocation = mousePosition;
			}
		} else if(action == 2){
			aggroOn = true;
			holdingPos = false;
			idle = false;
			isMoving = true;
			if(onUnit == true){
	    		followUnit = unit.transform;
			} else {
				followUnit = null;
				targetLocation = mousePosition;
			}
		}
	}
Beispiel #3
0
	//initialization
	void Start () {
		isCasting = false;
		units = new unitController[sizeLimit];
		castingUnits = new unitController[sizeLimit];
		unitsSize = 0;
		castingUnitsSize = 0;
		draggingActive = false;
		actionSelected = 1;
	}
Beispiel #4
0
	//performs an action
	public override void perform(int action, bool onUnit, Vector2 mousePosition, unitController unit){
		if(action == 1){
			if(onUnit){
				targetUnit = unit.transform;
			} else {
				targetUnit = null;
			}
			targetLocation = mousePosition;			
		}
	}
Beispiel #5
0
	private void saveCommand(int index, int action, bool onUnit, Vector2 mousePosition, unitController unit){
		if(index < commandQueueSize)
			commandQueue[index] = new command(action, onUnit, mousePosition, unit);
	}
Beispiel #6
0
	public virtual void perform(int action, bool onUnit, Vector2 mousePosition, unitController unit){
	}
Beispiel #7
0
    void Update() {
    	//dragging the map
    	if(Input.GetKeyDown(Drag)){
    		mouseInitialPosisiton = Input.mousePosition;
    		oldCamPostion = transform.position;
    		return;
    	} else if(Input.GetKey(Drag)){
    		Vector2 difference = (Vector2)Input.mousePosition - mouseInitialPosisiton;
    		transform.position = Vector3.Lerp(transform.position, oldCamPostion - (Vector3)difference * dragSpeed  * getScaledDraggingSpeed(), Time.deltaTime * 50f);
    		return;
		} else if(Input.GetKeyUp(Drag)){
			return;
		}

		//moving map using screen edges
		if(Input.mousePosition.y > Camera.main.pixelHeight - 4){
			transform.position += Vector3.up * Time.deltaTime * scrollSpeed * getScaledDraggingSpeed();
		} else if(Input.mousePosition.y < 4){
			transform.position -= Vector3.up * Time.deltaTime * scrollSpeed * getScaledDraggingSpeed();
		} if(Input.mousePosition.x > Camera.main.pixelWidth - 4){
			transform.position += Vector3.right * Time.deltaTime * scrollSpeed * getScaledDraggingSpeed();
		} else if(Input.mousePosition.x < 4){
			transform.position -= Vector3.right * Time.deltaTime * scrollSpeed * getScaledDraggingSpeed();
		}

		//Scroll Wheel Operations (needs updateing to redefinable keys)
		transform.position = transform.position + Vector3.forward * transform.position.z * (Input.GetAxis("Mouse ScrollWheel"));
		if(transform.position.z < -120){
			transform.position = transform.position - Vector3.forward * (transform.position.z + 120);
		} else if(transform.position.z > -15){
			transform.position = transform.position - Vector3.forward * (transform.position.z + 15);
		}

		//converts mouse position into map position
		Ray test = Camera.main.ScreenPointToRay(Input.mousePosition);
		float zDistance = transform.position.z/test.direction.z * -1;
		Debug.DrawRay(test.origin, test.direction * zDistance, Color.red);
		Vector3 point = test.origin + test.direction * zDistance;
    	Vector2 mousePosition = new Vector2();
    	mousePosition.x = point.x;
    	mousePosition.y = point.y;

    	//performs dragging selection
    	if(determineDragging(mousePosition))
    		return;

		//Highlights units below the mouse
		Collider2D unitBelowCollider = Physics2D.OverlapPoint(mousePosition, unitsLayer);
		if(unitBelowCollider != null)
			unitBelowCollider.gameObject.GetComponent<unitController>().highlightUnit();

    	//Waits to cast an action
    	if(isCasting == true && !Input.GetKeyUp(Cancel)){
    		if(Input.GetKeyUp(Activate)){
    			//Uses special moving algorithm to avoid collisions (if the distance moving is big move units keeping their relative position to eachother)
    			if(actionSelected == 2){
    			    			if(unitBelowCollider == null){
    			    				Instantiate(attackActionOnMap, (Vector3)mousePosition, Quaternion.Euler(0,0,0));
					    			if(unitsSize != 0){
						    			float max_x = units[0].gameObject.transform.position.x;
						    			float max_y = units[0].gameObject.transform.position.y;
						    			float min_x = units[0].gameObject.transform.position.x;
						    			float min_y = units[0].gameObject.transform.position.y;
						    			for(int i = 1; i < unitsSize; i++){
								    		if(max_x < units[i].gameObject.transform.position.x){
								    			max_x = units[i].gameObject.transform.position.x;
								    		}
								    		if(min_x > units[i].gameObject.transform.position.x){
								    			min_x = units[i].gameObject.transform.position.x;
								    		}
								    		if(max_y < units[i].gameObject.transform.position.y){
								    			max_y = units[i].gameObject.transform.position.y;
								    		}
								    		if(min_y > units[i].gameObject.transform.position.y){
								    			min_y = units[i].gameObject.transform.position.y;
								    		}
								  		}
								  		Vector2 groupPos = new Vector2((max_x + min_x)/2, (max_y + min_y)/2);
								  		Vector2 moveVec = mousePosition - groupPos;
								  		float sizeOfGroup = new Vector2(max_x - min_x, max_y - min_y).magnitude;
								  		//moves normally
								  		if((mousePosition - groupPos).magnitude < sizeOfGroup){
								  			for(int i = 0; i < unitsSize; i++){
									    		units[i].perform(2, false, mousePosition, null);
								  			}
								  		//moves parallel
							  			} else {
							  				for(int i = 0; i < unitsSize; i++){
									    		units[i].perform(2, false, (Vector2)units[i].gameObject.transform.position + moveVec, null);
								  			}
							  			}
							  		}
							  	} else {
							  		unitBelowCollider.gameObject.GetComponent<unitController>().activate();
							  		for(int i = 0; i < unitsSize; i++){
							  			units[i].perform(2, true, mousePosition, unitBelowCollider.gameObject.GetComponent<unitController>());
							  		}
							  	}
				} else {
	    			unitController unitBelow = null;
	    			bool onUnit = false;
					if(unitBelowCollider != null){
						unitBelow = unitBelowCollider.gameObject.GetComponent<unitController>();
						unitBelow.activate();
						onUnit = true;
					}
					Instantiate(attackActionOnMap, (Vector3)mousePosition, Quaternion.Euler(0,0,0));
					for(int i = 0; i < castingUnitsSize; i++){
			    		castingUnits[i].perform(actionSelected, onUnit, mousePosition, unitBelow);
			  		}
			    }
			    isCasting = false;
    		}

		//General Actions
    	} else {

    		//Pressing Select
    		if(Input.GetKeyUp(Select)){
		    	if(unitBelowCollider != null){
		    		if(Input.GetKey(Shift)){
		    			if(Input.GetKey(Control)){
		    				//todo
		    			} else {
	    					unitController unit = unitBelowCollider.gameObject.GetComponent<unitController>();
							if(unitAlreadyHeld(unit)){
								removeUnit(unit);
							} else {
								addUnit(unit);
							}
		    			}
					} else {
						removeUnits();
						addUnit(unitBelowCollider.gameObject.GetComponent<unitController>());
					}
	    		}
	    	//Pressing Move
    		} else if(Input.GetKeyUp(Move)){
    			if(unitBelowCollider == null){
    				Instantiate(actionOnMap, (Vector3)mousePosition, Quaternion.Euler(0,0,0));
	    			//Uses special moving algorithm to avoid collisions (if the distance moving is big move units keeping their relative position to eachother)
	    			//determines if distance is big
	    			if(unitsSize != 0){
		    			float max_x = units[0].gameObject.transform.position.x;
		    			float max_y = units[0].gameObject.transform.position.y;
		    			float min_x = units[0].gameObject.transform.position.x;
		    			float min_y = units[0].gameObject.transform.position.y;
		    			for(int i = 1; i < unitsSize; i++){
				    		if(max_x < units[i].gameObject.transform.position.x){
				    			max_x = units[i].gameObject.transform.position.x;
				    		}
				    		if(min_x > units[i].gameObject.transform.position.x){
				    			min_x = units[i].gameObject.transform.position.x;
				    		}
				    		if(max_y < units[i].gameObject.transform.position.y){
				    			max_y = units[i].gameObject.transform.position.y;
				    		}
				    		if(min_y > units[i].gameObject.transform.position.y){
				    			min_y = units[i].gameObject.transform.position.y;
				    		}
				  		}
				  		Vector2 groupPos = new Vector2((max_x + min_x)/2, (max_y + min_y)/2);
				  		Vector2 moveVec = mousePosition - groupPos;
				  		float sizeOfGroup = new Vector2(max_x - min_x, max_y - min_y).magnitude;
				  		//moves normally
				  		if((mousePosition - groupPos).magnitude < sizeOfGroup){
				  			for(int i = 0; i < unitsSize; i++){
					    		units[i].perform(1, false, mousePosition, null);
				  			}
				  		//moves parallel
			  			} else {
			  				for(int i = 0; i < unitsSize; i++){
					    		units[i].perform(1, false, (Vector2)units[i].gameObject.transform.position + moveVec, null);
				  			}
			  			}
			  		}
			  	} else {
			  		unitBelowCollider.gameObject.GetComponent<unitController>().activate();
			  		for(int i = 0; i < unitsSize; i++){
			  			units[i].perform(1, true, mousePosition, unitBelowCollider.gameObject.GetComponent<unitController>());
			  		}
			  	}
		  	//Pressing Attack
    		}  else if(Input.GetKeyUp(Attack)){
    			setAction(2);
    		}  else if(Input.GetKeyUp(Function1)){
    			setAction(3);
    		}  else if(Input.GetKeyUp(Function2)){
    			setAction(4);
    		}  else if(Input.GetKeyUp(Function3)){
    			setAction(5);
    		}  else if(Input.GetKeyUp(Function4)){
    			setAction(6);
    		}  else if(Input.GetKeyUp(Function5)){
    			setAction(7);
    		}  else if(Input.GetKeyUp(Function6)){
    			setAction(8);
    		}  else if(Input.GetKeyUp(Function7)){
    			setAction(9);
    		}  else if(Input.GetKeyUp(Function8)){
    			setAction(10);
    		}  else if(Input.GetKeyUp(HoldPosition)){
    			setAction(11);
    		}

    	}
    }
Beispiel #8
0
    //removes a unit from control
    public void removeUnit(unitController unit){
    	for(int i = 0; i < unitsSize; i++){
    		if(units[i] == unit){
    			units[i].deselect();
    			for(int j = i + 1; j < unitsSize; j++)
    				units[j - 1] = units[j];
    			unitsSize--;
    			break;
    		}
  		}
	}
Beispiel #9
0
   //checks if unit is already under control
   bool unitAlreadyHeld(unitController unit){
   	for(int i = 0; i < unitsSize; i++){
   		if(units[i] == unit){
   			return true;
   		}
 		}
 		return false;
   }
Beispiel #10
0
    //adds a unit to controlled units
    bool addUnit(unitController unit){
    	if(unitsSize == sizeLimit)
			return true;
		if(unitAlreadyHeld(unit))
			return false;
		unit.showSelected();
    	units[unitsSize] = unit;
		unitsSize++;
		return false;
    }