public void Discharge(BaseGameEntity _Receiver, Telegram _Telegram)
 {
     if (!_Receiver.HandleMessage(_Telegram))
     {
         _Receiver.AnnounceTask("Couldn't handle message!");
     }
 }
Esempio n. 2
0
    //点对点发送消息
    public void DisparcherMessage(double delay, int sender, int receiver, MessageEnum msg)
    {
        BaseGameEntity pSender   = EntityManager.Instance().GetEntityFromID(sender);
        BaseGameEntity pReceiver = EntityManager.Instance().GetEntityFromID(receiver);

        if (pReceiver == null)
        {
            return;
        }

        Telegram telegram = new Telegram();

        telegram.SetTelegram(0, sender, receiver, msg);

        //如果没有延迟的话,就调用处理函数Discharge,这个函数会调用handlemessage函数
        if (delay <= 0.0f)
        {
            DisCharge(pReceiver, telegram);
        }

        //需要延迟发送的话就计算时间,计算要发送的时间,在delayDispatcher中根据时间判断并发送
        else
        {
            double CurrentTime = Time.time;
            telegram.DispatchTime = CurrentTime + delay;

            PriorityQ.Add(telegram);//把信息加入到链表中
        }
    }
Esempio n. 3
0
 public Telegram(BaseGameEntity sender, BaseGameEntity reciever, int msg, DateTime dispatchTime)
 {
     this.sender       = sender;
     this.reciever     = reciever;
     this.msg          = msg;
     this.dispatchTime = dispatchTime;
 }
Esempio n. 4
0
    void OnTargetHit()
    {
        // the target could already be dead.. check..
        if (target != null && target.gameObject.activeInHierarchy)
        {
            BaseGameEntity targetEntity = target.GetComponent <BaseGameEntity>();
            targetEntity.DecreaseHp(cur_damage);

            if (particalPrefab != null)
            {
                GameObject partical = Instantiate <GameObject>(particalPrefab);
                partical.transform.position = target.transform.position;

                SmartParticle sp = partical.GetComponent <SmartParticle>();
                if (sp != null)
                {
                    sp.StickToTarget(target);
                }
            }

            if (isBufferUsed)
            {
                targetEntity.RegisterBuffer(buffer);
            }
        }
        EntityManager.S.ReturnEntity(this);
    }
Esempio n. 5
0
    public void ReturnEntity(int entityID)
    {
        BaseGameEntity entity = FindEntityWithID(entityID);

        entity.gameObject.SetActive(false);
        entity.transform.position = INIT_POSITION;
    }
Esempio n. 6
0
        public bool UseItemAtIndex(int index, int count, BaseGameEntity target = null)
        {
            if (index >= 0)
            {
                InteractItem item = GetItemByIndex(index);

                if (!System.Object.ReferenceEquals(null, item))
                {
                    if (!System.Object.ReferenceEquals(null, Owner))
                    {
                        if (System.Object.ReferenceEquals(null, target))
                        {
                            target = Owner;
                        }
                        Owner.UseItem(item.CfgID, target);

                        item.Count -= count;

                        if (item.Count > 0)
                        {
                            OnItemChange(index);
                        }
                        else
                        {
                            RemoveBagItem(index);
                        }
                    }

                    return(true);
                }
            }
            return(false);
        }
        void OnGUI()
        {
            PlayerCharacterController controller = BasePlayerCharacterController.Singleton as PlayerCharacterController;

            if (controller)
            {
                BaseGameEntity target = controller.Targeting?.SelectedTarget != null?controller.Targeting.SelectedTarget.GetComponent <BaseGameEntity>() : null;

                BaseGameEntity subTarget = controller.subTarget;
                if (character)
                {
                    subTargetIndicator.SetActive(subTarget != null && subTarget.ObjectId == character.Data.ObjectId);
                    targetIndicator.SetActive(target != null && target.ObjectId == character.Data.ObjectId);
                }
                if (npc)
                {
                    subTargetIndicator.SetActive(subTarget != null && subTarget.ObjectId == npc.Data.ObjectId);
                    targetIndicator.SetActive(target != null && target.ObjectId == npc.Data.ObjectId);
                }
                if (harvestable)
                {
                    subTargetIndicator.SetActive(subTarget != null && subTarget.ObjectId == harvestable.Data.ObjectId);
                    targetIndicator.SetActive(target != null && target.ObjectId == harvestable.Data.ObjectId);
                }
                gameObject.layer = LayerMask.NameToLayer(targetIndicator.activeSelf || subTargetIndicator.activeSelf ? targetedLayer : defaultLayer);
            }
        }
