//function call to launch the passed ability //for launching weapon alt-fire public static void LaunchAbility(Ability ability) { if(ability.type==_AbilityType.AOE || ability.type==_AbilityType.Shoot){ //get the hit point and activate the ability on that particular spot Ray ray = CameraControl.GetMainCamera().ScreenPointToRay(Input.mousePosition); RaycastHit hit; if(Physics.Raycast(ray, out hit, Mathf.Infinity)) ability.Activate(hit.point); else ability.Activate(GameControl.GetPlayer().thisT.position); //use player position if there's no valid position } else{ //activate the ability on the player position ability.Activate(GameControl.GetPlayer().thisT.position); } }
public static void SwitchAbility(Ability ability) { if(onSwitchAbilityE!=null) onSwitchAbilityE(ability); }
public Ability Clone() { Ability ab=new Ability(); ab.ID=ID; ab.name=name; ab.icon=icon; ab.desp=desp; ab.type=type; ab.cost=cost; ab.cooldown=cooldown; ab.currentCD=currentCD; ab.aStats=aStats.Clone(); ab.range=range; ab.shootObject=shootObject; ab.shootPosOffset=shootPosOffset; ab.launchObj=launchObj; ab.autoDestroyLaunchObj=autoDestroyLaunchObj; ab.launchObjActiveDuration=launchObjActiveDuration; return ab; }
int NewItem(int cloneID=-1) { Ability ability=null; if(cloneID==-1){ ability=new Ability(); ability.name="New Ability"; } else{ ability=abilityDB.abilityList[selectID].Clone(); } ability.ID=GenerateNewID(abilityIDList); abilityIDList.Add(ability.ID); abilityDB.abilityList.Add(ability); UpdateLabel_Ability(); return abilityDB.abilityList.Count-1; }
Vector2 DrawAbilityConfigurator(float startX, float startY, Ability ability) { //~ //float cachedX=startX; //~ //float cachedY=startY; TDSEditorUtility.DrawSprite(new Rect(startX, startY, 60, 60), ability.icon); startX+=65; cont=new GUIContent("Name:", "The ability name to be displayed in game"); EditorGUI.LabelField(new Rect(startX, startY+=spaceY/2, width, height), cont); ability.name=EditorGUI.TextField(new Rect(startX+spaceX-65, startY, width-5, height), ability.name); cont=new GUIContent("Icon:", "The ability icon to be displayed in game, must be a sprite"); EditorGUI.LabelField(new Rect(startX, startY+=spaceY, width, height), cont); ability.icon=(Sprite)EditorGUI.ObjectField(new Rect(startX+spaceX-65, startY, width-5, height), ability.icon, typeof(Sprite), false); startX-=65; startY+=10+spaceY; //cachedY=startY; EditorGUI.LabelField(new Rect(startX, startY+=spaceY, width, height), "Ability Type & Stats", headerStyle); int type=(int)ability.type; cont=new GUIContent("Ability Type:", "Type of the ability which determine the targeting mechanic and potential target"); EditorGUI.LabelField(new Rect(startX, startY+=spaceY, width, height), cont); contL=new GUIContent[abilityTypeLabel.Length]; for(int i=0; i<contL.Length; i++) contL[i]=new GUIContent(abilityTypeLabel[i], abilityTypeTooltip[i]); type = EditorGUI.Popup(new Rect(startX+spaceX, startY, width, 15), new GUIContent(""), type, contL); ability.type=(_AbilityType)type; startY+=5; cont=new GUIContent("Cost:", "The energy cost to launch the ability"); EditorGUI.LabelField(new Rect(startX, startY+=spaceY, width, height), cont); ability.cost=EditorGUI.FloatField(new Rect(startX+spaceX, startY, 40, height), ability.cost); cont=new GUIContent("Cooldown:", "The cooldown in second for the ability before it can be used again after it's used"); EditorGUI.LabelField(new Rect(startX, startY+=spaceY, width, height), cont); ability.cooldown=EditorGUI.FloatField(new Rect(startX+spaceX, startY, 40, height), ability.cooldown); startY+=10; if(ability.type==_AbilityType.Shoot){ cont=new GUIContent("Range:", "The shoot range of the ability"); EditorGUI.LabelField(new Rect(startX, startY+=spaceY, width, height), cont); ability.range=EditorGUI.FloatField(new Rect(startX+spaceX, startY, 40, height), ability.range); cont=new GUIContent("Shoot Object:", "The prefab of the bullet/object fired by the weapon\nMust be a prefab with ShootObject component attached on it"); EditorGUI.LabelField(new Rect(startX, startY+=spaceY, width, height), cont); ability.shootObject=(GameObject)EditorGUI.ObjectField(new Rect(startX+spaceX, startY, width, height), ability.shootObject, typeof(GameObject), false); cont=new GUIContent("Shoot Pos Offset:", "The relative shoot position to the position of the player transform, in player transform space"); EditorGUI.LabelField(new Rect(startX, startY+=spaceY, width, height), cont); ability.shootPosOffset=EditorGUI.Vector3Field(new Rect(startX+spaceX, startY, width, height), "", ability.shootPosOffset); } startY+=10; bool showAOE=ability.type==_AbilityType.AOE | ability.type==_AbilityType.AOESelf | ability.type==_AbilityType.Shoot; Vector2 v2=DrawAttackStats(startX, startY+spaceY, ability.aStats, showAOE); startY=v2.y+15; EditorGUI.LabelField(new Rect(startX, startY+=spaceY, width, height), "Miscellaneous", headerStyle); cont=new GUIContent("Launch Object:", "The object to be spawned when the ability is launched (optional)"); EditorGUI.LabelField(new Rect(startX, startY+=spaceY, width, height), cont); ability.launchObj=(GameObject)EditorGUI.ObjectField(new Rect(startX+spaceX, startY, width, height), ability.launchObj, typeof(GameObject), false); cont=new GUIContent("AutoDestroy Effect:", "Check if the launch object needs to be removed from the game"); EditorGUI.LabelField(new Rect(startX, startY+=spaceY, width, height), cont); if(ability.launchObj!=null){ ability.autoDestroyLaunchObj=EditorGUI.Toggle(new Rect(startX+spaceX, startY, 40, height), ability.autoDestroyLaunchObj); if(ability.autoDestroyLaunchObj){ cont=new GUIContent(" - Duration:", "The delay in seconds before the launch object is destroyed"); EditorGUI.LabelField(new Rect(startX+spaceX+15, startY, width, height), cont); ability.launchObjActiveDuration=EditorGUI.FloatField(new Rect(startX+spaceX+width-58, startY, 40, height), ability.launchObjActiveDuration); } } else EditorGUI.LabelField(new Rect(startX+spaceX, startY, 40, height), "-"); startY+=5; cont=new GUIContent("Launch SFX:", "Audio clip to play when the ability is launched (optional)"); EditorGUI.LabelField(new Rect(startX, startY+=spaceY, width, height), cont); ability.launchSFX=(AudioClip)EditorGUI.ObjectField(new Rect(startX+spaceX, startY, width, height), ability.launchSFX, typeof(AudioClip), false); startY+=15; GUIStyle style=new GUIStyle("TextArea"); style.wordWrap=true; cont=new GUIContent("Ability description (to be used in runtime): ", ""); EditorGUI.LabelField(new Rect(startX, startY+=spaceY, 400, 20), cont); ability.desp=EditorGUI.TextArea(new Rect(startX, startY+spaceY-3, 270, 150), ability.desp, style); return new Vector2(startX, startY+200); }
void Awake() { //make sure none of the element in shootPointList is null for(int i=0; i<shootPointList.Count; i++){ if(shootPointList[i]==null){ shootPointList.RemoveAt(i); i-=1; } } //if no shoot point has been assigned, use the current transform if(shootPointList.Count==0) shootPointList.Add(transform); if(shootObject!=null) InitShootObject(); aStats.Init(); //initiate the attack stats //create the ability ability=AbilityDB.CloneItem(abilityID); if(shootObject!=null) ObjectPoolManager.New(shootObject, 3); else Debug.LogWarning("shoot object for weapon unassigned", this); Reset(); }