Example #1
0
    /// <summary>
    /// need fromPos,toUnit
    /// </summary>
    /// <param name="duration"></param>
    void FireFollow(float duration)
    {
        //m_fromPos = fromPos;
        //m_toUnit = toUnit;
        Unit toUnit = m_toUnit.Unit;

        if (toUnit == null)
        {
            return;
        }

        m_node.position = m_fromPos;

        m_node.stopAllActions();

        m_node.DoAnimate(ModelNode.kActionMove, null, ModelNode.CONST_LOOP_FOREVER, null);
        cca.Function onMoveToFinished = delegate {
            if (m_fromToType == FromToType.kPointToUnit || m_fromToType == FromToType.kUnitToUnit)
            {
                if (m_toUnit.Unit != null && m_toUnit.Unit.OnProjectileArrive(this) == false)
                {
                    // 当目标单位存活且目标单位拒绝(反射)抛射物成功,抛射物不死亡(可能被反弹)
                    return;
                }
            }

            Die();
        };
        m_node.DoMoveToUnit(toUnit.Node, true, m_maxHeightDelta, duration, onMoveToFinished);
    }
Example #2
0
 protected void Die()
 {
     m_node.stopAllActions();
     cca.Function onEffect = null;
     if (HasEffectFlag(kEffectOnDying))
     {
         onEffect = OnEffect;
     }
     m_node.DoAnimate(ModelNode.kActionDie, onEffect, 1, OnDyingDone);
 }
Example #3
0
    /// <summary>
    /// need fromUnit,toUnit
    /// </summary>
    void FireLink()
    {
        Unit     u = m_fromUnit;
        UnitNode d = u.Node;

        Unit     t  = m_toUnit;
        UnitNode td = t.Node;

        Debug.Assert(u != null && t != null && d != null && td != null);

        m_fromPos = d.position;
        m_toPos   = td.position;
        m_node.stopAllActions();

        cca.Function onEffect = null;
        if (HasEffectFlag(kEffectOnDying))
        {
            onEffect = OnEffect;
        }
        m_node.DoLinkUnitToUnit(d, td, ModelNode.kActionDie, onEffect, 1, OnDyingDone);
    }
Example #4
0
    /// <summary>
    /// need fromPos,toPos
    /// </summary>
    /// <param name="duration"></param>
    void FireStraight(float duration)
    {
        m_contactedUnits.Clear();

        m_node.position = m_fromPos;

        m_node.stopAllActions();

        m_node.DoAnimate(ModelNode.kActionMove, null, ModelNode.CONST_LOOP_FOREVER, null);
        cca.Function onMoveToFinished = delegate {
            if (m_fromToType == FromToType.kPointToUnit || m_fromToType == FromToType.kUnitToUnit)
            {
                if (m_toUnit.Unit != null && m_toUnit.Unit.OnProjectileArrive(this) == false)
                {
                    return;
                }
            }

            Die();
        };
        m_node.DoMoveTo(m_toPos, duration, onMoveToFinished);
    }