feat: add puzzle and big fish draft generation progress
This commit is contained in:
@@ -434,10 +434,13 @@ pub async fn execute_big_fish_action(
|
||||
let now = current_utc_micros();
|
||||
let session = match payload.action.trim() {
|
||||
"big_fish_compile_draft" => {
|
||||
state
|
||||
.spacetime_client()
|
||||
.compile_big_fish_draft(session_id, owner_user_id, now)
|
||||
.await
|
||||
compile_big_fish_draft_with_all_assets(
|
||||
&state,
|
||||
session_id,
|
||||
owner_user_id,
|
||||
now,
|
||||
)
|
||||
.await
|
||||
}
|
||||
"big_fish_generate_level_main_image" => {
|
||||
let asset_url = generate_big_fish_formal_asset(
|
||||
@@ -766,6 +769,98 @@ fn map_big_fish_asset_coverage_response(
|
||||
}
|
||||
}
|
||||
|
||||
async fn compile_big_fish_draft_with_all_assets(
|
||||
state: &AppState,
|
||||
session_id: String,
|
||||
owner_user_id: String,
|
||||
now: i64,
|
||||
) -> Result<BigFishSessionRecord, SpacetimeClientError> {
|
||||
let session = state
|
||||
.spacetime_client()
|
||||
.compile_big_fish_draft(session_id.clone(), owner_user_id.clone(), now)
|
||||
.await?;
|
||||
let draft = session
|
||||
.draft
|
||||
.clone()
|
||||
.ok_or_else(|| SpacetimeClientError::Runtime("大鱼吃小鱼玩法草稿尚未生成".to_string()))?;
|
||||
// 点击生成草稿时一次性生成所有首版玩法资产,前端只负责展示进度和最终 session。
|
||||
for level in &draft.levels {
|
||||
let asset_url = generate_big_fish_formal_asset(
|
||||
state,
|
||||
&owner_user_id,
|
||||
&session_id,
|
||||
"level_main_image",
|
||||
Some(level.level),
|
||||
None,
|
||||
current_utc_micros(),
|
||||
)
|
||||
.await
|
||||
.map_err(|error| SpacetimeClientError::Runtime(error.message().to_string()))?;
|
||||
state
|
||||
.spacetime_client()
|
||||
.generate_big_fish_asset(BigFishAssetGenerateRecordInput {
|
||||
session_id: session_id.clone(),
|
||||
owner_user_id: owner_user_id.clone(),
|
||||
asset_kind: "level_main_image".to_string(),
|
||||
level: Some(level.level),
|
||||
motion_key: None,
|
||||
asset_url: Some(asset_url),
|
||||
generated_at_micros: current_utc_micros(),
|
||||
})
|
||||
.await?;
|
||||
}
|
||||
for level in &draft.levels {
|
||||
for motion_key in ["idle_float", "move_swim"] {
|
||||
let asset_url = generate_big_fish_formal_asset(
|
||||
state,
|
||||
&owner_user_id,
|
||||
&session_id,
|
||||
"level_motion",
|
||||
Some(level.level),
|
||||
Some(motion_key),
|
||||
current_utc_micros(),
|
||||
)
|
||||
.await
|
||||
.map_err(|error| SpacetimeClientError::Runtime(error.message().to_string()))?;
|
||||
state
|
||||
.spacetime_client()
|
||||
.generate_big_fish_asset(BigFishAssetGenerateRecordInput {
|
||||
session_id: session_id.clone(),
|
||||
owner_user_id: owner_user_id.clone(),
|
||||
asset_kind: "level_motion".to_string(),
|
||||
level: Some(level.level),
|
||||
motion_key: Some(motion_key.to_string()),
|
||||
asset_url: Some(asset_url),
|
||||
generated_at_micros: current_utc_micros(),
|
||||
})
|
||||
.await?;
|
||||
}
|
||||
}
|
||||
let asset_url = generate_big_fish_formal_asset(
|
||||
state,
|
||||
&owner_user_id,
|
||||
&session_id,
|
||||
"stage_background",
|
||||
None,
|
||||
None,
|
||||
current_utc_micros(),
|
||||
)
|
||||
.await
|
||||
.map_err(|error| SpacetimeClientError::Runtime(error.message().to_string()))?;
|
||||
state
|
||||
.spacetime_client()
|
||||
.generate_big_fish_asset(BigFishAssetGenerateRecordInput {
|
||||
session_id,
|
||||
owner_user_id,
|
||||
asset_kind: "stage_background".to_string(),
|
||||
level: None,
|
||||
motion_key: None,
|
||||
asset_url: Some(asset_url),
|
||||
generated_at_micros: current_utc_micros(),
|
||||
})
|
||||
.await
|
||||
}
|
||||
|
||||
fn map_big_fish_agent_message_response(
|
||||
message: BigFishAgentMessageRecord,
|
||||
) -> BigFishAgentMessageResponse {
|
||||
|
||||
Reference in New Issue
Block a user