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); } }
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); }