Esempio n. 8
0
 public override void Use(BaseGameEntity target, BaseGameEntity dst = null)
 {
     if (SkillID != 0)
     {
         SKillMananger.Instance.TryUseSkill(SkillID, target, null);
     }
 }
Esempio n. 9
0
 public override void Use(BaseGameEntity target, BaseGameEntity dst = null)
 {
     if (!System.Object.ReferenceEquals(target, null))
     {
         target.Xue -= Num;
     }
 }
Esempio n. 10
0
        public override void Execute(BaseGameEntity pEntity)
        {
            Miner pMiner = (Miner)pEntity;

            //deposit the gold
            pMiner.AddToWealth(pMiner.GoldCarried);

            pMiner.GoldCarried = 0;

            DebugMessages.Instance.WriteLine(String.Format("{0}: Depositing gold. Total savings now: {1}", MainSM.GetEntityName(pEntity.ID()), pMiner.Wealth));

            //wealthy enough to have a well earned rest?
            if (pMiner.Wealth >= Miner.ComfortLevel)
            {
                DebugMessages.Instance.WriteLine(String.Format("{0}: WooHoo! Rich enough for now. Back home to mah li'lle lady", MainSM.GetEntityName(pEntity.ID())));

                pMiner.GetFSM().ChangeState(new GoHomeAndSleepTilRested());
            }

            //otherwise get more gold
            else
            {
                pMiner.GetFSM().ChangeState(new EnterMineAndDigForNugget());
            }
        }
Esempio n. 11
0
        public override void Execute(BaseGameEntity pEntity)
        {
            Miner pMiner = (Miner)pEntity;

            if (pMiner.HP == 1)
            {
                DebugMessages.Instance.WriteLine(String.Format("{0}: Dang it, defeated by a drunkard!", MainSM.GetEntityName(pEntity.ID())));

                // Lost fight! Tell Joe we are done.
                MessageDispatcher.Instance.DispatchMessage((int)MessageDispatcher.SEND_MSG_IMMEDIATELY,
                                                           pEntity.ID(),
                                                           (int)EntityName.ent_BarFly,
                                                           (int)message_type.Msg_DeclineFight,
                                                           (int)MessageDispatcher.NO_ADDITIONAL_INFO);

                pMiner.GetFSM().RevertToPreviousState();
            }
            else
            {
                // Throw a punch
                DebugMessages.Instance.WriteLine(String.Format("{0}: Take this, drunken varmint!", MainSM.GetEntityName(pEntity.ID())));

                MessageDispatcher.Instance.DispatchMessage((int)MessageDispatcher.SEND_MSG_IMMEDIATELY,
                                                           pEntity.ID(),
                                                           (int)EntityName.ent_BarFly,
                                                           (int)message_type.Msg_IncomingPunch,
                                                           (int)MessageDispatcher.NO_ADDITIONAL_INFO);
            }
        }
Esempio n. 12
0
        public override bool OnMessage(BaseGameEntity pEntity, Telegram pTelegram)
        {
            Miner pMiner = (Miner)pEntity;

            switch (pTelegram.Msg)
            {
            case (int)message_type.Msg_IncomingPunch:
            {
                if (Utils.RandFloat() <= 0.5)
                {
                    pMiner.HP = pMiner.HP - 1;

                    DebugMessages.Instance.WriteLine(String.Format("{0}: Ouch, my nose.", MainSM.GetEntityName(pEntity.ID())));
                }
                else
                {
                    DebugMessages.Instance.WriteLine(String.Format("{0}: Dodged!", MainSM.GetEntityName(pEntity.ID())));
                }

                return(true);
            }

            case (int)message_type.Msg_DeclineFight:
            {
                DebugMessages.Instance.WriteLine(String.Format("{0}: Yes! Victorious!", MainSM.GetEntityName(pEntity.ID())));

                pMiner.GetFSM().RevertToPreviousState();

                return(true);
            }
            }

            return(false);
        }
