Compare commits
	
		
			4 Commits
		
	
	
		
			bed8e9fbc8
			...
			3afade70b9
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 3afade70b9 | |||
| 57b13b551f | |||
| ab9a7e6003 | |||
| 7fe33f2017 | 
| @ -11,7 +11,9 @@ This is my graduation project. | |||||||
| 
 | 
 | ||||||
| **Automatic compilation preview address:** | **Automatic compilation preview address:** | ||||||
| 
 | 
 | ||||||
| Lab: https://living-together-lab.mrkbear.com | Simulator: [living-together.mrkbear.com](https://living-together.mrkbear.com) | ||||||
|  | 
 | ||||||
|  | Laboratory: [living-together-lab.mrkbear.com](https://living-together-lab.mrkbear.com) | ||||||
| 
 | 
 | ||||||
| ## 1. The meaning of the topic | ## 1. The meaning of the topic | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										39
									
								
								source/Component/CommandBar/CommandBar.scss
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								source/Component/CommandBar/CommandBar.scss
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,39 @@ | |||||||
|  | div.command-bar { | ||||||
|  |     height: 100%; | ||||||
|  |     user-select: none; | ||||||
|  |     display: flex; | ||||||
|  |     flex-direction: column; | ||||||
|  |     justify-content: space-between; | ||||||
|  |      | ||||||
|  |     button.ms-Button.command-button { | ||||||
|  |         width: 100%; | ||||||
|  |         text-align: center; | ||||||
|  |         display: flex; | ||||||
|  |         justify-content: center; | ||||||
|  |         color:  inherit; | ||||||
|  |          | ||||||
|  |         span.ms-Button-flexContainer i.ms-Icon { | ||||||
|  |             font-size: 25px; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     button.ms-Button.command-button.on-end { | ||||||
|  |         align-self: flex-end; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | button.ms-Button.command-button.active { | ||||||
|  |     color: aqua !important; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | div.command-bar.dark button.ms-Button.command-button.active, | ||||||
|  | div.command-bar.dark button.ms-Button.command-button:hover { | ||||||
|  |     background-color: rgba($color: #FFFFFF, $alpha: .2); | ||||||
|  |     color: rgba($color: #FFFFFF, $alpha: 1); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | div.command-bar.light button.ms-Button.command-button.active, | ||||||
|  | div.command-bar.light button.ms-Button.command-button:hover { | ||||||
|  |     background-color: rgba($color: #000000, $alpha: .08); | ||||||
|  |     color: rgba($color: #000000, $alpha: 1); | ||||||
|  | } | ||||||
							
								
								
									
										66
									
								
								source/Component/CommandBar/CommandBar.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								source/Component/CommandBar/CommandBar.tsx
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,66 @@ | |||||||
|  | import { BackgroundLevel, Theme } from "@Component/Theme/Theme"; | ||||||
|  | import { IconButton } from "@fluentui/react"; | ||||||
|  | import { Component, ReactNode } from "react"; | ||||||
|  | import "./CommandBar.scss"; | ||||||
|  | 
 | ||||||
|  | interface ICommandBarProps { | ||||||
|  |     width: number; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | class CommandBar extends Component<ICommandBarProps> { | ||||||
|  | 
 | ||||||
|  |     render(): ReactNode { | ||||||
|  |         return <Theme | ||||||
|  |             className="command-bar" | ||||||
|  |             backgroundLevel={BackgroundLevel.Level3} | ||||||
|  |             style={{ width: this.props.width }} | ||||||
|  |         > | ||||||
|  |             <div> | ||||||
|  |                 <IconButton  | ||||||
|  |                     style={{ height: this.props.width }} | ||||||
|  |                     iconProps={{iconName: "Save"}} | ||||||
|  |                     className="command-button" | ||||||
|  |                 /> | ||||||
|  |                 <IconButton  | ||||||
|  |                     style={{ height: this.props.width }} | ||||||
|  |                     iconProps={{iconName: "HandsFree"}} | ||||||
|  |                     className="command-button" | ||||||
|  |                 /> | ||||||
|  |                 <IconButton  | ||||||
|  |                     style={{ height: this.props.width }} | ||||||
|  |                     iconProps={{iconName: "TouchPointer"}} | ||||||
|  |                     className="command-button" | ||||||
|  |                 /> | ||||||
|  |                 <IconButton  | ||||||
|  |                     style={{ height: this.props.width }} | ||||||
|  |                     iconProps={{iconName: "Camera"}} | ||||||
|  |                     className="command-button" | ||||||
|  |                 /> | ||||||
|  |                 <IconButton  | ||||||
|  |                     style={{ height: this.props.width }} | ||||||
|  |                     iconProps={{iconName: "Play"}} | ||||||
|  |                     className="command-button" | ||||||
|  |                 /> | ||||||
|  |                 <IconButton  | ||||||
|  |                     style={{ height: this.props.width }} | ||||||
|  |                     iconProps={{iconName: "PlayResume"}} | ||||||
|  |                     className="command-button" | ||||||
|  |                 /> | ||||||
|  |                 <IconButton  | ||||||
|  |                     style={{ height: this.props.width }} | ||||||
|  |                     iconProps={{iconName: "PlayReverseResume"}} | ||||||
|  |                     className="command-button" | ||||||
|  |                 /> | ||||||
|  |             </div> | ||||||
|  |             <div> | ||||||
|  |                 <IconButton  | ||||||
|  |                     style={{ height: this.props.width }} | ||||||
|  |                     iconProps={{iconName: "Settings"}} | ||||||
|  |                     className="command-button on-end" | ||||||
|  |                 /> | ||||||
|  |             </div> | ||||||
|  |         </Theme> | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export { CommandBar }; | ||||||
| @ -1,5 +1,5 @@ | |||||||
| div.header-bar { | div.header-bar { | ||||||
|     padding: 0 20px; |     padding: 0 3px; | ||||||
|     box-sizing: border-box; |     box-sizing: border-box; | ||||||
|     display: flex; |     display: flex; | ||||||
|     align-items: center; |     align-items: center; | ||||||
| @ -7,13 +7,13 @@ div.header-bar { | |||||||
|     user-select: none; |     user-select: none; | ||||||
| 
 | 
 | ||||||
|     div.title > i, div.fps-view > i { |     div.title > i, div.fps-view > i { | ||||||
|         font-size: larger; |         font-size: 25px; | ||||||
|         vertical-align: text-bottom; |         vertical-align: middle; | ||||||
|         padding-right: 5px; |         padding-right: 8px; | ||||||
|     } |     } | ||||||
|      | 
 | ||||||
|     div.ms-TooltipHost { |     div.ms-TooltipHost { | ||||||
|         padding: 0 5px; |         padding: 0 8px; | ||||||
|         overflow: hidden; |         overflow: hidden; | ||||||
|         flex-shrink: 1; |         flex-shrink: 1; | ||||||
|          |          | ||||||
|  | |||||||
| @ -60,6 +60,7 @@ class HeaderBar extends Component< | |||||||
|             setting.on("language", this.changeListener); |             setting.on("language", this.changeListener); | ||||||
|         } |         } | ||||||
|         if (status) { |         if (status) { | ||||||
|  |             status.archive.on("save", this.changeListener); | ||||||
|             status.model.on("loop", this.physicsFpsCalc); |             status.model.on("loop", this.physicsFpsCalc); | ||||||
|             status.renderer.on("loop", this.renderFpsCalc); |             status.renderer.on("loop", this.renderFpsCalc); | ||||||
|         } |         } | ||||||
| @ -71,6 +72,7 @@ class HeaderBar extends Component< | |||||||
|             setting.off("language", this.changeListener); |             setting.off("language", this.changeListener); | ||||||
|         } |         } | ||||||
|         if (status) { |         if (status) { | ||||||
|  |             status.archive.off("save", this.changeListener); | ||||||
|             status.model.off("loop", this.physicsFpsCalc); |             status.model.off("loop", this.physicsFpsCalc); | ||||||
|             status.renderer.off("loop", this.renderFpsCalc); |             status.renderer.off("loop", this.renderFpsCalc); | ||||||
|         } |         } | ||||||
|  | |||||||
| @ -6,7 +6,7 @@ $lt-font-size-lvl2: $ms-font-size-18; | |||||||
| $lt-font-size-lvl1: $ms-font-size-24; | $lt-font-size-lvl1: $ms-font-size-24; | ||||||
| 
 | 
 | ||||||
| $lt-font-weight-normal: $ms-font-weight-regular; | $lt-font-weight-normal: $ms-font-weight-regular; | ||||||
| $lt-font-weight-lvl3: $ms-font-weight-semibold; | $lt-font-weight-lvl3: $ms-font-weight-regular; | ||||||
| $lt-font-weight-lvl2: $ms-font-weight-semibold; | $lt-font-weight-lvl2: $ms-font-weight-semibold; | ||||||
| $lt-font-weight-lvl1: $ms-font-weight-bold; | $lt-font-weight-lvl1: $ms-font-weight-bold; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -8,6 +8,6 @@ const EN_US = { | |||||||
|     "Header.Bar.File.Save.Status.Saved": "Saved", |     "Header.Bar.File.Save.Status.Saved": "Saved", | ||||||
|     "Header.Bar.File.Save.Status.Unsaved": "UnSaved", |     "Header.Bar.File.Save.Status.Unsaved": "UnSaved", | ||||||
|     "Header.Bar.Fps": "FPS: {renderFps} | {physicsFps}", |     "Header.Bar.Fps": "FPS: {renderFps} | {physicsFps}", | ||||||
|     "Header.Bar.Fps.Info": "The rendering frame rate ({renderFps} / fps) is on the left, and the simulation frame rate ({physicsFps} / fps) is on the right.", |     "Header.Bar.Fps.Info": "The rendering frame rate ({renderFps} fps) is on the left, and the simulation frame rate ({physicsFps} fps) is on the right.", | ||||||
| } | } | ||||||
| export default EN_US; | export default EN_US; | ||||||
| @ -8,6 +8,6 @@ const ZH_CN = { | |||||||
|     "Header.Bar.File.Save.Status.Saved": "已保存", |     "Header.Bar.File.Save.Status.Saved": "已保存", | ||||||
|     "Header.Bar.File.Save.Status.Unsaved": "未保存", |     "Header.Bar.File.Save.Status.Unsaved": "未保存", | ||||||
|     "Header.Bar.Fps": "帧率: {renderFps} | {physicsFps}", |     "Header.Bar.Fps": "帧率: {renderFps} | {physicsFps}", | ||||||
|     "Header.Bar.Fps.Info": "左侧为渲染帧率 ({renderFps} / fps), 右侧为模拟帧率 ({physicsFps} / fps)。", |     "Header.Bar.Fps.Info": "左侧为渲染帧率 ({renderFps} fps), 右侧为模拟帧率 ({physicsFps} fps)。", | ||||||
| } | } | ||||||
| export default ZH_CN; | export default ZH_CN; | ||||||
| @ -8,7 +8,7 @@ interface IArchiveEvent { | |||||||
| class Archive< | class Archive< | ||||||
|     M extends any = any, |     M extends any = any, | ||||||
|     E extends Record<EventType, any> = {} |     E extends Record<EventType, any> = {} | ||||||
| > extends Emitter<E> { | > extends Emitter<E & IArchiveEvent> { | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      * 是否为新文件 |      * 是否为新文件 | ||||||
|  | |||||||
| @ -1,6 +1,11 @@ | |||||||
| div.app-root { | div.app-root { | ||||||
|     width: 100%; |     width: 100%; | ||||||
|     height: 100%; |     height: 100%; | ||||||
|     position: absolute; |     position: fixed; | ||||||
|     overflow: hidden; |     overflow: hidden; | ||||||
|  | 
 | ||||||
|  |     div.app-root-space { | ||||||
|  |         height: 100%; | ||||||
|  |         display: flex; | ||||||
|  |     } | ||||||
| } | } | ||||||
| @ -1,15 +1,15 @@ | |||||||
| import { Component, ReactNode } from "react"; | import { Component, ReactNode } from "react"; | ||||||
| import { SettingProvider, Setting } from "@Context/Setting"; | import { SettingProvider, Setting } from "@Context/Setting"; | ||||||
| import { HeaderBar } from "@Component/HeaderBar/HeaderBar"; | import { HeaderBar } from "@Component/HeaderBar/HeaderBar"; | ||||||
| import { Theme, FontLevel, BackgroundLevel } from "@Component/Theme/Theme"; | import { Theme, BackgroundLevel, FontLevel } from "@Component/Theme/Theme"; | ||||||
| import { Localization } from "@Component/Localization/Localization"; |  | ||||||
| import { Entry } from "../Entry/Entry"; | import { Entry } from "../Entry/Entry"; | ||||||
| import { StatusProvider, Status } from "@Context/Status"; | import { StatusProvider, Status } from "@Context/Status"; | ||||||
| import { ClassicRenderer } from "@GLRender/ClassicRenderer"; | import { ClassicRenderer } from "@GLRender/ClassicRenderer"; | ||||||
| import { initializeIcons } from '@fluentui/font-icons-mdl2'; | import { initializeIcons } from '@fluentui/font-icons-mdl2'; | ||||||
| import "./SimulatorWeb.scss"; | import "./SimulatorWeb.scss"; | ||||||
|  | import { CommandBar } from "@Component/CommandBar/CommandBar"; | ||||||
| 
 | 
 | ||||||
| initializeIcons(); | initializeIcons("http://cdn.mrkbear.com/fabric-cdn-prod_20210407.001/"); | ||||||
| 
 | 
 | ||||||
| class SimulatorWeb extends Component { | class SimulatorWeb extends Component { | ||||||
|      |      | ||||||
| @ -65,8 +65,15 @@ class SimulatorWeb extends Component { | |||||||
|         return <Theme  |         return <Theme  | ||||||
|             className="app-root" |             className="app-root" | ||||||
|             backgroundLevel={BackgroundLevel.Level5} |             backgroundLevel={BackgroundLevel.Level5} | ||||||
|  |             fontLevel={FontLevel.Level3} | ||||||
|         > |         > | ||||||
|             <HeaderBar height={45}/> |             <HeaderBar height={45}/> | ||||||
|  |             <div className="app-root-space" style={{ | ||||||
|  |                 height: `calc( 100% - ${45}px)` | ||||||
|  |             }}> | ||||||
|  |                 <CommandBar width={45}/> | ||||||
|  |                 <div></div> | ||||||
|  |             </div> | ||||||
|         </Theme> |         </Theme> | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user