// Start is called before the first frame update void Start() { allEggs.Add(_entityId.Id, this); _id = _entityId.Id; _currentState = egg.Data.CurrentState; //stateMachine.CurrentState; _eggType = egg.Data.EggType; _currentFood = egg.Data.CurrentFood; }
// Update is called once per frame void Update() { UpdateCounts(); // 检测如果点击了UI,则直接返回,不进行点击场景的判定 if (UIManager.Instance.IsPointerOverGameObject(Input.mousePosition)) { return; } if (Input.GetMouseButtonUp(0)) { EggTypeEnum eggType = EggTypeEnum.NONE; switch (_commandType) { case CommandType.CMD_BRACHIO_EGG: eggType = EggTypeEnum.Brachiosaurus; break; case CommandType.CMD_TREX_EGG: eggType = EggTypeEnum.TRex; break; } if (eggType != EggTypeEnum.NONE) { var pos = Input.mousePosition; Ray ray = _camera.ScreenPointToRay(Input.mousePosition); Debug.Log("Mouse Position:" + pos + " ray:" + ray); RaycastHit hitInfo; bool ret = Physics.Raycast(ray, out hitInfo, 200); if (!ret) { UIManager.Instance.SystemTips("鼠标检测地面失败!", PanelSystemTips.MessageType.Error); } else { Debug.Log("Hit:" + hitInfo.point); if (ClientManager.Instance.Player) { ClientManager.Instance.Player.LayEgg(eggType, hitInfo.point, ClientManager.Instance.TokenId); } } } } }
private void OnDataChanged(EggData.Update update) { if (update.EggType.HasValue) { _eggType = update.EggType.Value; var renderer = gameObject.GetComponent <MeshRenderer>(); Color [] color = new Color[3] { Color.black, Color.white, Color.green }; renderer.material.color = color[(int)_eggType]; } if (update.CurrentFood.HasValue) { _currentFood = update.CurrentFood.Value; } if (update.CurrentState.HasValue) { _currentState = update.CurrentState.Value; switch (_currentState) { case EggStateEnum.GOOD: _partGood.SetActive(true); _partBroken.SetActive(false); break; case EggStateEnum.BROKEN: _partGood.SetActive(false); _partBroken.SetActive(true); break; case EggStateEnum.EMPTY: _partGood.SetActive(false); _partBroken.SetActive(true); break; case EggStateEnum.VANISH: _partGood.SetActive(false); _partBroken.SetActive(true); StartCoroutine(Vanishing()); break; } } }
public void LayEgg() { EggTypeEnum eggType = 0; if (Species == SimulationSettings.Dino_Brachio_PrefabName) { eggType = EggTypeEnum.Brachiosaurus; } else if (Species == SimulationSettings.Dino_TRex_PrefabName) { eggType = EggTypeEnum.TRex; } // 恐龙自己下蛋 var exampleEntity = EntityTemplateFactory.CreateEggTemplate(transform.position.ToCoordinates(), attrsWriter.Data.OwnerTokenId, eggType); var request1 = new WorldCommands.CreateEntity.Request(exampleEntity); worldCommandSender.SendCreateEntityCommand(request1, OnCreateEggResponse); //Debug.Log("DinoBehaviour LayEgg! Egg type : "+eggType); }
void OnLayEgg(PlayerAttrs.LayEgg.ReceivedRequest request) { Coordinates coords = request.Payload.EggPosition.ToUnityVector().ToCoordinates(); EggTypeEnum eggType = request.Payload.EggType; long tokenId = request.Payload.OwnerTokenId; // 得到下蛋的能量消耗 int costEnergy = 0; switch (eggType) { case EggTypeEnum.Brachiosaurus: costEnergy = CostEnergyEggBrachio; break; case EggTypeEnum.TRex: costEnergy = CostEnergyEggTRex; break; } if (attrs.Data.Energy < costEnergy) {// 能量不夠不能下蛋 string errMsg = "Energy is not enough. (" + attrs.Data.Energy + "/" + costEnergy + ")"; commandReceiver.SendLayEggFailure(request.RequestId, errMsg); return; } // 更新能量消耗 var update = new PlayerAttrs.Update { Energy = attrs.Data.Energy - costEnergy, }; attrs.SendUpdate(update); // 玩家操作下蛋:发送创建实体消息 var exampleEntity = EntityTemplateFactory.CreateEggTemplate(coords, tokenId, eggType); var request1 = new WorldCommands.CreateEntity.Request(exampleEntity); request1.Context = request.RequestId; worldCommandSender.SendCreateEntityCommand(request1, OnCreateEggResponse); }
public static EntityTemplate CreateEggTemplate(Coordinates initialPosition, long ownerId, EggTypeEnum eggType) { var serverAttribute = UnityGameLogicConnector.WorkerType; var template = new EntityTemplate(); template.AddComponent(new Position.Snapshot(initialPosition), serverAttribute); template.AddComponent(new Metadata.Snapshot(SimulationSettings.Egg_PrefabName), serverAttribute); template.AddComponent(new Persistence.Snapshot(), serverAttribute); var spawnRotation = (uint)Mathf.CeilToInt(Random.Range(0, 360)); //Debug.Log("Egg position : <" + initialPosition + "> rotation : <" + spawnRotation + ">"); template.AddComponent(new TransformComponent.Snapshot(spawnRotation), serverAttribute); template.AddComponent(new EggData.Snapshot(eggType, 0, EggStateEnum.GOOD, ownerId), serverAttribute); template.SetReadAccess(UnityClientConnector.WorkerType, UnityGameLogicConnector.WorkerType, MobileClientWorkerConnector.WorkerType); template.SetComponentWriteAccess(EntityAcl.ComponentId, serverAttribute); return(template); }