Exemple #1
0
    void ApplyAction(string entityIdToApply, object value, ActionType actionType, bool isUndo)
    {
        switch (actionType)
        {
        case ActionType.MOVE:
            Vector3 convertedPosition = (Vector3)value;
            builderInWorldEntityHandler.GetEntity(entityIdToApply).rootEntity.gameObject.transform.position = convertedPosition;
            break;

        case ActionType.ROTATE:
            Vector3 convertedAngles = (Vector3)value;
            builderInWorldEntityHandler.GetEntity(entityIdToApply).rootEntity.gameObject.transform.eulerAngles = convertedAngles;
            break;

        case ActionType.SCALE:
            Vector3            convertedScale = (Vector3)value;
            DecentralandEntity entityToApply  = builderInWorldEntityHandler.GetEntity(entityIdToApply).rootEntity;
            Transform          parent         = entityToApply.gameObject.transform.parent;

            entityToApply.gameObject.transform.localScale = new Vector3(convertedScale.x / parent.localScale.x, convertedScale.y / parent.localScale.y, convertedScale.z / parent.localScale.z);
            break;

        case ActionType.CREATE:
            string entityString = (string)value;
            if (isUndo)
            {
                builderInWorldEntityHandler.DeleteEntity(entityString);
            }
            else
            {
                builderInWorldEntityHandler.CreateEntityFromJSON(entityString);
            }

            break;

        case ActionType.DELETE:
            string deletedEntityString = (string)value;

            if (isUndo)
            {
                builderInWorldEntityHandler.CreateEntityFromJSON(deletedEntityString);
            }
            else
            {
                builderInWorldEntityHandler.DeleteEntity(deletedEntityString);
            }

            break;

        case ActionType.CHANGE_FLOOR:
            string sceneObjectToApply = (string)value;

            SceneObject floorObject = JsonConvert.DeserializeObject <SceneObject>(sceneObjectToApply);
            builderInWorldEntityHandler.DeleteFloorEntities();
            builderInWorldController.CreateFloor(floorObject);
            break;
        }
    }
    private void MouseUp(int buttonID, Vector3 position)
    {
        if (!mousePressed || buttonID != 0)
        {
            return;
        }

        if (isCreatingMultipleVoxels)
        {
            lastVoxelCreated.transform.SetParent(null);
            bool canVoxelsBeCreated = true;

            foreach (VoxelPrefab voxel in createdVoxels.Values)
            {
                if (!voxel.IsAvailable())
                {
                    canVoxelsBeCreated = false;
                    break;
                }
            }

            BuildInWorldCompleteAction buildAction = new BuildInWorldCompleteAction();
            buildAction.actionType = BuildInWorldCompleteAction.ActionType.CREATE;

            List <BuilderInWorldEntityAction> entityActionList = new List <BuilderInWorldEntityAction>();

            foreach (Vector3Int voxelPosition in createdVoxels.Keys)
            {
                if (canVoxelsBeCreated)
                {
                    DecentralandEntity entity = builderInWorldEntityHandler.DuplicateEntity(lastVoxelCreated);
                    entity.gameObject.tag = BuilderInWorldSettings.VOXEL_TAG;
                    entity.gameObject.transform.position = voxelPosition;

                    BuilderInWorldEntityAction builderInWorldEntityAction = new BuilderInWorldEntityAction(entity, entity.entityId, BuilderInWorldUtils.ConvertEntityToJSON(entity));
                    entityActionList.Add(builderInWorldEntityAction);
                }
                Destroy(createdVoxels[voxelPosition].gameObject);
            }

            if (!canVoxelsBeCreated)
            {
                builderInWorldEntityHandler.DeleteEntity(lastVoxelCreated);
            }
            else
            {
                buildAction.CreateActionType(entityActionList, BuildInWorldCompleteAction.ActionType.CREATE);
                actionController.AddAction(buildAction);
            }

            createdVoxels.Clear();
            builderInWorldEntityHandler.DeselectEntities();

            lastVoxelCreated         = null;
            isCreatingMultipleVoxels = false;

            mousePressed = false;
            freeCameraMovement.SetCameraCanMove(true);
        }
    }
Exemple #3
0
    public void EntityCreationDelete()
    {
        DCLBuilderInWorldEntity createdEntity = entityHandler.CreateEmptyEntity(scene, Vector3.zero, Vector3.zero);

        Assert.IsNotNull(createdEntity);
        Assert.AreEqual(entityHandler.GetAllEntitiesFromCurrentScene().Count, 2);

        entityHandler.DeleteEntity(createdEntity.rootEntity.entityId);
        Assert.AreEqual(entityHandler.GetAllEntitiesFromCurrentScene().Count, 1);
    }