Esempio n. 13
0
        public override void Execute(BaseGameEntity pEntity)
        {
            Miner pMiner = (Miner)pEntity;

            //Now the miner is at the goldmine he digs for gold until he
            //is carrying in excess of MaxNuggets. If he gets thirsty during
            //his digging he packs up work for a while and changes state to
            //gp to the saloon for a whiskey.
            pMiner.AddToGoldCarried(1);

            pMiner.IncreaseFatigue();

            DebugMessages.Instance.WriteLine(String.Format("{0}: Pickin' up a nugget", MainSM.GetEntityName(pEntity.ID())));

            //if enough gold mined, go and put it in the bank
            if (pMiner.PocketsFull())
            {
                pMiner.GetFSM().ChangeState(new VisitBankAndDepositGold());
            }

            if (pMiner.Thirsty())
            {
                pMiner.GetFSM().ChangeState(new QuenchThirst());
            }
        }
Esempio n. 14
0
    //点对面发送消息
    public void DisparcherMessage(double delay, int sender, MessageEnum msg)
    {
        BaseGameEntity pSender  = EntityManager.Instance().GetEntityFromID(sender);
        Telegram       telegram = new Telegram();

        //为什么这里设置信息不直接用delay
        telegram.SetTelegram(0, sender, msg);

        //如果没有延迟的话,就调用处理函数Discharge,这个函数会调用handlemessage函数
        if (delay <= 0.0f)
        {
            //遍历所有的basegameobject将消息发送出去,有处理这个方法的状态就会处理,没有的不做处理
            //遍历可能出错,检查的时候注意下!!!
            foreach (KeyValuePair <int, BaseGameEntity> pvr in EntityManager.Instance().EntityMap)
            {
                DisCharge(pvr.Value, telegram);
            }
        }

        else
        {
            double CurrentTime = Time.time;
            telegram.DispatchTime = CurrentTime + delay;

            PriorityQ.Add(telegram);//把信息加入到链表中
        }
    }
    public void DispatchMessage(float delay, BaseGameEntity sender, BaseGameEntity receiver, FSMessageType msg, Hashtable parameters)
    {
        if (sender == null || receiver == null)
        {
            Debug.LogError("Invalid Sender or Receiver!");
            return;
        }

        Telegram telegram = new Telegram(delay, sender, receiver, msg, parameters);

        if (delay <= 0.0f)
        {
            this.Discharge(receiver, telegram);
        }
        else
        {
            float currentTime = Time.realtimeSinceStartup;
            telegram.DispatchTime = currentTime + delay;

            this.PriorityQ.ForEach(val =>
            {
                if (val.Sender == sender && val.Reciver == receiver && val.Msg == msg)
                {
                    //return;
                }
            });
            this.PriorityQ.Add(telegram);
        }
    }
 private void Discharge(BaseGameEntity pReceiver, Telegram telegram)
 {
     if (!pReceiver.HandleMessage(telegram))
     {
         Debug.LogError("Invalid Message!");
     }
 }
    /// <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.BuffType buff, float bfvalue, float bftime)
    {
        // 由接受者的Transform获取它的实体(其实就是对应脚本)
        BaseGameEntity receiver = EntityManager.Instance.GetEntityFromTransform(receiverTrans);
        Telegram       telegram = new Telegram(delay, senderTrans, receiverTrans, msg, _mb, hurt1, buff, 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);
        }
    }
    private IList <Telegram> PriorityQ = new List <Telegram>(); // 延迟消息队列

    private void Discharge(BaseGameEntity receiver, Telegram telegram)
    {
        if (!receiver.HandleMessage(telegram))
        {
            //Debug.LogError("无法解析的消息");
        }
    }
 void Discharge(BaseGameEntity receiver, Telegram telegram)
 {
     if (!receiver.HandleMessage(telegram))
     {
         Console.WriteLine("Message not handled");
     }
 }
    public virtual void Target(GameObject enemy)
    {
        if (enemy != null)
        {
            BaseGameEntity agent = enemy.GetComponentInParent <BaseGameEntity>();

            if (agent != null)
            {
                if (selectedTarget != null && selectedTarget == enemy)
                {
                    UnTarget(selectedTarget);
                }
                selectedTarget = enemy;
                if (potentialTarget == selectedTarget)
                {
                    potentialTarget = null;
                }
                if (agent is BaseCharacterEntity)
                {
                    recticleMoveTime = 0;
                    BaseCharacterEntity character = agent as BaseCharacterEntity;
                    character.OnTargeted(GetComponent <BaseCharacterEntity>());
                    character.CharacterDied.AddListener(AgentDies);
                }
            }
        }
    }
    //通过ID来找到BaseGameEntity
    public BaseGameEntity GetEntityFromID(int id)
    {
        BaseGameEntity info = null;

        EntityMap.TryGetValue(id, out info);
        return(info);
    }
    protected virtual List <GameObject> SortObjectsInView(bool cycling = false)
    {
        List <GameObject> Sorted_List   = m_CandidateTargets.OrderBy(go => GetSortWeight(go, cycling)).ToList();
        List <GameObject> objectsInView = new List <GameObject>();

        for (var i = 0; i < Sorted_List.Count(); ++i)
        {
            IDamageableEntity damageable = Sorted_List[i].GetComponent <IDamageableEntity>();
            BaseGameEntity    agent      = Sorted_List[i].GetComponentInParent <BaseGameEntity>();
            if ((agent == null && damageable == null) || (bool)(damageable != null && damageable.IsHideOrDead()))
            {
                continue;
            }
            Vector2 screenPosition = Camera.main.WorldToScreenPoint(Sorted_List[i].transform.position);
            // Entity is within the screen (no targeting offscreen)
            if (screenPosition.x > 0 && screenPosition.x < Screen.width && screenPosition.y > 0 && screenPosition.y < Screen.height && Sorted_List[i].activeInHierarchy)
            {
                // MAKE SURE ALL NON-COLLIDING ENTITIES ARE OFF OF THE DEFAULT LAYER PLEASE
                // If this does not work, change the layer for playercharactercontroller to Player or something
                LayerMask mask   = 1 << LayerMask.NameToLayer("Default") | 1 << LayerMask.NameToLayer("Building");
                bool      didHit = Physics.Linecast(Controller.CacheGameplayCamera.transform.position, GetCenter(Sorted_List[i]), mask);
                if (!didHit)
                {
                    objectsInView.Add(Sorted_List[i]);
                }
            }
        }
        Debug.Log(objectsInView.Count);
        return(objectsInView);
    }
