Files
ogame-vue-ts/docs/assets/FleetView-DY7yR25i.js
谦君 705ee8c3db feat: 初始化项目结构与核心功能
引入项目基础目录结构,包含多语言支持、主要页面与组件、核心游戏逻辑、UI 组件库、加密与本地持久化、自动化 Docker 构建流程、GitHub issue 模板(中英文)、README(中英文)、LICENSE 及开发配置文件。实现 OGame 单机版主要功能模块,为后续开发和扩展奠定基础。
2025-12-11 14:49:25 +08:00

1 line
15 KiB
JavaScript

import{t as e}from"./eye-BrZrKlSB.js";import{t}from"./UnlockRequirement-DeOUxO_t.js";import{t as n}from"./CardDescription-Cb9v68Xa.js";import{An as r,Cn as i,Dt as a,En as o,F as s,Fn as c,Ft as l,G as u,Gn as d,H as f,It as p,K as m,Mn as h,Nn as g,On as _,Ot as ee,Pn as v,Pt as y,Qn as b,T as te,Tt as ne,Un as re,V as x,Yn as ie,_ as ae,at as S,bn as oe,dt as C,er as w,ft as T,g as se,h as E,i as D,ir as ce,jn as O,kn as k,lt as A,m as j,qn as M,r as le,rr as N,rt as ue,sr as P,st as F,ut as I,wn as de,wt as fe,xn as pe,zt as L}from"./index-BpOElaf9.js";import{t as me}from"./useGameConfig-DqswvIth.js";import{t as he}from"./AlertDialog-BbpHh-RO.js";import{a as ge,n as _e}from"./shipValidation-BZIVAW1v.js";var ve={key:0,class:`container mx-auto p-4 sm:p-6 space-y-4 sm:space-y-6`},ye={class:`text-2xl sm:text-3xl font-bold`},be={class:`flex gap-2 border-b`},xe={key:0},Se={class:`grid grid-cols-2 sm:grid-cols-3 gap-3 sm:gap-4`},Ce={class:`flex justify-between items-start`},we={class:`font-semibold text-sm sm:text-base`},Te={class:`text-xl sm:text-2xl font-bold`},Ee={class:`text-xs sm:text-sm text-muted-foreground space-y-1`},De={key:1,class:`space-y-4`},Oe={class:`flex justify-between items-center`},ke={class:`text-sm font-medium`},Ae={class:`text-sm font-bold`},je={class:`grid grid-cols-1 sm:grid-cols-2 gap-3 sm:gap-4`},Me={class:`flex gap-2`},Ne={class:`grid grid-cols-3 gap-2 sm:gap-4`},Pe={class:`space-y-2`},Fe={class:`space-y-2`},Ie={class:`space-y-2`},Le={class:`grid grid-cols-2 sm:grid-cols-3 gap-2`},Re={class:`grid grid-cols-1 sm:grid-cols-3 gap-3 sm:gap-4`},ze={class:`space-y-2`},Be={class:`space-y-2`},Ve={class:`space-y-2`},He={class:`text-xs sm:text-sm text-muted-foreground mt-2`},Ue={class:`flex justify-between text-xs sm:text-sm`},We={class:`text-muted-foreground`},Ge={class:`flex items-center gap-1.5`},Ke={class:`text-muted-foreground`},qe={key:0,class:`flex justify-between text-xs sm:text-sm`},Je={class:`text-muted-foreground`},Ye={key:2,class:`space-y-4`},Xe={class:`flex justify-between items-start`},Ze={class:`text-xs sm:text-sm font-medium mb-2`},Qe={class:`flex flex-wrap gap-2`},$e={key:0},et={class:`text-xs sm:text-sm font-medium mb-2`},tt={class:`flex flex-wrap gap-2 text-xs`},nt={key:0,class:`flex items-center gap-1`},rt={key:1,class:`flex items-center gap-1`},it={key:2,class:`flex items-center gap-1`},at={key:3,class:`flex items-center gap-1`},ot={class:`space-y-2`},st={class:`flex justify-between text-xs sm:text-sm`},ct={class:`flex gap-2`},R=c({__name:`FleetView`,setup(c){let R=i(),lt=de(),z=pe(),{t:B}=oe(),{SHIPS:V}=me(),H=_(()=>z.currentPlanet),U=w(null),ut=_(()=>te(s(z.player.officers,Date.now()).additionalFleetSlots)),W=w(`fleet`),G=w({[F.LightFighter]:0,[F.HeavyFighter]:0,[F.Cruiser]:0,[F.Battleship]:0,[F.SmallCargo]:0,[F.LargeCargo]:0,[F.ColonyShip]:0,[F.Recycler]:0,[F.EspionageProbe]:0}),K=w({galaxy:1,system:1,position:1}),q=w(S.Attack),J=w({metal:0,crystal:0,deuterium:0,darkMatter:0,energy:0});re(()=>{let{galaxy:e,system:t,position:n,mission:r}=R.query;(e||t||n)&&(e&&(K.value.galaxy=Number(e)),t&&(K.value.system=Number(t)),n&&(K.value.position=Number(n)),r===`spy`?q.value=S.Spy:r===`attack`?q.value=S.Attack:r===`colonize`&&(q.value=S.Colonize),W.value=`send`,lt.replace({path:`/fleet`}))});let Y=_(()=>[{type:S.Attack,name:B(`fleetView.attackMission`),icon:ne},{type:S.Transport,name:B(`fleetView.transport`),icon:ee},{type:S.Colonize,name:B(`fleetView.colonize`),icon:a},{type:S.Spy,name:B(`fleetView.spy`),icon:e},{type:S.Deploy,name:B(`fleetView.deploy`),icon:fe}]),dt=e=>Y.value.find(t=>t.type===e)?.name||e,ft=e=>z.player.planets.find(t=>t.id===e)?.name||B(`fleetView.unknownPlanet`),X=()=>{let e=0;for(let[t,n]of Object.entries(G.value))if(n>0){let r=V.value[t];e+=r.cargoCapacity*n}return e},Z=()=>J.value.metal+J.value.crystal+J.value.deuterium+J.value.darkMatter,Q=()=>{let e=s(z.player.officers,Date.now());return le(G.value,e.fuelConsumptionReduction,J.value)},pt=()=>{if(!H.value)return 0;let e=j(H.value.position,K.value),t=s(z.player.officers,Date.now());return E(e,D(G.value,t.fleetSpeedBonus))},mt=()=>!(!Object.values(G.value).some(e=>e>0)||q.value===S.Transport&&Z()>X()||q.value===S.Colonize&&(!G.value[F.ColonyShip]||(G.value[F.ColonyShip]??0)<1)),ht=(e,t,n,r={metal:0,crystal:0,deuterium:0,darkMatter:0,energy:0})=>{if(!z.currentPlanet)return!1;let i=z.player.fleetMissions.length,a=ge(z.currentPlanet,n,r,z.player.officers,i);if(!a.valid)return!1;let o=t===S.Transport;_e(z.currentPlanet,n,a.fuelNeeded,o,r);let c=E(j(z.currentPlanet.position,e),D(n,s(z.player.officers,Date.now()).fleetSpeedBonus)),l=se(z.player.id,z.currentPlanet.id,e,t,n,r,c);return z.player.fleetMissions.push(l),!0},gt=()=>{if(!H.value)return;let e={};for(let[t,n]of Object.entries(G.value))n>0&&(e[t]=n);ht(K.value,q.value,e,q.value===S.Transport?J.value:void 0)?(Object.keys(G.value).forEach(e=>{G.value[e]=0}),J.value={metal:0,crystal:0,deuterium:0,darkMatter:0,energy:0},W.value=`missions`):U.value?.show({title:B(`fleetView.sendFailed`),message:B(`fleetView.sendFailedMessage`)})},_t=e=>{let t=z.player.fleetMissions.find(t=>t.id===e);return t?ae(t,Date.now()):!1},vt=e=>{_t(e)||U.value?.show({title:B(`fleetView.recallFailed`),message:B(`fleetView.recallFailedMessage`)})},$=e=>{let t=Date.now(),n=e.status===`outbound`?e.arrivalTime:e.returnTime;return Math.max(0,(n-t)/1e3)},yt=e=>{let t=Date.now();if(e.status===`outbound`){let n=e.arrivalTime-e.departureTime,r=t-e.departureTime;return Math.min(100,r/n*100)}else{let n=e.arrivalTime,r=e.returnTime-n,i=t-n;return Math.min(100,i/r*100)}};return(e,i)=>H.value?(d(),h(`div`,ve,[v(t,{"required-building":N(ue).Shipyard,"required-level":1},null,8,[`required-building`]),k(`h1`,ye,P(N(B)(`fleetView.title`)),1),k(`div`,be,[v(N(L),{onClick:i[0]||=e=>W.value=`fleet`,variant:W.value===`fleet`?`default`:`ghost`,class:`rounded-b-none`},{default:b(()=>[g(P(N(B)(`fleetView.fleetOverview`)),1)]),_:1},8,[`variant`]),v(N(L),{onClick:i[1]||=e=>W.value=`send`,variant:W.value===`send`?`default`:`ghost`,class:`rounded-b-none`},{default:b(()=>[g(P(N(B)(`fleetView.sendFleet`)),1)]),_:1},8,[`variant`]),v(N(L),{onClick:i[2]||=e=>W.value=`missions`,variant:W.value===`missions`?`default`:`ghost`,class:`rounded-b-none`},{default:b(()=>[g(P(N(B)(`fleetView.flightMissions`))+` `,1),N(z).player.fleetMissions.length>0?(d(),r(N(p),{key:0,variant:`secondary`,class:`ml-1`},{default:b(()=>[g(P(N(z).player.fleetMissions.length),1)]),_:1})):O(``,!0)]),_:1},8,[`variant`])]),W.value===`fleet`?(d(),h(`div`,xe,[v(N(T),null,{default:b(()=>[v(N(I),null,{default:b(()=>[v(N(A),null,{default:b(()=>[g(P(N(B)(`fleetView.currentPlanetFleet`)),1)]),_:1}),v(N(n),null,{default:b(()=>[g(P(H.value.name)+` [`+P(H.value.position.galaxy)+`:`+P(H.value.position.system)+`:`+P(H.value.position.position)+`] `,1)]),_:1})]),_:1}),v(N(C),null,{default:b(()=>[k(`div`,Se,[(d(!0),h(o,null,M(H.value.fleet,(e,t)=>(d(),h(`div`,{key:t,class:`p-3 sm:p-4 border rounded-lg space-y-2`},[k(`div`,Ce,[k(`div`,null,[k(`h3`,we,P(N(V)[t].name),1),k(`p`,Te,P(N(x)(e)),1)])]),k(`div`,Ee,[k(`p`,null,P(N(B)(`fleetView.attack`))+`: `+P(N(V)[t].attack),1),k(`p`,null,P(N(B)(`fleetView.shield`))+`: `+P(N(V)[t].shield),1),k(`p`,null,P(N(B)(`fleetView.armor`))+`: `+P(N(V)[t].armor),1),k(`p`,null,P(N(B)(`fleetView.speed`))+`: `+P(N(x)(N(V)[t].speed)),1),k(`p`,null,P(N(B)(`fleetView.cargo`))+`: `+P(N(x)(N(V)[t].cargoCapacity)),1)])]))),128))])]),_:1})]),_:1})])):O(``,!0),W.value===`send`?(d(),h(`div`,De,[v(N(T),null,{default:b(()=>[v(N(C),{class:`py-4`},{default:b(()=>[k(`div`,Oe,[k(`span`,ke,P(N(B)(`fleetView.fleetMissionSlots`))+`:`,1),k(`span`,Ae,P(N(z).player.fleetMissions.length)+` / `+P(ut.value),1)])]),_:1})]),_:1}),v(N(T),null,{default:b(()=>[v(N(I),null,{default:b(()=>[v(N(A),null,{default:b(()=>[g(P(N(B)(`fleetView.selectFleet`)),1)]),_:1}),v(N(n),null,{default:b(()=>[g(P(N(B)(`fleetView.selectFleetDescription`)),1)]),_:1})]),_:1}),v(N(C),null,{default:b(()=>[k(`div`,je,[(d(!0),h(o,null,M(H.value.fleet,(e,t)=>(d(),h(`div`,{key:t,class:`space-y-2`},[v(N(u),{for:`ship-${t}`,class:`text-xs sm:text-sm`},{default:b(()=>[g(P(N(V)[t].name)+` (`+P(N(B)(`fleetView.available`))+`: `+P(e)+`) `,1)]),_:2},1032,[`for`]),k(`div`,Me,[v(N(m),{id:`ship-${t}`,modelValue:G.value[t],"onUpdate:modelValue":e=>G.value[t]=e,modelModifiers:{number:!0},type:`number`,min:`0`,max:e,placeholder:`0`,class:`text-sm`},null,8,[`id`,`modelValue`,`onUpdate:modelValue`,`max`]),v(N(L),{onClick:n=>G.value[t]=e,variant:`outline`,size:`sm`},{default:b(()=>[g(P(N(B)(`fleetView.all`)),1)]),_:1},8,[`onClick`])])]))),128))])]),_:1})]),_:1}),v(N(T),null,{default:b(()=>[v(N(I),null,{default:b(()=>[v(N(A),null,{default:b(()=>[g(P(N(B)(`fleetView.targetCoordinates`)),1)]),_:1})]),_:1}),v(N(C),null,{default:b(()=>[k(`div`,Ne,[k(`div`,Pe,[v(N(u),{for:`galaxy`,class:`text-xs sm:text-sm`},{default:b(()=>[g(P(N(B)(`fleetView.galaxy`)),1)]),_:1}),v(N(m),{id:`galaxy`,modelValue:K.value.galaxy,"onUpdate:modelValue":i[3]||=e=>K.value.galaxy=e,modelModifiers:{number:!0},type:`number`,min:`1`,max:`9`,placeholder:`1`},null,8,[`modelValue`])]),k(`div`,Fe,[v(N(u),{for:`system`,class:`text-xs sm:text-sm`},{default:b(()=>[g(P(N(B)(`fleetView.system`)),1)]),_:1}),v(N(m),{id:`system`,modelValue:K.value.system,"onUpdate:modelValue":i[4]||=e=>K.value.system=e,modelModifiers:{number:!0},type:`number`,min:`1`,max:`10`,placeholder:`1`},null,8,[`modelValue`])]),k(`div`,Ie,[v(N(u),{for:`position`,class:`text-xs sm:text-sm`},{default:b(()=>[g(P(N(B)(`fleetView.position`)),1)]),_:1}),v(N(m),{id:`position`,modelValue:K.value.position,"onUpdate:modelValue":i[5]||=e=>K.value.position=e,modelModifiers:{number:!0},type:`number`,min:`1`,max:`10`,placeholder:`1`},null,8,[`modelValue`])])])]),_:1})]),_:1}),v(N(T),null,{default:b(()=>[v(N(I),null,{default:b(()=>[v(N(A),null,{default:b(()=>[g(P(N(B)(`fleetView.missionType`)),1)]),_:1})]),_:1}),v(N(C),null,{default:b(()=>[k(`div`,Le,[(d(!0),h(o,null,M(Y.value,e=>(d(),r(N(L),{key:e.type,onClick:t=>q.value=e.type,variant:q.value===e.type?`default`:`outline`,class:`justify-start`},{default:b(()=>[(d(),r(ie(e.icon),{class:`h-4 w-4 mr-2`})),g(` `+P(e.name),1)]),_:2},1032,[`onClick`,`variant`]))),128))])]),_:1})]),_:1}),q.value===N(S).Transport?(d(),r(N(T),{key:0},{default:b(()=>[v(N(I),null,{default:b(()=>[v(N(A),null,{default:b(()=>[g(P(N(B)(`fleetView.transportResources`)),1)]),_:1})]),_:1}),v(N(C),null,{default:b(()=>[k(`div`,Re,[k(`div`,ze,[v(N(u),{for:`cargo-metal`,class:`text-xs sm:text-sm flex items-center gap-2`},{default:b(()=>[v(y,{type:`metal`,size:`sm`}),g(` `+P(N(B)(`resources.metal`))+` (`+P(N(B)(`fleetView.available`))+`: `+P(N(x)(H.value.resources.metal))+`) `,1)]),_:1}),v(N(m),{id:`cargo-metal`,modelValue:J.value.metal,"onUpdate:modelValue":i[6]||=e=>J.value.metal=e,modelModifiers:{number:!0},type:`number`,min:`0`,max:H.value.resources.metal,placeholder:`0`},null,8,[`modelValue`,`max`])]),k(`div`,Be,[v(N(u),{for:`cargo-crystal`,class:`text-xs sm:text-sm flex items-center gap-2`},{default:b(()=>[v(y,{type:`crystal`,size:`sm`}),g(` `+P(N(B)(`resources.crystal`))+` (`+P(N(B)(`fleetView.available`))+`: `+P(N(x)(H.value.resources.crystal))+`) `,1)]),_:1}),v(N(m),{id:`cargo-crystal`,modelValue:J.value.crystal,"onUpdate:modelValue":i[7]||=e=>J.value.crystal=e,modelModifiers:{number:!0},type:`number`,min:`0`,max:H.value.resources.crystal,placeholder:`0`},null,8,[`modelValue`,`max`])]),k(`div`,Ve,[v(N(u),{for:`cargo-deuterium`,class:`text-xs sm:text-sm flex items-center gap-2`},{default:b(()=>[v(y,{type:`deuterium`,size:`sm`}),g(` `+P(N(B)(`resources.deuterium`))+` (`+P(N(B)(`fleetView.available`))+`: `+P(N(x)(H.value.resources.deuterium))+`) `,1)]),_:1}),v(N(m),{id:`cargo-deuterium`,modelValue:J.value.deuterium,"onUpdate:modelValue":i[8]||=e=>J.value.deuterium=e,modelModifiers:{number:!0},type:`number`,min:`0`,max:H.value.resources.deuterium,placeholder:`0`},null,8,[`modelValue`,`max`])])]),k(`p`,He,P(N(B)(`fleetView.totalCargoCapacity`))+`: `+P(N(x)(X()))+` | `+P(N(B)(`fleetView.used`))+`: `+P(N(x)(Z())),1)]),_:1})]),_:1})):O(``,!0),v(N(T),null,{default:b(()=>[v(N(I),null,{default:b(()=>[v(N(A),null,{default:b(()=>[g(P(N(B)(`fleetView.missionInfo`)),1)]),_:1})]),_:1}),v(N(C),{class:`space-y-2`},{default:b(()=>[k(`div`,Ue,[k(`span`,We,P(N(B)(`fleetView.fuelConsumption`))+`:`,1),k(`span`,Ge,[v(y,{type:`deuterium`,size:`sm`}),k(`span`,{class:ce(Q()>H.value.resources.deuterium?`text-red-600 dark:text-red-400 font-medium`:``)},P(N(x)(Q())),3),k(`span`,Ke,`/ `+P(N(x)(H.value.resources.deuterium)),1)])]),Object.values(G.value).some(e=>e>0)?(d(),h(`div`,qe,[k(`span`,Je,P(N(B)(`fleetView.flightTime`))+`:`,1),k(`span`,null,P(N(f)(pt())),1)])):O(``,!0)]),_:1})]),_:1}),v(N(L),{onClick:gt,disabled:!mt(),class:`w-full`,size:`lg`},{default:b(()=>[g(P(N(B)(`fleetView.sendFleet`)),1)]),_:1},8,[`disabled`])])):O(``,!0),W.value===`missions`?(d(),h(`div`,Ye,[N(z).player.fleetMissions.length===0?(d(),r(N(T),{key:0},{default:b(()=>[v(N(C),{class:`py-8 text-center text-muted-foreground`},{default:b(()=>[g(P(N(B)(`fleetView.noFlightMissions`)),1)]),_:1})]),_:1})):O(``,!0),(d(!0),h(o,null,M(N(z).player.fleetMissions,e=>(d(),r(N(T),{key:e.id},{default:b(()=>[v(N(I),null,{default:b(()=>[k(`div`,Xe,[k(`div`,null,[v(N(A),{class:`text-base sm:text-lg`},{default:b(()=>[g(P(dt(e.missionType)),1)]),_:2},1024),v(N(n),{class:`text-xs sm:text-sm`},{default:b(()=>[g(P(ft(e.originPlanetId))+` → [`+P(e.targetPosition.galaxy)+`:`+P(e.targetPosition.system)+`:`+P(e.targetPosition.position)+`] `,1)]),_:2},1024)]),v(N(p),{variant:e.status===`outbound`?`default`:`secondary`},{default:b(()=>[g(P(e.status===`outbound`?N(B)(`fleetView.outbound`):N(B)(`fleetView.returning`)),1)]),_:2},1032,[`variant`])])]),_:2},1024),v(N(C),{class:`space-y-3`},{default:b(()=>[k(`div`,null,[k(`p`,Ze,P(N(B)(`fleetView.fleetComposition`))+`:`,1),k(`div`,Qe,[(d(!0),h(o,null,M(e.fleet,(e,t)=>(d(),r(N(p),{key:t,variant:`outline`},{default:b(()=>[g(P(N(V)[t].name)+`: `+P(e),1)]),_:2},1024))),128))])]),e.cargo.metal>0||e.cargo.crystal>0||e.cargo.deuterium>0||e.cargo.darkMatter>0?(d(),h(`div`,$e,[k(`p`,et,P(N(B)(`fleetView.carryingResources`))+`:`,1),k(`div`,tt,[e.cargo.metal>0?(d(),h(`span`,nt,[v(y,{type:`metal`,size:`sm`}),g(` `+P(N(x)(e.cargo.metal)),1)])):O(``,!0),e.cargo.crystal>0?(d(),h(`span`,rt,[v(y,{type:`crystal`,size:`sm`}),g(` `+P(N(x)(e.cargo.crystal)),1)])):O(``,!0),e.cargo.deuterium>0?(d(),h(`span`,it,[v(y,{type:`deuterium`,size:`sm`}),g(` `+P(N(x)(e.cargo.deuterium)),1)])):O(``,!0),e.cargo.darkMatter>0?(d(),h(`span`,at,[v(y,{type:`darkMatter`,size:`sm`}),g(` `+P(N(x)(e.cargo.darkMatter)),1)])):O(``,!0)])])):O(``,!0),k(`div`,ot,[k(`div`,st,[k(`span`,null,P(e.status===`outbound`?N(B)(`fleetView.arrivalTime`):N(B)(`fleetView.returnTime`))+`:`,1),k(`span`,null,P(N(f)($(e))),1)]),v(N(l),{"model-value":yt(e)},null,8,[`model-value`])]),k(`div`,ct,[e.status===`outbound`?(d(),r(N(L),{key:0,onClick:t=>vt(e.id),variant:`outline`,size:`sm`,class:`w-full`},{default:b(()=>[g(P(N(B)(`fleetView.recallFleet`)),1)]),_:1},8,[`onClick`])):O(``,!0)])]),_:2},1024)]),_:2},1024))),128))])):O(``,!0),v(he,{ref_key:`alertDialog`,ref:U},null,512)])):O(``,!0)}});export{R as default};