Ejemplo n.º 1
0
 // 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;
 }
Ejemplo n.º 2
0
    // 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);
                    }
                }
            }
        }
    }
Ejemplo n.º 3
0
    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;
            }
        }
    }
Ejemplo n.º 4
0
    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);
    }
Ejemplo n.º 5
0
    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);
    }
Ejemplo n.º 6
0
        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);
        }