private void reloadIcons()
    {
        if (activeAbil != Abilities.AbilityType.none)
        {
            abilityInReuse = true;
        }
        else if (activeAbil == Abilities.AbilityType.none && abilityInReuse)
        {
            abilityInReuse = false;
        }


        abilitiesGameObjects[0].GetComponent <SpriteRenderer>().sprite = Templates.AbilitiesIcons.getIcon(Abilities.AbilityType.none, true);
        for (i = 0; i < planeTemplate.abilities.Count; i++)
        {
            if (abilityInReuse)
            {
                abilitiesGameObjects[i + 1].tag = "abil_reused";
                abilitiesGameObjects[i + 1].GetComponent <SpriteRenderer>().sprite = Templates.AbilitiesIcons.getIconGrey((Abilities.AbilityType)planeTemplate.abilities[i], false);
            }
            else
            {
                abilitiesGameObjects[i + 1].tag = "abil_" + (i + 1);
                abilitiesGameObjects[i + 1].GetComponent <SpriteRenderer>().sprite = Templates.AbilitiesIcons.getIcon((Abilities.AbilityType)planeTemplate.abilities[i], false);
            }
        }
        selectedAbilPosition = 0;
        activeAbil           = Abilities.AbilityType.none;
        CalculatePath();
    }
	private void reloadIcons()
	{
		if(activeAbil!=Abilities.AbilityType.none)
			abilityInReuse=true;
		else if(activeAbil==Abilities.AbilityType.none && abilityInReuse)
			abilityInReuse=false;
		
		
		abilitiesGameObjects[0].GetComponent<SpriteRenderer>().sprite=Templates.AbilitiesIcons.getIcon(Abilities.AbilityType.none,true);
		for(i=0;i<planeTemplate.abilities.Count;i++)
		{
			if(abilityInReuse)
			{
				abilitiesGameObjects[i+1].tag="abil_reused";
				abilitiesGameObjects[i+1].GetComponent<SpriteRenderer>().sprite=Templates.AbilitiesIcons.getIconGrey((Abilities.AbilityType)planeTemplate.abilities[i],false);
			}
			else
			{
				abilitiesGameObjects[i+1].tag="abil_"+(i+1);
				abilitiesGameObjects[i+1].GetComponent<SpriteRenderer>().sprite=Templates.AbilitiesIcons.getIcon((Abilities.AbilityType)planeTemplate.abilities[i],false);
			}
		}
		selectedAbilPosition=0;
		activeAbil=Abilities.AbilityType.none;
		CalculatePath();
	}
	public void onAbilitySwitched(int abilNumber)
	{
		if(abilNumber!=-1)
		{
			if(activeAbil==Abilities.AbilityType.none)
			{
				abilitiesGameObjects[0].GetComponent<SpriteRenderer>().sprite=Templates.AbilitiesIcons.getIcon((Abilities.AbilityType)planeTemplate.abilities[abilNumber-1],true);
				abilitiesGameObjects[abilNumber].GetComponent<SpriteRenderer>().sprite=Templates.AbilitiesIcons.getIcon(Abilities.AbilityType.none,false);
				selectedAbilPosition=abilNumber;
				prevAbil=Abilities.AbilityType.none;
				activeAbil=(Abilities.AbilityType) planeTemplate.abilities[abilNumber-1];
				
				abilitiesGameObjects[0].transform.eulerAngles=forActiveAbil;
			}
			else
			{
				if(activeAbil==(Abilities.AbilityType)planeTemplate.abilities[abilNumber-1])
				{
					prevAbil=activeAbil;
					abilitiesGameObjects[0].GetComponent<SpriteRenderer>().sprite=Templates.AbilitiesIcons.getIcon(Abilities.AbilityType.none,true);
					abilitiesGameObjects[abilNumber].GetComponent<SpriteRenderer>().sprite=Templates.AbilitiesIcons.getIcon(activeAbil,false);
					selectedAbilPosition=0;
					activeAbil=Abilities.AbilityType.none;
					CalculatePath();
				}
				else
				{
					prevAbil=activeAbil;
					abilitiesGameObjects[0].GetComponent<SpriteRenderer>().sprite=Templates.AbilitiesIcons.getIcon((Abilities.AbilityType)planeTemplate.abilities[abilNumber-1],true);
					abilitiesGameObjects[selectedAbilPosition].GetComponent<SpriteRenderer>().sprite=Templates.AbilitiesIcons.getIcon(activeAbil,false);
					abilitiesGameObjects[abilNumber].GetComponent<SpriteRenderer>().sprite=Templates.AbilitiesIcons.getIcon(Abilities.AbilityType.none,false);
					activeAbil=(Abilities.AbilityType) planeTemplate.abilities[abilNumber-1];
					selectedAbilPosition=abilNumber;
				}
			}
		}
		
		if(activeAbil==Abilities.AbilityType.none || activeAbil==Abilities.AbilityType.gas || activeAbil==Abilities.AbilityType.homingMissle || activeAbil==Abilities.AbilityType.homingThorpede || activeAbil==Abilities.AbilityType.mines || activeAbil==Abilities.AbilityType.shield)
		{
			maxLen=planeTemplate.maxRange;
			minLen=planeTemplate.minRange;
			maxAngle=planeTemplate.maxTurnAngle;
			attackIcon.transform.localPosition=Quaternion.Euler(0,0,-attackIconAngleLast)*new Vector3(0,-maxLen,0);
		}
		
		if(activeAbil==Abilities.AbilityType.halfRoundTurn)
		{
			maxLen=planeTemplate.minRange;
			minLen=planeTemplate.minRange;
			maxAngle=0.0f;
			abilRandonRotateDirection=Random.Range(0,2);
			if(abilRandonRotateDirection==0) abilRandonRotateDirection=-1;
			//Debug.Log("RA: "+abilRandonRotateDirection);
			attackIcon.transform.localPosition=new Vector3(0,-maxLen,0);
		}
		
		if(activeAbil==Abilities.AbilityType.turnAround)
		{
			maxLen=0.7f*planeTemplate.maxRange;
			minLen=0.7f*planeTemplate.maxRange;
			maxAngle=planeTemplate.maxTurnAngle;
			abilRandonRotateDirection=Random.Range(0,2);
			if(abilRandonRotateDirection==0) abilRandonRotateDirection=-1;
			attackIcon.transform.localPosition=Quaternion.Euler(0,0,-attackIconAngleLast)*new Vector3(0,-maxLen,0);
		}
		
		if(activeAbil==Abilities.AbilityType.doubleThrottle)
		{
			maxLen=2*planeTemplate.maxRange;
			minLen=2*planeTemplate.minRange;
			maxAngle=planeTemplate.maxTurnAngle;
			attackIcon.transform.localPosition=Quaternion.Euler(0,0,-attackIconAngleLast)*new Vector3(0,-maxLen,0);
		}
		
		CalculatePath();
		if(activeAbil!=Abilities.AbilityType.none)
			abilitiesGameObjects[0].transform.eulerAngles=forActiveAbil;
		abilitiesGameObjects[1].transform.eulerAngles=forAbilities;
		abilitiesGameObjects[2].transform.eulerAngles=forAbilities;
		abilitiesGameObjects[3].transform.eulerAngles=forAbilities;
		abilitiesGameObjects[4].transform.eulerAngles=forAbilities;
	}
 public void Die()
 {
     if(activeAbil!=Abilities.AbilityType.none && !abilityInReuse)
     {
         prevAbil=activeAbil;
         abilityInReuse=true;
         activeAbil=Abilities.AbilityType.none;
         AbilitySwitched();
     }
     GameStorage.getInstance().removeEnemyShuttle(this.gameObject);
 }
    void TryChoiceAbil()
    {
        if(temp.abilities.Count>0)
        {
            if(UnityEngine.Random.Range(0,100)<=Abilities.aiUseAbilityChance)
            {
                prevAbil=activeAbil;
                activeAbil=(Abilities.AbilityType) temp.abilities[UnityEngine.Random.Range(0,temp.abilities.Count)];

                if(activeAbil==Abilities.AbilityType.halfRoundTurn || activeAbil==Abilities.AbilityType.turnAround)
                {
                    GameObject ff = GameStorage.getInstance().getNearbyFriendly(gameObject);
                    if(ff!=null)
                    {
                        if(Vector2.Distance(new Vector2(ff.transform.position.x,ff.transform.position.z),new Vector2(transform.position.x,transform.position.z))>Abilities.aiUse180360abilitiesRange)
                        {
                            activeAbil=prevAbil;
                            return;
                        }
                    }
                }

                AbilitySwitched();
                Debug.Log(activeAbil);
            }
        }
    }
    public void StepEnd()
    {
        if(activeAbil==Abilities.AbilityType.none && abilityInReuse)
        {
            abilityInReuse=false;
        }

        if(activeAbil!=Abilities.AbilityType.none && !abilityInReuse)
        {
            prevAbil=activeAbil;
            abilityInReuse=true;
            activeAbil=Abilities.AbilityType.none;
            AbilitySwitched();
        }
        if(defectInUse)
        {
            defectInUse=false;
            earnedDefect=false;
            curDefect=null;
        }
        t=0;

        if(!abilityInReuse && !earnedDefect)
            TryChoiceAbil();
    }
    public void onAbilitySwitched(int abilNumber)
    {
        if (abilNumber != -1)
        {
            if (activeAbil == Abilities.AbilityType.none)
            {
                abilitiesGameObjects[0].GetComponent <SpriteRenderer>().sprite          = Templates.AbilitiesIcons.getIcon((Abilities.AbilityType)planeTemplate.abilities[abilNumber - 1], true);
                abilitiesGameObjects[abilNumber].GetComponent <SpriteRenderer>().sprite = Templates.AbilitiesIcons.getIcon(Abilities.AbilityType.none, false);
                selectedAbilPosition = abilNumber;
                prevAbil             = Abilities.AbilityType.none;
                activeAbil           = (Abilities.AbilityType)planeTemplate.abilities[abilNumber - 1];

                abilitiesGameObjects[0].transform.eulerAngles = forActiveAbil;
            }
            else
            {
                if (activeAbil == (Abilities.AbilityType)planeTemplate.abilities[abilNumber - 1])
                {
                    prevAbil = activeAbil;
                    abilitiesGameObjects[0].GetComponent <SpriteRenderer>().sprite          = Templates.AbilitiesIcons.getIcon(Abilities.AbilityType.none, true);
                    abilitiesGameObjects[abilNumber].GetComponent <SpriteRenderer>().sprite = Templates.AbilitiesIcons.getIcon(activeAbil, false);
                    selectedAbilPosition = 0;
                    activeAbil           = Abilities.AbilityType.none;
                    CalculatePath();
                }
                else
                {
                    prevAbil = activeAbil;
                    abilitiesGameObjects[0].GetComponent <SpriteRenderer>().sprite = Templates.AbilitiesIcons.getIcon((Abilities.AbilityType)planeTemplate.abilities[abilNumber - 1], true);
                    abilitiesGameObjects[selectedAbilPosition].GetComponent <SpriteRenderer>().sprite = Templates.AbilitiesIcons.getIcon(activeAbil, false);
                    abilitiesGameObjects[abilNumber].GetComponent <SpriteRenderer>().sprite           = Templates.AbilitiesIcons.getIcon(Abilities.AbilityType.none, false);
                    activeAbil           = (Abilities.AbilityType)planeTemplate.abilities[abilNumber - 1];
                    selectedAbilPosition = abilNumber;
                }
            }
        }

        if (activeAbil == Abilities.AbilityType.none || activeAbil == Abilities.AbilityType.gas || activeAbil == Abilities.AbilityType.homingMissle || activeAbil == Abilities.AbilityType.homingThorpede || activeAbil == Abilities.AbilityType.mines || activeAbil == Abilities.AbilityType.shield)
        {
            maxLen   = planeTemplate.maxRange;
            minLen   = planeTemplate.minRange;
            maxAngle = planeTemplate.maxTurnAngle;
            attackIcon.transform.localPosition = Quaternion.Euler(0, 0, -attackIconAngleLast) * new Vector3(0, -maxLen, 0);
        }

        if (activeAbil == Abilities.AbilityType.halfRoundTurn)
        {
            maxLen   = planeTemplate.minRange;
            minLen   = planeTemplate.minRange;
            maxAngle = 0.0f;
            abilRandonRotateDirection = Random.Range(0, 2);
            if (abilRandonRotateDirection == 0)
            {
                abilRandonRotateDirection = -1;
            }
            //Debug.Log("RA: "+abilRandonRotateDirection);
            attackIcon.transform.localPosition = new Vector3(0, -maxLen, 0);
        }

        if (activeAbil == Abilities.AbilityType.turnAround)
        {
            maxLen   = 0.7f * planeTemplate.maxRange;
            minLen   = 0.7f * planeTemplate.maxRange;
            maxAngle = planeTemplate.maxTurnAngle;
            abilRandonRotateDirection = Random.Range(0, 2);
            if (abilRandonRotateDirection == 0)
            {
                abilRandonRotateDirection = -1;
            }
            attackIcon.transform.localPosition = Quaternion.Euler(0, 0, -attackIconAngleLast) * new Vector3(0, -maxLen, 0);
        }

        if (activeAbil == Abilities.AbilityType.doubleThrottle)
        {
            maxLen   = 2 * planeTemplate.maxRange;
            minLen   = 2 * planeTemplate.minRange;
            maxAngle = planeTemplate.maxTurnAngle;
            attackIcon.transform.localPosition = Quaternion.Euler(0, 0, -attackIconAngleLast) * new Vector3(0, -maxLen, 0);
        }

        CalculatePath();
        if (activeAbil != Abilities.AbilityType.none)
        {
            abilitiesGameObjects[0].transform.eulerAngles = forActiveAbil;
        }
        abilitiesGameObjects[1].transform.eulerAngles = forAbilities;
        abilitiesGameObjects[2].transform.eulerAngles = forAbilities;
        abilitiesGameObjects[3].transform.eulerAngles = forAbilities;
        abilitiesGameObjects[4].transform.eulerAngles = forAbilities;
    }
    void OnGUI()
    {
        if(Application.platform == RuntimePlatform.Android || Application.platform == RuntimePlatform.IPhonePlayer)
            showPopup=selected;
        GUI.enabled=!GameStorage.getInstance().overlap;
        if(GameStorage.getInstance().overlap)
            GUI.color=disColor;
        else
            GUI.color=goodColor;

        //TEST
        //GUI.Label(new Rect(100,100,40,40),"",Templates.getInstance().arrowRedSkin.label);
        //TEST_END

        if(damageShowTime>0)
        {
            float posX,posY;
            Vector3 pzp = Camera.main.WorldToScreenPoint(transform.position);
            posX=pzp.x-50;
            posY=Screen.height-pzp.y-50;
            string text="";
            if(block)
                text="<color=green>Blocked</color>";
            else
            {
                if(receivedDefect)
                    text="<color=red>-"+receivedDamage+"</color>";
                else
                    text="-"+receivedDamage;
            }
            GUI.Box(new Rect(posX,posY,100,20),text);
            damageShowTime-=Time.deltaTime;
            if(damageShowTime<0)
            {
                damageShowTime=0;
                receivedDamage=0;
                receivedDefect=false;
            }
        }

        if(showPopup && !GameStorage.getInstance().isRunning)
        {
            GUI.FocusControl(null);
            Paintvec = Camera.main.WorldToScreenPoint(transform.position);
            GUISkin progressSkin = Templates.getInstance().progressHpSkin;
            GUILayout.BeginArea(new Rect(Templates.ResolutionProblems.getPopupBannerOffset(Screen.width),Templates.ResolutionProblems.getPopupBannerOffset(Screen.width),Templates.ResolutionProblems.getPopupBannerWidth(Screen.width),Screen.height-Templates.ResolutionProblems.getPopupBannerOffset(Screen.width)*2));
            GUILayout.BeginVertical(GUI.skin.box);
            GUILayout.Label("Name: "+temp.classname);
            GUILayout.BeginVertical(GUI.skin.box);
            GUILayout.Box(hp+"/"+temp.hp,progressSkin.box,GUILayout.Width(Templates.ResolutionProblems.getPopupBannerHpWidth(Screen.width)*(((float)hp)/((float)temp.hp))));
            GUILayout.EndVertical();
            if(curDefect!=null)
                GUILayout.Label("Defect: <color=brown>"+curDefect.getName()+"</color>");
            if(privateAbils.Count>0)
            {
                GUILayout.Label("Abils:");
                GUILayout.BeginHorizontal();
                GUISkin s;
                foreach(int ab in privateAbils)
                {
                    s=Templates.getInstance().getAbilityIcon(ab);
                    GUILayout.Label("",s.label,GUILayout.Width(Templates.ResolutionProblems.getPopupBannerAbilSize(Screen.width)),GUILayout.Height(Templates.ResolutionProblems.getPopupBannerAbilSize(Screen.width)));
                }
                GUILayout.EndHorizontal();
            }

            //Weapon
            GUILayout.Label("Weapons:");
            GUILayout.BeginHorizontal();
            for(int i = 0;i<temp.weapons;i++)
                GUILayout.Label("",Templates.getInstance().statPointBlue.label,GUILayout.Width(Templates.ResolutionProblems.getPopupBannerPointSize(Screen.width)),GUILayout.Height(Templates.ResolutionProblems.getPopupBannerPointSize(Screen.width)));
            for(int i = 0;i<5-temp.weapons;i++)
                GUILayout.Label("",Templates.getInstance().statPointGrey.label,GUILayout.Width(Templates.ResolutionProblems.getPopupBannerPointSize(Screen.width)),GUILayout.Height(Templates.ResolutionProblems.getPopupBannerPointSize(Screen.width)));
            GUILayout.EndHorizontal();
            GUILayout.Label("Armor:");
            GUILayout.BeginHorizontal();
            for(int i = 0;i<temp.armor;i++)
                GUILayout.Label("",Templates.getInstance().statPointBlue.label,GUILayout.Width(Templates.ResolutionProblems.getPopupBannerPointSize(Screen.width)),GUILayout.Height(Templates.ResolutionProblems.getPopupBannerPointSize(Screen.width)));
            for(int i = 0;i<5-temp.armor;i++)
                GUILayout.Label("",Templates.getInstance().statPointGrey.label,GUILayout.Width(Templates.ResolutionProblems.getPopupBannerPointSize(Screen.width)),GUILayout.Height(Templates.ResolutionProblems.getPopupBannerPointSize(Screen.width)));
            GUILayout.EndHorizontal();
            GUILayout.Label("Speed:");
            GUILayout.BeginHorizontal();
            for(int i = 0;i<temp.speed;i++)
                GUILayout.Label("",Templates.getInstance().statPointBlue.label,GUILayout.Width(Templates.ResolutionProblems.getPopupBannerPointSize(Screen.width)),GUILayout.Height(Templates.ResolutionProblems.getPopupBannerPointSize(Screen.width)));
            for(int i = 0;i<5-temp.speed;i++)
                GUILayout.Label("",Templates.getInstance().statPointGrey.label,GUILayout.Width(Templates.ResolutionProblems.getPopupBannerPointSize(Screen.width)),GUILayout.Height(Templates.ResolutionProblems.getPopupBannerPointSize(Screen.width)));
            GUILayout.EndHorizontal();
            GUILayout.Label("Maneuverability:");
            GUILayout.BeginHorizontal();
            for(int i = 0;i<temp.maneuverability;i++)
                GUILayout.Label("",Templates.getInstance().statPointBlue.label,GUILayout.Width(Templates.ResolutionProblems.getPopupBannerPointSize(Screen.width)),GUILayout.Height(Templates.ResolutionProblems.getPopupBannerPointSize(Screen.width)));
            for(int i = 0;i<5-temp.maneuverability;i++)
                GUILayout.Label("",Templates.getInstance().statPointGrey.label,GUILayout.Width(Templates.ResolutionProblems.getPopupBannerPointSize(Screen.width)),GUILayout.Height(Templates.ResolutionProblems.getPopupBannerPointSize(Screen.width)));
            GUILayout.EndHorizontal();

            GUILayout.Label(temp.description);
            GUILayout.EndVertical();
            GUILayout.EndArea();
        }

        if(!GameStorage.getInstance().isRunning)
        {
            Vector3 v11 = attackIcon.transform.position;
            Vector2 aPos = new Vector2(Camera.main.WorldToScreenPoint(v11).x,Camera.main.WorldToScreenPoint(v11).y);

            GUI.skin = Templates.getInstance().getAbilityIcon(activeAbil);
            if(GUI.RepeatButton(new Rect(aPos.x-Templates.ResolutionProblems.getActionAbilitySize(Screen.width)/2,Screen.height-aPos.y-Templates.ResolutionProblems.getActionAbilitySize(Screen.width)/2,Templates.ResolutionProblems.getActionAbilitySize(Screen.width),Templates.ResolutionProblems.getActionAbilitySize(Screen.width)),""))
            {
                    attackIconCaptured=true;
                    GameStorage.getInstance().cam.GetComponent<CameraBehaviour>().canReleaseMouse=false;
                    GameStorage.getInstance().cam.GetComponent<CameraBehaviour>().currentSelected=gameObject;
                    iconsShowed=true;
            }
            GUI.skin=null;
        }

        if(temp.abilities.Count>0 && (selected || iconsShowed) && !attackIconCaptured)
        {

            Vector2 startVec = new Vector2(Camera.main.WorldToScreenPoint(attackIcon.transform.position).x,Camera.main.WorldToScreenPoint(attackIcon.transform.position).y);

            firstAbilPos=startVec+new Vector2(Templates.ResolutionProblems.getActionAbilityOffset(Screen.width),0);
            secondAbilPos=startVec+new Vector2(-Templates.ResolutionProblems.getActionAbilityOffset(Screen.width),0);
            thirdAbilPos=startVec+new Vector2(0,Templates.ResolutionProblems.getActionAbilityOffset(Screen.width));
            fourthAbilPos=startVec+new Vector2(0,-Templates.ResolutionProblems.getActionAbilityOffset(Screen.width));

            if(temp.abilities.Count>=1)
            {
                if(abilityInReuse || earnedDefect)
                {
                    GUI.skin=Templates.getInstance().getAbilityIconGrey((int)temp.abilities[0]);
                    GUI.Button(new Rect(firstAbilPos.x-Templates.ResolutionProblems.getActionAbilitySize(Screen.width)/2,Screen.height-firstAbilPos.y-Templates.ResolutionProblems.getActionAbilitySize(Screen.width)/2,Templates.ResolutionProblems.getActionAbilitySize(Screen.width),Templates.ResolutionProblems.getActionAbilitySize(Screen.width)),"");
                    GUI.skin=null;
                }
                else
                {
                    GUI.skin=Templates.getInstance().getAbilityIcon((int)temp.abilities[0]);
                    if(GUI.Button(new Rect(firstAbilPos.x-Templates.ResolutionProblems.getActionAbilitySize(Screen.width)/2,Screen.height-firstAbilPos.y-Templates.ResolutionProblems.getActionAbilitySize(Screen.width)/2,Templates.ResolutionProblems.getActionAbilitySize(Screen.width),Templates.ResolutionProblems.getActionAbilitySize(Screen.width)),""))
                    {
                        Abilities.AbilityType selectedAbil = (Abilities.AbilityType)temp.abilities[0];
                        prevAbil=activeAbil;
                        temp.abilities[0]=(int)activeAbil;
                        activeAbil=selectedAbil;
                        AbilitySwitched();
                    }
                    GUI.skin=null;
                }
            }
            if(temp.abilities.Count>=2)
            {
                if(abilityInReuse || earnedDefect)
                {
                    GUI.skin=Templates.getInstance().getAbilityIconGrey((int)temp.abilities[1]);
                    GUI.Button(new Rect(secondAbilPos.x-Templates.ResolutionProblems.getActionAbilitySize(Screen.width)/2,Screen.height-secondAbilPos.y-Templates.ResolutionProblems.getActionAbilitySize(Screen.width)/2,Templates.ResolutionProblems.getActionAbilitySize(Screen.width),Templates.ResolutionProblems.getActionAbilitySize(Screen.width)),"");
                    GUI.skin=null;
                }
                else
                {
                    GUI.skin=Templates.getInstance().getAbilityIcon((int)temp.abilities[1]);
                    if(GUI.Button(new Rect(secondAbilPos.x-Templates.ResolutionProblems.getActionAbilitySize(Screen.width)/2,Screen.height-secondAbilPos.y-Templates.ResolutionProblems.getActionAbilitySize(Screen.width)/2,Templates.ResolutionProblems.getActionAbilitySize(Screen.width),Templates.ResolutionProblems.getActionAbilitySize(Screen.width)),""))
                    {
                        Abilities.AbilityType selectedAbil = (Abilities.AbilityType)temp.abilities[1];
                        prevAbil=activeAbil;
                        temp.abilities[1]=(int)activeAbil;
                        activeAbil=selectedAbil;
                        AbilitySwitched();
                    }
                    GUI.skin=null;
                }
            }
            if(temp.abilities.Count>=3)
            {
                if(abilityInReuse || earnedDefect)
                {
                    GUI.skin=Templates.getInstance().getAbilityIconGrey((int)temp.abilities[2]);
                    GUI.Button(new Rect(thirdAbilPos.x-Templates.ResolutionProblems.getActionAbilitySize(Screen.width)/2,Screen.height-thirdAbilPos.y-Templates.ResolutionProblems.getActionAbilitySize(Screen.width)/2,Templates.ResolutionProblems.getActionAbilitySize(Screen.width),Templates.ResolutionProblems.getActionAbilitySize(Screen.width)),"");
                    GUI.skin=null;
                }
                else
                {
                    GUI.skin=Templates.getInstance().getAbilityIcon((int)temp.abilities[2]);
                    if(GUI.Button(new Rect(thirdAbilPos.x-Templates.ResolutionProblems.getActionAbilitySize(Screen.width)/2,Screen.height-thirdAbilPos.y-Templates.ResolutionProblems.getActionAbilitySize(Screen.width)/2,Templates.ResolutionProblems.getActionAbilitySize(Screen.width),Templates.ResolutionProblems.getActionAbilitySize(Screen.width)),""))
                    {
                        Abilities.AbilityType selectedAbil = (Abilities.AbilityType)temp.abilities[2];
                        prevAbil=activeAbil;
                        temp.abilities[2]=(int)activeAbil;
                        activeAbil=selectedAbil;
                        AbilitySwitched();
                    }
                    GUI.skin=null;
                }
            }
            if(temp.abilities.Count>=4)
            {
                if(abilityInReuse || earnedDefect)
                {
                    GUI.skin=Templates.getInstance().getAbilityIconGrey((int)temp.abilities[3]);
                    GUI.Button(new Rect(fourthAbilPos.x-Templates.ResolutionProblems.getActionAbilitySize(Screen.width)/2,Screen.height-fourthAbilPos.y-Templates.ResolutionProblems.getActionAbilitySize(Screen.width)/2,Templates.ResolutionProblems.getActionAbilitySize(Screen.width),Templates.ResolutionProblems.getActionAbilitySize(Screen.width)),"");
                    GUI.skin=null;
                }
                else
                {
                    GUI.skin=Templates.getInstance().getAbilityIcon((int)temp.abilities[3]);
                    if(GUI.Button(new Rect(fourthAbilPos.x-Templates.ResolutionProblems.getActionAbilitySize(Screen.width)/2,Screen.height-fourthAbilPos.y-Templates.ResolutionProblems.getActionAbilitySize(Screen.width)/2,Templates.ResolutionProblems.getActionAbilitySize(Screen.width),Templates.ResolutionProblems.getActionAbilitySize(Screen.width)),""))
                    {
                        Abilities.AbilityType selectedAbil = (Abilities.AbilityType)temp.abilities[3];
                        prevAbil=activeAbil;
                        temp.abilities[3]=(int)activeAbil;
                        activeAbil=selectedAbil;
                        AbilitySwitched();
                    }
                    GUI.skin=null;
                }
            }
        }
    }
    public void StepEnd()
    {
        if(activeAbil==Abilities.AbilityType.none && abilityInReuse)
            abilityInReuse=false;
        loadOriginAbilities();

        if(activeAbil!=Abilities.AbilityType.none && !abilityInReuse)
        {
            prevAbil=activeAbil;
            abilityInReuse=true;
            activeAbil=Abilities.AbilityType.none;

            AbilitySwitched();
        }
        if(defectInUse)
        {
            if(curDefect.GetType() == typeof(Defects.DisableTurn))
                maxTurnAngle=temp.maxTurnAngle;
            defectInUse=false;
            earnedDefect=false;
            curDefect=null;
        }
        t=0;
        updateAttackPosition();
    }
 public void setActiveThorpedeAbil()
 {
     if(!abilityInReuse)
     {
         if(activeAbil!=Abilities.AbilityType.homingThorpede)
         {
             int i=0,ch=-1;
             foreach(Abilities.AbilityType ab in temp.abilities)
             {
                 if(ab==Abilities.AbilityType.homingThorpede)
                 {
                     ch=i;
                     break;
                 }
                 i++;
             }
             if(ch>=0)
             {
                 Abilities.AbilityType selectedAbil = Abilities.AbilityType.homingThorpede;
                 prevAbil=activeAbil;
                 temp.abilities[ch]=(int)activeAbil;
                 activeAbil=selectedAbil;
                 AbilitySwitched();
             }
         }
     }
 }
    void Start()
    {
        attackIcon = Instantiate(Resources.Load("prefab/attackIcon") as GameObject);
        attackIcon.SetActive(false);
        if(GameStorage.getInstance().getFixedTime()==-1)
            GameStorage.getInstance().overlap=false;

        LineRenderer lr = gameObject.AddComponent<LineRenderer>();
        lr.SetWidth(0.05f, 0.05f);
        GameStorage.getInstance().addFriendlyShuttle(this.gameObject);
        temp = Templates.getInstance().getPlaneTemplate(Template);
        foreach(int abils in temp.abilities)
            privateAbils.Add(abils);
        GameStorage.getInstance().totalHp+=temp.hp;
        GameObject go;
        MeshRenderer mr;
        lineMat = Resources.Load("materials/holograms/Hologram3") as Material;
        lr.material=lineMat;
        Mesh m;
        foreach(Templates.GunOnShuttle goss in temp.guns)
        {
            go = GameObject.CreatePrimitive(PrimitiveType.Cube);
            Templates.GunTemplate gt = Templates.getInstance().getGunTemplate(goss.gunId);

            Destroy(go.GetComponent<Collider>());
            mr = go.GetComponent<MeshRenderer>();
            mr.material=Resources.Load("materials/arc") as Material;
          	m = go.GetComponent<MeshFilter>().mesh;
          	m.Clear();
            Vector3[] vertices = new Vector3[101];
            vertices[0]=new Vector3(0,1,0);
            float ds=gt.attackRange;

            Vector2 va;
            int i=1;
            for(float ang = -gt.attackAngle; ang<=gt.attackAngle; ang+=(2*gt.attackAngle)/100.0f)
            {
                va=Quaternion.Euler(0,0,ang)*new Vector2(0,ds);
                vertices[i]=new Vector3(va.x,0,va.y);
                i++;
                if(i==101) break;
            }

            int[] triangles = new int[vertices.Length*3];
            int bb=0;
            for(i=0;i<99;i++)
            {
                triangles[bb*3]=0;
                triangles[bb*3+1]=i+1;
                triangles[bb*3+2]=i+2;
                bb++;
            }

            Vector2[] uvs = new Vector2[vertices.Length];
            for (i = 0; i < uvs.Length; i++) {
                uvs[i] = new Vector2(vertices[i].x, vertices[i].z);
            }

            m.vertices=vertices;
            m.triangles=triangles;
            m.uv=uvs;
           	m.RecalculateBounds();
            m.RecalculateNormals();
            arcObjs.Add(go);

            go=(GameObject) Instantiate(Resources.Load("prefab/testGunMesh") as GameObject,new Vector3(transform.position.x+goss.pos.x,1,transform.position.z+goss.pos.y),Quaternion.Euler(0,goss.turnAngle,0));
            go.SetActive(false);
            shuttleGunsMeshes.Add(go);
            shuttleGunsGos.Add(goss);
        }

        attackIconDistMin = temp.minRange;
        attackIconDist = temp.maxRange;
        maxTurnAngle = temp.maxTurnAngle;
        hp=temp.hp;

        if(temp.abilities.Count>=1)
            origin0=(Abilities.AbilityType) temp.abilities[0];
        if(temp.abilities.Count>=2)
            origin1=(Abilities.AbilityType) temp.abilities[1];
        if(temp.abilities.Count>=3)
            origin2=(Abilities.AbilityType) temp.abilities[2];
        if(temp.abilities.Count>=4)
            origin3=(Abilities.AbilityType) temp.abilities[3];
    }