Esempio n. 23
0
        public override bool OnMessage(BaseGameEntity pEntity, Telegram pTelegram)
        {
            BarFlyJoe joe = (BarFlyJoe)pEntity;

            switch (pTelegram.Msg)
            {
            case (int)message_type.Msg_DeclineFight:
            {
                DebugMessages.Instance.WriteLine(String.Format("{0}: Har har, ya'll a bunch o' yellow bellied chickens!", MainSM.GetEntityName(pEntity.ID())));

                joe.GetFSM().ChangeState(new JoeDoChillin());

                return(true);
            }

            case (int)message_type.Msg_AcceptFight:
            {
                joe.GetFSM().ChangeState(new JoeFight());

                return(true);
            }
            }

            return(false);
        }
Esempio n. 24
0
 //this method is utilized by DispatchMessage or DispatchDelayedMessages.
 //This method calls the message handling member function of the receiving
 //entity, pReceiver, with the newly created telegram
 public void Discharge(BaseGameEntity pReceiver, Telegram telegram)
 {
     if (!pReceiver.HandleMessage(telegram))
     {
         Debug.WriteLine("Telegram could not be handled");
     }
 }
Esempio n. 25
0
        public override void Execute(BaseGameEntity pEntity)
        {
            BarFlyJoe joe = (BarFlyJoe)pEntity;

            if (joe.HP == 1)
            {
                // Lost fight! Tell Bob we are done.
                DebugMessages.Instance.WriteLine(String.Format("{0}: Ok ok Im beat! Mercy!", MainSM.GetEntityName(pEntity.ID())));

                MessageDispatcher.Instance.DispatchMessage((int)MessageDispatcher.SEND_MSG_IMMEDIATELY,
                                                           pEntity.ID(),
                                                           (int)EntityName.ent_Miner_Bob,
                                                           (int)message_type.Msg_DeclineFight,
                                                           (int)MessageDispatcher.NO_ADDITIONAL_INFO);

                joe.GetFSM().ChangeState(new JoeDoChillin());
            }
            else
            {
                // Throw a punch
                DebugMessages.Instance.WriteLine(String.Format("{0}: Eat mah knuckle!", MainSM.GetEntityName(pEntity.ID())));

                MessageDispatcher.Instance.DispatchMessage((int)MessageDispatcher.SEND_MSG_IMMEDIATELY,
                                                           pEntity.ID(),
                                                           (int)EntityName.ent_Miner_Bob,
                                                           (int)message_type.Msg_IncomingPunch,
                                                           (int)MessageDispatcher.NO_ADDITIONAL_INFO);
            }
        }
