示例#1
0
 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;
 }
示例#2
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);
     }
 }
示例#3
0
        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);
        }
示例#4
0
    /// <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;
    }
示例#6
0
 /* 设置炮弹的位置与速度并传递攻击信息   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);
    }
示例#10
0
    /// <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");
    }
示例#11
0
    /// <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);
    }
示例#12
0
 public static void TriggerAttack(UnityEngine.Transform sender, AttackMessage e)
 {
     if (Attack != null)
     {
         Attack(sender, e);
     }
 }
示例#13
0
    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;
    }
示例#14
0
    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;
    }
示例#15
0
 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);
     }
 }
示例#16
0
    /// <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);
    }
示例#17
0
    /// <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);
    }
示例#18
0
    /// <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);
    }
示例#19
0
    /// <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);
    }
示例#22
0
 // 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
    }
示例#24
0
 public void OnMessage(AttackMessage msg)
 {
     if (HP < 50)
     {
         ChangeState(new PeopleScare(gameObject));
     }
     else
     {
         ChangeState(new PeopleRun(gameObject, msg.Attacker));
     }
     HP -= msg.Damage;
 }
示例#25
0
    /// <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();
    }
示例#26
0
        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;
                }
            }
        }
示例#27
0
    /// <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);
    }
示例#28
0
    /// <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);
    }
示例#29
0
 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;
     }
 }
示例#30
0
    /// <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);
    }
示例#31
0
    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);
            }
        }
    }
示例#32
0
文件: Server.cs 项目: mserier/vrar
    //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);
    }
示例#33
0
    //
    // 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);
        }
    }
示例#34
0
    /// <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);
    }
示例#35
0
    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);
        }
    }
示例#36
0
    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);
    }
示例#37
0
    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);

        }
    }
示例#38
0
    /// <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;
    }
示例#39
0
    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);

        }
    }
示例#40
0
    /// <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);
    }
示例#41
0
    /// <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);
    }
示例#42
0
    /// <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 ();
    }
示例#43
0
    /// <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;
    }
示例#45
0
    /// <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 ();
    }
示例#46
0
    /// <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)
 {
 }
示例#48
0
    /// <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);
    }
示例#49
0
    /// <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");
    }
示例#50
0
    /// <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);
    }
示例#51
0
    /// <summary>
    /// 在士兵身上播放大招引导特效
    /// </summary>
    /// <param name="message">Message.</param>
    public void PlayOnAgent(AttackMessage message)
    {
        this.attackMessage = message;

        StartCoroutine(PlayOneShot(StateId.Idle));
    }
示例#52
0
    /// <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);
    }
示例#53
0
    /// <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);
    }
示例#54
0
    /// <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();
    }