public LanceSkillStrategy(WeaponBase weaponBase) { lance = weaponBase.WeaponComponent() as Lance; dashCondition = false; attackMoveCondition = MoveWhileAttack.Move_Attack; m = new AttackMessage(); this.weaponBase = weaponBase; lanceTransform = weaponBase.transform.Find("LanceParent/Lance/LanceHead"); if (lanceSkillEffectsPools == null) { var e = weaponBase.GetComponentInChildren <WeaponEffects>(); lanceEffects = e.Effects; effcetParent = e.effectParent; lanceSkillEffectsPools = new Pool[lanceEffects.Length]; for (int i = 0; i < lanceSkillEffectsPools.Length; i++) { lanceSkillEffectsPools[i] = EffectManager.GetInstance().effectParent.gameObject.AddComponent <Pool>(); lanceSkillEffectsPools[i].poolPrefab = lanceEffects[i]; lanceSkillEffectsPools[i].initialCount = lanceSkillEffectsinitialCount; lanceSkillEffectsPools[i].incrementCount = lanceSkillEffectsincrementCount; lanceSkillEffectsPools[i].Initialize(); } } skillStack = 0; }
// Tell the victim to apply damage to itself, and who the attacker was. private void sendAttackMessage(AttackMessage message) { if (this._players.ContainsKey(message.victimID)) { NetworkServer.SendToClient(message.victimID, (short)NetworkMessageType.MSG_ATTACK, message); } }
protected override void onMessageAttack(AttackMessage am) { InfoLog.WriteInfo("MessageAttack", EPrefix.SimulationInfo); // set attacked object in attacker unit Unit attacker = players[am.Attacker.PlayerID].GetUnit(am.Attacker); if (attacker == null) { return; } Player p = players[am.Attacked.PlayerID]; BoardObject b; bool isBuilding = false; b = p.GetBuilding(am.Attacked); if (b != null) { isBuilding = true; } else { b = p.GetUnit(am.Attacked); if (b == null) { InfoLog.WriteInfo("MessageMove: PlayerID:" + am.Attacked.PlayerID + " attacked object does not exist", EPrefix.SimulationInfo); return; } } attacker.OrderedAttack = true; attacker.OrderAttack(b, isBuilding); }
/// <summary> /// 沿着方向飞出屏幕 /// </summary> /// <param name="attackMessage">Attack message.</param> public void FlyOutOfStage(AttackMessage attackMessage) { this.attackMessage = attackMessage; float direct = Mathf.Sign (gameObject.transform.position.x - attackMessage.Sender.GameObject.transform.position.x); Transform t1 = attackMessage.Sender.GameObject.transform; Transform t2 = attackMessage.Targets [0].GameObject.transform; //Vector2 targetPost = new Vector2(t2.position.); float dis = Mathf.Abs (t1.position.x - t2.position.x); float time = dis / Speed; Hashtable args = new Hashtable (); args.Add ("easeType", iTween.EaseType.linear); args.Add ("x", t2.position.x); args.Add ("y", t2.position.y); args.Add ("time", 0.3f); args.Add ("oncomplete", "OnComplete"); args.Add ("oncompletetarget", gameObject); //args.Add ("oncompleteparams", this.attackMessage); iTween.MoveTo (gameObject, args); }
IEnumerator PlayUltEffect(AttackMessage message) { StartCoroutine(MaskFade()); this.message = message; GameObject bulletPrefab = ResourceManager.GetInstance.LoadPrefab(TestData.charDB [7].Prefab); GameObject parent = StageManager.SharedInstance.WorldUltLayer; GameObject bullet = StageManager.SharedInstance.AddToStage(parent, bulletPrefab); baseEffect = bullet.AddComponent <BaseEffect> (); //baseEffect.transform.position = message.Sender.GameObject.transform.position; //Vector3 pos = MapUtil.RelativeMovePosition (battleAgent.BaseSprite.HitPoint, battleAgent.GameObject.transform); //baseEffect.transform.position = new Vector3 (pos.x, pos.y, battleAgent.GameObject.transform.position.z); BattleAgent battleAgent = message.Sender; baseEffect.transform.position = MapUtil.GetHitPointWorld(battleAgent); baseEffect.PlayOnAgent(message); //yield return new WaitForSeconds (0.1f); //addMask (); //Time.timeScale = 1.0f; battleAgent.dispatchEvent(SoldierEvent.BATTLE_MESSAGE, message); Time.timeScale = 0.6f; yield return(new WaitForSeconds(0.1f)); Time.timeScale = 1.0f; }
/* 设置炮弹的位置与速度并传递攻击信息 MonsterMoniter.cs调用 * param[0]:原位置 Vector3 * param[1]:目标位置 Vector3 * param[2]:炮弹速度 float * param[3]:攻击信息 AttackMessage * param[4]:目标物体 GameObject */ private void SetBulletInfo(object[] pos) { Attack = (AttackMessage)pos[3]; FlySpeed = (float)pos[2]; DestinationPosition = (GameObject)pos[4]; transform.localPosition = (Vector3)pos[0]; }
/// <summary> /// 目标被浮空 /// </summary> /// <param name="e">E.</param> private void FloatHandler(CEvent e) { AttackMessage am = (AttackMessage)e.data; baseSprite.HitEffect(am); baseSoldier.OnFloat(); }
public static void Transmit(AttackMessage message) { if (OnAttack != null) { OnAttack.Invoke(message); } }
/// <summary> /// 被击中 /// </summary> /// <param name="e">E.</param> private void HitHandler(CEvent e) { //Debug.Log ("HitHandler"); AttackMessage am = (AttackMessage)e.data; baseSprite.HitEffect(am); }
/// <summary> /// 处理战斗信息 /// </summary> /// <param name="e">E.</param> public void BattleMessageHandler(CEvent e) { this.attackMessage = (AttackMessage)e.data; SkillData skill = SkillData.testData [this.attackMessage.SkillId]; //大招 Id大于20000 没有距离限制 if (attackMessage.SkillId > 20000) { baseSoldier.OnUlt(); } else { //射程之外 if (skill.Range < Vector2.Distance(this.attackMessage.Sender.mapPos, this.attackMessage.Targets [0].mapPos)) { PathToTarget(skill.Range); return; } //普通攻击 baseSoldier.OnAttack(); } //Debug.Log ("battleMessageHandler"); }
/// <summary> /// 沿着方向飞出屏幕 /// </summary> /// <param name="attackMessage">Attack message.</param> public void FlyOutOfStage(AttackMessage attackMessage) { this.attackMessage = attackMessage; float direct = Mathf.Sign(gameObject.transform.position.x - attackMessage.Sender.GameObject.transform.position.x); Transform t1 = attackMessage.Sender.GameObject.transform; Transform t2 = attackMessage.Targets [0].GameObject.transform; //Vector2 targetPost = new Vector2(t2.position.); float dis = Mathf.Abs(t1.position.x - t2.position.x); float time = dis / Speed; Hashtable args = new Hashtable(); args.Add("easeType", iTween.EaseType.linear); args.Add("x", t2.position.x); args.Add("y", t2.position.y); args.Add("time", 0.3f); args.Add("oncomplete", "OnComplete"); args.Add("oncompletetarget", gameObject); //args.Add ("oncompleteparams", this.attackMessage); iTween.MoveTo(gameObject, args); }
public static void TriggerAttack(UnityEngine.Transform sender, AttackMessage e) { if (Attack != null) { Attack(sender, e); } }
public FireworkAttackStrategy(WeaponBase weaponBase) : base(1) { if (FW_DestroyEffectPool == null) { FW_DestroyEffect = (weaponBase.WeaponComponent() as Firework).FW_DestroyEffect; FW_DestroyEffectPool = EffectManager.GetInstance().effectParent.gameObject.AddComponent <Pool>(); FW_DestroyEffectPool.poolPrefab = FW_DestroyEffect; FW_DestroyEffectPool.initialCount = FW_DestroyEffectinitialCount; FW_DestroyEffectPool.incrementCount = FW_DestroyEffectincrementCount; FW_DestroyEffectPool.Initialize(); } if (bulletPool == null) { bulletPrefab = (weaponBase.WeaponComponent() as Firework).BulletPrefab; bulletPrefab.DestroyEffectPool = FW_DestroyEffectPool; bulletPrefab.effectParent = EffectManager.GetInstance().effectParent.transform; bulletPool = AttackManager.GetInstance().bulletParent.gameObject.AddComponent <Pool>(); bulletPool.incrementCount = FW_bulletincrementCount; bulletPool.initialCount = FW_bulletinitialCount; bulletPool.poolPrefab = bulletPrefab.gameObject; bulletPool.Initialize(); } dashCondition = true; m = new AttackMessage(); weapon = weaponBase; fireworkMuzzleTransform = weaponBase.transform.Find("FireWorkParent/Firework/FireworkMuzzle/FireworkMuzzlePosition"); attackMoveCondition = MoveWhileAttack.Move_Attack; }
public FlameThrowerAttackStrategy(WeaponBase weaponBase) : base() { burnTime = 1f; burnDmg = 5f; dashCondition = true; m = new AttackMessage(); weapon = weaponBase; flameTransform = weaponBase.transform.Find("FlameThrowerParent/FlameThrower/FlamePosition"); if (FT_AttackEffectsPool == null) { var e = weaponBase.GetComponentInChildren <WeaponEffects>(); FT_AttackEffects = e.Effects; effcetParent = e.effectParent; FT_AttackEffectsPool = EffectManager.GetInstance().effectParent.gameObject.AddComponent <Pool>(); FT_AttackEffectsPool.poolPrefab = FT_AttackEffects[1]; FT_AttackEffectsPool.initialCount = FT_AttackEffectsinitialCount; FT_AttackEffectsPool.incrementCount = FT_AttackEffectsincrementCount; FT_AttackEffectsPool.Initialize(); } tempAtkCount = 0; m.effectType = EffectType.SMALL; m.critEffectType = EffectType.CRIT; attackMoveCondition = MoveWhileAttack.Move_Attack; dashCondition = true; }
void OnTriggerEnter2D(Collider2D other) { if (Utils.CheckTags(other.gameObject, AffectedTags) /*other.CompareTag(m_character.EnemyTag)*/) { var attackMessage = new AttackMessage(Damage, new Vector2(other.transform.position.x - transform.position.x, 2).normalized *PushBackForce); other.SendMessageUpwards("ApplyDamage", attackMessage); } }
/// <summary> /// Attachs the middle. /// </summary> /// <param name="attackMessage">Attack message.</param> public void AttachMiddle(AttackMessage attackMessage) { this.attackMessage = attackMessage; float y = attackMessage.Targets[0].MapPos.y; float x = Mathf.Round( MapUtil.MAX_COL / 2.0f); gameObject.transform.position = MapUtil.GetInstance.MapToWorld(x,y-1); }
/// <summary> /// 在目标点出现 /// </summary> /// <param name="attackMessage">Attack message.</param> public void AttachTarget(AttackMessage attackMessage) { this.attackMessage = attackMessage; Transform t2 = attackMessage.Targets [0].GameObject.transform; //gameObject.transform.position = t2.position; Vector3 pos = MapUtil.GetHitPointWorld(attackMessage.Targets[0]); gameObject.transform.position = new Vector3 (pos.x, pos.y, t2.position.z); }
/// <summary> /// Attachs the middle. /// </summary> /// <param name="attackMessage">Attack message.</param> public void AttachMiddle(AttackMessage attackMessage) { this.attackMessage = attackMessage; float y = attackMessage.Targets[0].MapPos.y; float x = Mathf.Round(MapUtil.MAX_COL / 2.0f); gameObject.transform.position = MapUtil.GetInstance.MapToWorld(x, y - 1); }
/// <summary> /// 在目标点出现 /// </summary> /// <param name="attackMessage">Attack message.</param> public void AttachTarget(AttackMessage attackMessage) { this.attackMessage = attackMessage; Transform t2 = attackMessage.Targets [0].GameObject.transform; //gameObject.transform.position = t2.position; Vector3 pos = MapUtil.GetHitPointWorld(attackMessage.Targets[0]); gameObject.transform.position = new Vector3(pos.x, pos.y, t2.position.z); }
/// <summary> /// 大招引导特效开始 /// </summary> /// <param name="c">C.</param> void BattleUltLoadHandler(CEvent c) { ShakeBg(); AudioManager.SharedInstance.PlayOneShot("ty05", 3.0f); AttackMessage message = (AttackMessage)c.data; StartCoroutine("PlayUltEffect", message); }
public static AttackMessage Ranged(Character attacker, Vector3 origin, Vector3 direction, float maxRange, float projectileDiameter, float coneAngle, float velocity, LayerMask hitDetection) { AttackMessage m = new AttackMessage(); m.attacker = attacker; m.type = AttackType.Ranged; m.timeInitiated = Time.time; m.origin = origin; m.direction = direction; m.maxRange = maxRange; m.projectileDiameter = projectileDiameter; m.coneAngle = coneAngle; m.velocity = velocity; m.hitDetection = hitDetection; #region Get characters at risk List <Character> list = new List <Character>(); // Perform a vision cone check RaycastHit[] thingsInLineOfFire = AIFunction.VisionCone(origin, direction, Vector3.up, coneAngle, maxRange, damageableThings, hitDetection); /* * string debugString = "Characters at risk from " + m.attacker.name + " on frame " + Time.frameCount + ":"; * if (thingsInLineOfFire.Length < 1) * { * debugString = "Attack from " + m.attacker.name + " at time " + m.timeInitiated + " will not hit anything."; * //Misc.PauseForDebuggingPurposes(); * } */ for (int i = 0; i < thingsInLineOfFire.Length; i++) { // Check raycasthit collider to see if it is a character with a faction Character c = Character.FromObject(thingsInLineOfFire[i].collider.gameObject); // If there is a character class // If the character class is not already in the list // If the character class is considered an enemy of the attacker if (c != null && list.Contains(c) == false && attacker.HostileTowards(c)) { // If so, the character is in the attack's danger zone //Debug.Log(c.name + " is in the line of fire of " + attacker.name + "'s attack"); list.Add(c); //debugString += "\n" + c.name; } } //Debug.Log(debugString); m.charactersAtRisk = list.ToArray(); // Performs a calculation to find all enemies within the attack's boundaries. DO THIS LAST, after all the proper variables have been established for accurate calculations #endregion return(m); }
// Apply damage. private void applyDamage(AttackMessage message) { if (this.isServer) { this.RpcApplyDamage(message); } else if (this.isClient) { this.CmdApplyDamage(message); } }
public override void Telegraph() { base.Telegraph(); //Vector3 direction = wielder.currentTarget.transform.position - wielder.LookOrigin; Vector3 direction = DetermineEnemyPosition() - wielder.LookOrigin; AttackMessage m = AttackMessage.Ranged(wielder.characterData, wielder.LookOrigin, direction, stats.range, stats.projectilePrefab.diameter, stats.projectileSpread, stats.projectilePrefab.velocity, stats.projectilePrefab.hitDetection); EventJunction.Transmit(m); //EventObserver.TransmitAttack(m); // Transmits a message of the attack the player is about to perform }
public void OnMessage(AttackMessage msg) { if (HP < 50) { ChangeState(new PeopleScare(gameObject)); } else { ChangeState(new PeopleRun(gameObject, msg.Attacker)); } HP -= msg.Damage; }
/// <summary> /// 攻击结束 /// </summary> public void OnAttackEnd() { for (int i = 0; i < battleAgent.Targets.Count; i++) { BattleAgent t = battleAgent.Targets [i]; AttackMessage message = new AttackMessage(battleAgent, battleAgent.Targets, 1); t.dispatchEvent(SoldierEvent.HIT, message); } OnIdle(); this.battleAgent.FinishMove(); }
internal void AttackOrder(BoardObject attacked) { if (_selectedUnits.Count == 0 && _selectedBuilding == null) { return; } // friendy fire off if (attacked.ObjectID.PlayerID == CurrentPlayer.Id || _sim.Players[attacked.ObjectID.PlayerID].TeamID == CurrentPlayer.TeamID) { MoveOrder(attacked.Position); return; } if (_selectedBuilding != null) { return; /* * AttackMessage am = (AttackMessage)MessageFactory.Create(MessageType.Attack); * am.Attacker = _selectedBuilding.ObjectID; * am.Attacked = attacked.ObjectID; * am.IdPlayer = _selectedBuilding.ObjectID.PlayerID; * Connection.Instance.SendMessage(am);*/ } bool soundPlayed = false; List <Unit> selectedUnits = new List <Unit>(_selectedUnits); foreach (Unit u in selectedUnits) { if (u.ObjectID.PlayerID != CurrentPlayer.Id && u.State != Unit.UnitState.destroyed) { continue; } AttackMessage am = (AttackMessage)MessageFactory.Create(MessageType.Attack); am.Attacker = u.ObjectID; am.Attacked = attacked.ObjectID; am.IdPlayer = u.ObjectID.PlayerID; Connection.Instance.SendMessage(am); /* Sound */ if (!soundPlayed) { AudioEngine.Instance.Sound.PlayMisc(MiscSoundType.Affirmative); soundPlayed = true; } } }
/// <summary> /// 受击火花特效 /// 在相对位移点产生火花 /// </summary> /// <param name="delta">Delta.</param> public void AddFlashEffect(Vector3 delta) { GameObject prefab = ResourceManager.GetInstance.LoadPrefab(TestData.charDB [6].Prefab); GameObject parent = StageManager.SharedInstance.EffectLayer; GameObject go = StageManager.SharedInstance.AddToStage(parent, prefab); BaseEffect baseEffect = go.AddComponent <BaseEffect> (); baseEffect.transform.position = MapUtil.GetDeltaPointWorld(battleAgent, delta); AttackMessage message = new AttackMessage(battleAgent, battleAgent.Targets, 1); baseEffect.PlayOnAgent(message); }
/// <summary> /// 跟随目标 /// </summary> /// <param name="attackMessage">Attack message.</param> /// <param name="time">Time.</param> public void FollowTarget(AttackMessage attackMessage, float time) { targetToFollow = this.attackMessage.Targets[0].GameObject; this.attackMessage = attackMessage; Transform t2 = attackMessage.Targets [0].GameObject.transform; //gameObject.transform.position = t2.position; Vector3 pos = MapUtil.GetHitPointWorld(attackMessage.Targets[0]); gameObject.transform.position = pos; InvokeRepeating("FollowTarget", 1.0f, 0.1f); }
void FriendliesAttacked(Transform sender, AttackMessage e) { if (sender.tag == gameObject.tag && sender != transform && currentState != States.AttackEnemy && previousTarget != e.source && Vector3.Distance(transform.position, sender.transform.position) <= commanderRange ) { actions.target = e.source; previousTarget = e.source; currentState = States.AttackEnemy; } }
/// <summary> /// 指定时间内飞到目的地 /// </summary> /// <param name="attackMessage">Attack message.</param> /// <param name="time">Time.</param> public void FlyToTarget(AttackMessage attackMessage, float time) { this.attackMessage = attackMessage; Vector3 hit = MapUtil.GetHitPointWorld(attackMessage.Targets [0]); Hashtable args = new Hashtable(); args.Add("easeType", iTween.EaseType.linear); args.Add("x", hit.x); args.Add("y", hit.y); args.Add("time", time); args.Add("oncomplete", "OnComplete"); args.Add("oncompletetarget", gameObject); iTween.MoveTo(gameObject, args); //Debug.Log ("FlyToTarget:" + targetScreen); }
private void RpcApplyDamage(AttackMessage message) { PlayerEffects playerEffects = this.gameObject.GetComponent <PlayerEffects>(); if ((playerEffects != null) && !this._isDead && !this._damageImmune) { this.updateDamageScreen(message.damageAmount); playerEffects.CmdBloodParticle(message.impactPosition); if (this._isDead) { this.die(message.attackerID); } } }
//The attack request ignores action queue stuff and auto accepts, so I dont have to rewrite the queue system that seems to only work for movement void GotAttackRequest(NetworkMessage netMsg) { AttackRequestMessage attackRequest = netMsg.ReadMessage <AttackRequestMessage>(); AttackMessage attackMessage = new AttackMessage(); attackMessage.id = netMsg.conn.connectionId; attackMessage.attackId = attackRequest.attackId; attackMessage.targetTileX = attackRequest.targetTileX; attackMessage.targetTileY = attackRequest.targetTileY; //FOr now we will do random damage attackMessage.result = Random.Range(5, 9); NetworkServer.SendToAll(CustomNetMsg.Attack, attackMessage); handleAttack(attackMessage.id, attackMessage.attackId, attackMessage.targetTileX, attackMessage.targetTileY, attackMessage.result); }
// // Networked methods, runs on the server or client appropriately. // public void Attack(float amount, GameObject attacker, int attackerID, int victimID, Vector3 impactPos) { PlayerEffects playerEffects = this.gameObject.GetComponent <PlayerEffects>(); if ((playerEffects != null) && !this._damageImmune) { AttackMessage message = new AttackMessage(); message.damageAmount = playerEffects.calcDamage(attacker, amount); message.attackerID = attackerID; message.victimID = victimID; message.impactPosition = impactPos; NetworkClient.allClients[0].Send((short)NetworkMessageType.MSG_ATTACK, message); } }
/// <summary> /// Raises the shoot on event. /// </summary> protected override void OnShootOnEvent() { GameObject bulletPrefab = ResourceManager.GetInstance.LoadPrefab (testDB [0].Prefab); GameObject parent = StageManager.SharedInstance.EffectLayer; GameObject bullet = StageManager.SharedInstance.AddToStage (parent, bulletPrefab); baseBullet = bullet.AddComponent<BaseBullet> (); baseBullet.BattleAgent = this.BattleAgent; //baseBullet.transform.position = battleAgent.GameObject.transform.position; baseBullet.Speed = 1136.0f / 1000.0f; Vector3 pos = MapUtil.RelativeMovePosition (BattleAgent.BaseSprite.HitPoint, BattleAgent.GameObject.transform); baseBullet.transform.position = new Vector3 (pos.x, pos.y, BattleAgent.GameObject.transform.position.z); AttackMessage message = new AttackMessage (BattleAgent, BattleAgent.Targets, 1); baseBullet.AttachTarget (message); }
protected override void OnUltShootOnEvent() { List<BattleAgent> targets = BattleManager.SharedInstance.GetEnemyList (); for (int i = 0; i < targets.Count; i++) { List<BattleAgent> tlist=new List<BattleAgent>(); tlist.Add(targets[i]); GameObject bulletPrefab = ResourceManager.GetInstance.LoadPrefab (TestData.charDB [1].Prefab); GameObject parent = StageManager.SharedInstance.EffectLayer; GameObject bullet = StageManager.SharedInstance.AddToStage (parent, bulletPrefab); baseBullet = bullet.AddComponent<BaseBullet> (); baseBullet.BattleAgent = this.BattleAgent; baseBullet.transform.position = MapUtil.GetHitPointWorld(targets[i]); AttackMessage message = new AttackMessage (BattleAgent, tlist, 1); baseBullet.FlyToTargetRoot (message,0.5f); } }
protected override void OnUltShootOnEvent() { GameObject bulletPrefab = ResourceManager.GetInstance.LoadPrefab (TestData.charDB[4].Prefab); GameObject parent = StageManager.SharedInstance.EffectLayer; GameObject bullet = StageManager.SharedInstance.AddToStage (parent, bulletPrefab); baseBullet = bullet.AddComponent<BaseBullet> (); baseBullet.BattleAgent = this.BattleAgent; //baseBullet.transform.position = battleAgent.GameObject.transform.position; baseBullet.Speed = 1136.0f / 1000.0f; Vector3 pos = MapUtil.GetHitPointWorld(BattleAgent.Targets[0]); baseBullet.transform.position = pos; baseBullet.FaceTo = this.BattleAgent.BaseSprite.FaceTo; AttackMessage message = new AttackMessage (BattleAgent, BattleAgent.Targets, 1); //baseBullet.FlyToTargetOutScreen (message); baseBullet.FlyToTarget (message); }
protected override void OnUltShootOnEvent() { // GameObject bulletPrefab = ResourceManager.GetInstance.LoadPrefab (testDB [1].Prefab); // GameObject parent = StageManager.SharedInstance.EffectLayer; // GameObject bullet = StageManager.SharedInstance.AddToStage (parent, bulletPrefab); // baseBullet = bullet.AddComponent<BaseBullet> (); // baseBullet.BattleAgent = this.BattleAgent; // baseBullet.transform.position = BattleAgent.GameObject.transform.position; // baseBullet.Speed = 1136.0f / 1000.0f; // // AttackMessage message = new AttackMessage (BattleAgent, BattleAgent.Targets, 1); // // baseBullet.FlyToTarget (message); AttackMessage message = new AttackMessage (BattleAgent, BattleAgent.Targets, this.BattleAgent.SkillDict[CooldownType.Ult].Id); //有浮空效果的大招 if(this.BattleAgent.SkillDict[CooldownType.Ult].FloatTime>0) { BattleAgent t= this.BattleAgent.Targets[0]; //t.dispatchEvent (SoldierEvent.HIT, message); t.dispatchEvent(SoldierEvent.HIT_FLOAT,message); } }
/// <summary> /// 大招触发 /// </summary> protected override void OnUltShootOnEvent() { this.lastTargets = this.BattleAgent.Targets; //优先攻击浮空目标 Combo List<BattleAgent> floatList = BattleManager.SharedInstance.GetFloatTarget (); if (floatList.Count > 0) { this.BattleAgent.ChangeTargets(floatList); isComboAttack=true; } lastPosition = this.gameObject.transform.position; GameObject bulletPrefab = ResourceManager.GetInstance.LoadPrefab (TestData.charDB [10].Prefab); GameObject parent = StageManager.SharedInstance.EffectLayer; GameObject bullet = StageManager.SharedInstance.AddToStage (parent, bulletPrefab); baseBullet = bullet.AddComponent<BaseBullet> (); baseBullet.BattleAgent = this.BattleAgent; baseBullet.transform.position = MapUtil.GetHitPointWorld (this.BattleAgent.Targets [0]); //baseBullet去目标所在行 屏幕中间播放 StartCoroutine (MoveToSide ()); AttackMessage message = new AttackMessage (BattleAgent, this.BattleAgent.Targets, 1); if (isComboAttack) { message.ComboCount = 3; } baseBullet.AttachMiddle (message); this.BattleAgent.ChangeTargets(this.lastTargets); isComboAttack=false; }
void BattleUltHandler(CEvent e) { int index = Convert.ToInt32 (e.data); //奥丁大招 2000x 的技能ID if (index == 11) { //soldierList [0].BaseSoldier.StateMachine.ToggleMajorState (StateId.Ult, null); //soldierList [0].dispatchEvent (SoldierEvent.BATTLE_MESSAGE, message); AttackMessage message = new AttackMessage (agentDict ["od"], enemyList, 20001); EventCenter.GetInstance.dispatchEvent (SoldierEvent.ULT_LOAD, message); } if (index == 21) { //soldierList [0].BaseSoldier.StateMachine.ToggleMajorState (StateId.Ult, null); //soldierList [0].dispatchEvent (SoldierEvent.BATTLE_MESSAGE, message); AttackMessage message = new AttackMessage (agentDict ["le"], enemyList, 20002); EventCenter.GetInstance.dispatchEvent (SoldierEvent.ULT_LOAD, message); } if (index == 31) { //soldierList [0].BaseSoldier.StateMachine.ToggleMajorState (StateId.Ult, null); //soldierList [0].dispatchEvent (SoldierEvent.BATTLE_MESSAGE, message); AttackMessage message = new AttackMessage (agentDict ["mx"], enemyList, 20003); EventCenter.GetInstance.dispatchEvent (SoldierEvent.ULT_LOAD, message); } if (index == 41) { //soldierList [0].BaseSoldier.StateMachine.ToggleMajorState (StateId.Ult, null); //soldierList [0].dispatchEvent (SoldierEvent.BATTLE_MESSAGE, message); AttackMessage message = new AttackMessage (agentDict ["hm"], enemyList, 20004); EventCenter.GetInstance.dispatchEvent (SoldierEvent.ULT_LOAD, message); } if (index == 51) { //soldierList [0].BaseSoldier.StateMachine.ToggleMajorState (StateId.Ult, null); //soldierList [0].dispatchEvent (SoldierEvent.BATTLE_MESSAGE, message); AttackMessage message = new AttackMessage (agentDict ["rr"], enemyList, 20005); EventCenter.GetInstance.dispatchEvent (SoldierEvent.ULT_LOAD, message); } }
/// <summary> /// 飞向目标然后出屏幕 /// </summary> public void FlyToTargetOutScreen(AttackMessage attackMessage) { this.attackMessage = attackMessage; Vector3 hit = MapUtil.GetHitPointWorld( attackMessage.Targets [0]); Hashtable args = new Hashtable (); args.Add ("easeType", iTween.EaseType.linear); args.Add ("x", hit.x); args.Add ("y", hit.y); args.Add ("speed",80f); //args.Add ("time", 0.15f); //args.Add ("time", 15f); args.Add ("oncomplete", "OnCompleteOutScreen"); args.Add ("oncompletetarget", gameObject); //args.Add ("oncompleteparams", this.attackMessage); iTween.MoveTo (gameObject, args); //Debug.Log ("FlyToTarget:" + targetScreen); }
/// <summary> /// 飞向目标 /// </summary> public void FlyToTarget(AttackMessage attackMessage) { this.attackMessage = attackMessage; //Debug.Log(MapUtil.GetInstance.WorldToMap(attackMessage.Targets[0].GameObject.transform.position)); // Transform t1 = attackMessage.Sender.GameObject.transform; // Transform t2 = attackMessage.Targets [0].GameObject.transform; // // float dis = Mathf.Abs (t1.position.x - t2.position.x); // float time = dis / Speed; //Vector3 hit = attackMessage.Targets [0].BaseSprite.HitPoint; //Debug.Log( attackMessage.Targets [0].MapPos); //Debug.Log( attackMessage.Targets [0].GameObject.transform.position); Vector3 hit = MapUtil.GetHitPointWorld( attackMessage.Targets [0]); //Vector3 hit = attackMessage.Targets [0].GameObject.transform.position; //Vector3 targetScreen = MapUtil.RelativeMovePosition (hit, t2); //t2.localPosition = target; Hashtable args = new Hashtable (); args.Add ("easeType", iTween.EaseType.linear); args.Add ("x", hit.x); args.Add ("y", hit.y); args.Add ("speed",80f); //args.Add ("time", 0.15f); //args.Add ("time", 15f); args.Add ("oncomplete", "OnComplete"); args.Add ("oncompletetarget", gameObject); //args.Add ("oncompleteparams", this.attackMessage); iTween.MoveTo (gameObject, args); //Debug.Log ("FlyToTarget:" + targetScreen); }
/// <summary> /// 攻击结束 /// </summary> public void OnAttackEnd() { for (int i = 0; i < battleAgent.Targets.Count; i++) { BattleAgent t = battleAgent.Targets [i]; AttackMessage message = new AttackMessage (battleAgent, battleAgent.Targets, 1); t.dispatchEvent (SoldierEvent.HIT, message); } OnIdle (); this.battleAgent.FinishMove (); }
/// <summary> /// 指定时间内飞到目的地脚下 /// </summary> /// <param name="attackMessage">Attack message.</param> /// <param name="time">Time.</param> public void FlyToTargetRoot(AttackMessage attackMessage,float time) { this.attackMessage = attackMessage; Vector3 hit = attackMessage.Targets [0].GameObject.transform.position; Hashtable args = new Hashtable (); args.Add ("easeType", iTween.EaseType.linear); args.Add ("x", hit.x); args.Add ("y", hit.y); args.Add ("time", time); args.Add ("oncomplete", "OnComplete"); args.Add ("oncompletetarget", gameObject); iTween.MoveTo (gameObject, args); //Debug.Log ("FlyToTarget:" + targetScreen); }
IEnumerator PlayUltEffect(AttackMessage message) { StartCoroutine(MaskFade ()); this.message = message; GameObject bulletPrefab = ResourceManager.GetInstance.LoadPrefab (TestData.charDB [7].Prefab); GameObject parent = StageManager.SharedInstance.WorldUltLayer; GameObject bullet = StageManager.SharedInstance.AddToStage (parent, bulletPrefab); baseEffect = bullet.AddComponent<BaseEffect> (); //baseEffect.transform.position = message.Sender.GameObject.transform.position; //Vector3 pos = MapUtil.RelativeMovePosition (battleAgent.BaseSprite.HitPoint, battleAgent.GameObject.transform); //baseEffect.transform.position = new Vector3 (pos.x, pos.y, battleAgent.GameObject.transform.position.z); BattleAgent battleAgent = message.Sender; baseEffect.transform.position = MapUtil.GetHitPointWorld (battleAgent); baseEffect.PlayOnAgent (message); //yield return new WaitForSeconds (0.1f); //addMask (); //Time.timeScale = 1.0f; battleAgent.dispatchEvent (SoldierEvent.BATTLE_MESSAGE, message); Time.timeScale = 0.6f; yield return new WaitForSeconds (0.1f); Time.timeScale = 1.0f; }
/// <summary> /// 被击中效果 /// </summary> /// <param name="battleAgent">攻击方</param> public void HitEffect(AttackMessage am) { //Debug.Log ("HitEffect"); BattleAgent attacker = am.Sender; float direct = Mathf.Sign (gameObject.transform.localPosition.x - attacker.GameObject.transform.localPosition.x); StartCoroutine (BackToIdle ()); // GameObject go = battleAgent.GameObject; // Vector3 pos = go.transform.position; // Vector3 local = go.transform.localPosition; //go.transform.localPosition = new Vector3 (local.x - 3, local.y, local.z); //go.transform.position = new Vector3(go.transform.position.x - 3 ,go.transform.position.y,go.transform.position.z); // Hashtable args = new Hashtable (); // args.Add ("easeType", iTween.EaseType.easeOutQuart); // args.Add ("x", pos.x); // args.Add ("time", 0.1f); // iTween.MoveTo (go, args); AddFlashEffect (); }
/// <summary> /// 受击火花特效 /// 在相对位移点产生火花 /// </summary> /// <param name="delta">Delta.</param> public void AddFlashEffect(Vector3 delta) { GameObject prefab = ResourceManager.GetInstance.LoadPrefab (TestData.charDB [6].Prefab); GameObject parent = StageManager.SharedInstance.EffectLayer; GameObject go = StageManager.SharedInstance.AddToStage (parent, prefab); BaseEffect baseEffect = go.AddComponent<BaseEffect> (); baseEffect.transform.position = MapUtil.GetDeltaPointWorld (battleAgent,delta); AttackMessage message = new AttackMessage (battleAgent, battleAgent.Targets, 1); baseEffect.PlayOnAgent (message); }
/// <summary> /// 开始大招特效 /// </summary> /// <param name="battleAgent">Battle agent.</param> /// <param name="attackMessage">Attack message.</param> public void StartUltraSpell(BattleAgent battleAgent, AttackMessage attackMessage) { }
/// <summary> /// 0.1秒执行一次计算路径和更新坐标 /// </summary> protected void UpdateHandler() { if (!isReady) { //Debug.Log("Not ready"); return; } UpdateMapPosition (); baseSprite.FaceToTarget (); if (isAttackCD) { AttackMessage message = new AttackMessage (this, this.targets, skillDict [CooldownType.Attack].Id); this.dispatchEvent (SoldierEvent.BATTLE_MESSAGE, message); isAttackCD = false; } if (isUltCD) { //boss自动放技能 if (this.baseSoldier.GetType () == typeof(AMSoldier)) { AttackMessage message = new AttackMessage (this, this.targets, skillDict [CooldownType.Ult].Id); this.dispatchEvent (SoldierEvent.BATTLE_MESSAGE, message); isUltCD = false; } } CheckGuardRange (); //Debug.Log (mapPos); }
/// <summary> /// 处理战斗信息 /// </summary> /// <param name="e">E.</param> public void BattleMessageHandler(CEvent e) { this.attackMessage = (AttackMessage)e.data; SkillData skill = SkillData.testData [this.attackMessage.SkillId]; //大招 Id大于20000 没有距离限制 if (attackMessage.SkillId > 20000) { baseSoldier.OnUlt (); } else { //射程之外 if (skill.Range < Vector2.Distance (this.attackMessage.Sender.mapPos, this.attackMessage.Targets [0].mapPos)) { PathToTarget (skill.Range); return; } //普通攻击 baseSoldier.OnAttack (); } //Debug.Log ("battleMessageHandler"); }
/// <summary> /// 黑色落位效果 /// </summary> public void AddBlackDownEffect() { GameObject downPrefab = ResourceManager.GetInstance.LoadPrefab (TestData.charDB [25].Prefab); GameObject parent = StageManager.SharedInstance.EffectLayer; GameObject down = StageManager.SharedInstance.AddToStage (parent, downPrefab); Image img = down.GetComponent<Image> (); img.color = new Color (1.0f, 1.0f, 1.0f, 0.5f); BaseEffect baseEffect = down.AddComponent<BaseEffect> (); //Vector3 pos = MapUtil.GetInstance.MapToWorld (mapPos.x, mapPos.y); baseEffect.transform.position = gameObject.transform.position; baseEffect.transform.localPosition = new Vector3 (baseEffect.transform.localPosition.x, baseEffect.transform.localPosition.y + 300, baseEffect.transform.localPosition.z); AttackMessage message = new AttackMessage (battleAgent, battleAgent.Targets, 1); baseEffect.PlayOnAgent (message); }
/// <summary> /// 在士兵身上播放大招引导特效 /// </summary> /// <param name="message">Message.</param> public void PlayOnAgent(AttackMessage message) { this.attackMessage = message; StartCoroutine(PlayOneShot(StateId.Idle)); }
/// <summary> /// 跟随目标 /// </summary> /// <param name="attackMessage">Attack message.</param> /// <param name="time">Time.</param> public void FollowTarget(AttackMessage attackMessage,float time) { targetToFollow = this.attackMessage.Targets[0].GameObject; this.attackMessage = attackMessage; Transform t2 = attackMessage.Targets [0].GameObject.transform; //gameObject.transform.position = t2.position; Vector3 pos = MapUtil.GetHitPointWorld(attackMessage.Targets[0]); gameObject.transform.position = pos; InvokeRepeating("FollowTarget", 1.0f, 0.1f); }
/// <summary> /// 受击火花特效 /// </summary> public void AddFlashEffect() { GameObject prefab = ResourceManager.GetInstance.LoadPrefab (TestData.charDB [6].Prefab); GameObject parent = StageManager.SharedInstance.EffectLayer; GameObject go = StageManager.SharedInstance.AddToStage (parent, prefab); BaseEffect baseEffect = go.AddComponent<BaseEffect> (); //baseEffect.transform.position = gameObject.transform.position; //Vector3 pos = MapUtil.RelativeMovePosition (battleAgent.BaseSprite.HitPoint, battleAgent.GameObject.transform); //baseEffect.transform.position = new Vector3 (pos.x, pos.y, battleAgent.GameObject.transform.position.z); baseEffect.transform.position = MapUtil.GetHitPointWorld (battleAgent); AttackMessage message = new AttackMessage (battleAgent, battleAgent.Targets, 1); baseEffect.PlayOnAgent (message); }
/// <summary> /// 被击中效果 /// </summary> /// <param name="battleAgent">攻击方</param> public void ComboHitEffect(AttackMessage am) { BattleAgent attacker = am.Sender; for (int i = 0; i < am.ComboCount; i++) { float x = UnityEngine.Random.Range(0,100); float y = UnityEngine.Random.Range(0,100); AddFlashEffect (new Vector3(x,y,0)); //PlayComboSound(); } StartCoroutine( PlayComboSound(am.ComboCount)); AddComboFlashEffect(); AddComboNum(); }