Пример #1
0
 /// <summary>
 /// 初始化debuff
 /// </summary>
 /// <param name="type"></param>
 /// <param name="time"></param>
 /// <param name="owner"></param>
 /// <param name="value"></param>
 public virtual void OnInit(EnumDefine.DeBuffType type, float time, MMORPG_BaseObject owner, float value)
 {
     this.m_DebuffType = type;
     this.m_Time       = time;
     this.m_Owner      = owner;
     this.m_Value      = value;
 }
 public Telegram(float time, Transform senderTrans, Transform receiverTrans, int msg, MonoBehaviour mb, float hurt1)
 {
     DispatchTime  = time;
     SenderTrans   = senderTrans;
     ReceiverTrans = receiverTrans;
     Msg           = msg;
     _Behaviour    = mb;
     hurt          = hurt1;
     debufftype    = EnumDefine.DeBuffType.None;
     bufftype      = EnumDefine.BuffType.None;
 }
    /// <summary>
    /// 增加减益Buff
    /// </summary>
    /// <param name="type"></param>
    /// <param name="time"></param>
    /// <param name="value"></param>
    public void AddDeBuff(EnumDefine.DeBuffType type, float time, float value)
    {
        Debug.Log(this.gameObject.name + "--->:测试增加一个debuff" + "--->" + type.ToString());
        MMORPG_BaseDeBuff debuff = m_debuffs.Find(x => x.GetDeBuffType() == type);

        if (debuff != null)
        {
            debuff.OnInit(type, time, this, value);
        }
        else
        {
            MMORPG_BaseDeBuff instance = MMORPG_BaseDeBuff.GetInstance(type);
            instance.OnInit(type, time, this, value);
            this.m_debuffs.Add(instance);
        }
    }
Пример #4
0
    /// <summary>
    /// 获得本类实例
    /// </summary>
    /// <returns></returns>
    public static MMORPG_BaseDeBuff GetInstance(EnumDefine.DeBuffType type)
    {
        switch (type)
        {
        case EnumDefine.DeBuffType.Ice:
            return(new MMORPG_DeBuff_Ice());

        case EnumDefine.DeBuffType.Fire:
            return(new MMORPG_DeBuff_Fire());

        case EnumDefine.DeBuffType.Poison:
            return(new MMORPG_DeBuff_Poison());

        case EnumDefine.DeBuffType.Light:
            return(new MMORPG_DeBuff_Light());

        case EnumDefine.DeBuffType.Dark:
            return(new MMORPG_DeBuff_Dark());

        default:
            return(new MMORPG_BaseDeBuff());
        }
    }
    /// <summary>
    /// 在实体之间传递消息
    /// </summary>
    /// <param name="delay">该消息延迟执行的时间</param>
    /// <param name="senderTrans">消息发送者</param>
    /// <param name="receiverTrans">消息接受者</param>
    /// <param name="msg">消息的类型,由一个枚举值转化而来</param>
    /// <param name="_mb">当前游戏实体(就是挂在目标游戏物体上的相应脚本)</param>
    public void DispatchMessage(float delay, Transform senderTrans, Transform receiverTrans, int msg, MonoBehaviour _mb, float hurt1, EnumDefine.DeBuffType debuff, float bfvalue, float bftime)
    {
        // 由接受者的Transform获取它的实体(其实就是对应脚本)
        BaseGameEntity receiver = EntityManager.Instance.GetEntityFromTransform(receiverTrans);
        Telegram       telegram = new Telegram(delay, senderTrans, receiverTrans, msg, _mb, hurt1, debuff, bfvalue, bftime);

        if (delay <= 0.0f)
        {
            //Debug.Log("No Delay");
            Discharge(receiver, telegram);
        }
        else
        {
            //Debug.Log("In Delay");
            // 目前经过的时间,从游戏开始之后计算
            float currentTime = Time.realtimeSinceStartup;
            telegram.DispatchTime = currentTime + delay;

            // 查找重复的消息,重复的话就直接return
            foreach (Telegram val in PriorityQ)
            {
                if (val.SenderTrans == senderTrans && val.ReceiverTrans == receiverTrans && val.Msg == msg)
                {
                    return;
                }
            }

            // 一个延时执行的消息队列
            PriorityQ.Add(telegram);
        }
    }
 public override void OnInit(EnumDefine.DeBuffType type, float time, MMORPG_BaseObject owner, float value)
 {
     base.OnInit(type, time, owner, value);
 }