Esempio n. 26
0
        public override bool OnMessage(BaseGameEntity pEntity, Telegram pTelegram)
        {
            BarFlyJoe joe = (BarFlyJoe)pEntity;

            switch (pTelegram.Msg)
            {
            case (int)message_type.Msg_IncomingPunch:
            {
                if (Utils.RandFloat() <= 0.5)
                {
                    joe.HP = joe.HP - 1;

                    DebugMessages.Instance.WriteLine(String.Format("{0}: Gaah Im hit!", MainSM.GetEntityName(pEntity.ID())));
                }
                else
                {
                    DebugMessages.Instance.WriteLine(String.Format("{0}: Missed me, sucker!", MainSM.GetEntityName(pEntity.ID())));
                }

                return(true);
            }

            case (int)message_type.Msg_DeclineFight:
            {
                DebugMessages.Instance.WriteLine(String.Format("{0}: That'll teach ya to mess with an alchoholic!", MainSM.GetEntityName(pEntity.ID())));

                joe.GetFSM().ChangeState(new JoeDoChillin());

                return(true);
            }
            }

            return(false);
        }
Esempio n. 27
0
 public StateMachine(BaseGameEntity owner)
 {
     m_pOwner         = owner;
     m_pCurrentState  = null;
     m_pPreviousState = null;
     m_pGlobalState   = null;
 }
        public bool IsInAttackRange(BaseGameEntity src, BaseGameEntity dst,
                                    float distance)
        {
            Vector3 dis = src.Position - dst.Position;

            return(dis.sqrMagnitude < distance * distance);
        }
        public bool IsCloseEnough(BaseGameEntity src, BaseGameEntity dst,
                                  float distance)
        {
            Vector3 dis = src.Position - dst.Position;

            return(dis.sqrMagnitude < distance * distance);
        }
Esempio n. 30
0
 private void Discharge(BaseGameEntity receiver, Telegram msg)
 {
     if (!receiver.HandleMessage(msg))
     {
         Debug.Log("Message not handled");
     }
 }
Esempio n. 31
0
	public void registerEntity (BaseGameEntity baseGameEntity)
	{
		entityMap.Add (baseGameEntity.getId (), baseGameEntity);
		
	}
Esempio n. 32
0
 //  移除实体对象
 public void RemoveEntity(BaseGameEntity pEntity)
 {
     m_EntityMap.Remove(pEntity.ID);
 }
Esempio n. 33
0
 //  注册实体对象
 public void RegisterEntity(BaseGameEntity NewEntity)
 {
     m_EntityMap.Add(NewEntity.ID, NewEntity);
 }
 private void Discharge(BaseGameEntity pReceiver, Telegram telegram)
 {
     if (!pReceiver.HandleMessage (telegram)) {
         Debug.LogError ("bu neng jie xi de xiao xi ");
     }
 }
		public void Discharge (BaseGameEntity receiver, Message message)
		{	
			receiver.handleMessage (message);
		}
Esempio n. 36
0
	public void removeEntity (BaseGameEntity baseGameEntity)
	{
		entityMap.Remove (baseGameEntity);
	}
 /// <summary>
 /// 消息传递
 /// </summary>
 /// <param name="pReceiver"></param>
 /// <param name="telegram"></param>
 void Discharge(BaseGameEntity pReceiver, Telegram telegram)
 {
     if (!pReceiver.HandleMessage(telegram))
     {
         //telegram could not be handled
         //cout << "Message not handled";
     }
 }