public void Discharge(BaseGameEntity _Receiver, Telegram _Telegram) { if (!_Receiver.HandleMessage(_Telegram)) { _Receiver.AnnounceTask("Couldn't handle message!"); } }
//点对点发送消息 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);//把信息加入到链表中 } }
public Telegram(BaseGameEntity sender, BaseGameEntity reciever, int msg, DateTime dispatchTime) { this.sender = sender; this.reciever = reciever; this.msg = msg; this.dispatchTime = dispatchTime; }
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); }
public void ReturnEntity(int entityID) { BaseGameEntity entity = FindEntityWithID(entityID); entity.gameObject.SetActive(false); entity.transform.position = INIT_POSITION; }
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); } }
public override void Use(BaseGameEntity target, BaseGameEntity dst = null) { if (SkillID != 0) { SKillMananger.Instance.TryUseSkill(SkillID, target, null); } }
public override void Use(BaseGameEntity target, BaseGameEntity dst = null) { if (!System.Object.ReferenceEquals(target, null)) { target.Xue -= Num; } }
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()); } }
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); } }
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); }
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()); } }
//点对面发送消息 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); }
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); }
//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"); } }
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); } }
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); }
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); }
private void Discharge(BaseGameEntity receiver, Telegram msg) { if (!receiver.HandleMessage(msg)) { Debug.Log("Message not handled"); } }
public void registerEntity (BaseGameEntity baseGameEntity) { entityMap.Add (baseGameEntity.getId (), baseGameEntity); }
// 移除实体对象 public void RemoveEntity(BaseGameEntity pEntity) { m_EntityMap.Remove(pEntity.ID); }
// 注册实体对象 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); }
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"; } }