!1716 优化:灯光助手打勾可直接运用

pull/1717/head
林三 3 years ago committed by ChenX
parent 5ddc52d58a
commit 3d19112bcf

@ -2,13 +2,17 @@
import { Button, Menu, MenuItem, Popover } from "@blueprintjs/core";
import { observer } from "mobx-react";
import * as React from "react";
import { DownPanelStore, LightDataModeType } from "../UI/Store/DownPanelStore";
import { app } from "../ApplicationServices/Application";
import { Entity } from "../DatabaseServices/Entity/Entity";
import { Light } from "../DatabaseServices/Lights/Light";
import { DownPanelStore, LightDataModeType, LightsData } from "../UI/Store/DownPanelStore";
import { CommandWrap } from "./CommandMachine";
/**
* .
*/
@observer
export class LightsMenu extends React.Component<{}>
export class LightsMenu extends React.Component<{ GetLightType: (ent: Entity) => string; }>
{
public state = {
isOpenMenu: false,
@ -19,7 +23,7 @@ export class LightsMenu extends React.Component<{}>
<Popover
isOpen={this.state.isOpenMenu ? true : undefined}
modifiers={{ arrow: { enabled: false } }}
onClosed={this.close}
onClosed={this.Close}
>
<Button
style={{ fontSize: "11px", textAlign: "center", minHeight: "15px", height: "15px", lineHeight: "1px" }}
@ -49,23 +53,7 @@ export class LightsMenu extends React.Component<{}>
onClick={() =>
{
data.enable = !data.enable;
if (data.mode !== LightDataModeType.A && !data.enable) //有灯光取消打勾时, "全部"取消打勾
{
if (downStore.lightsData[0].enable)
downStore.lightsData[0].enable = false;
}
if (data.mode === LightDataModeType.A && data.enable) //选"全部"打勾时,所灯光ui打勾
{
for (let data of downStore.lightsData)
if (!data.enable && data.mode !== LightDataModeType.A)
data.enable = true;
}
else if (data.mode === LightDataModeType.A && !data.enable) // 选"全部"不打勾时,所灯光ui取消打勾
{
for (let data of downStore.lightsData)
if (data.enable && data.mode !== LightDataModeType.A)
data.enable = false;
}
this.onHook(data, downStore);
}}
/>
)
@ -73,9 +61,53 @@ export class LightsMenu extends React.Component<{}>
</Menu>
);
};
private close = () =>
private Close = () =>
{
let store = DownPanelStore.GetInstance() as DownPanelStore;
store.Upload();
};
private onHook(data: LightsData, downStore: DownPanelStore)
{
if (data.mode !== LightDataModeType.A && !data.enable) //有灯光取消打勾时, "全部"取消打勾
{
if (downStore.lightsData[0].enable)
downStore.lightsData[0].enable = false;
}
if (data.mode === LightDataModeType.A && data.enable) //选"全部"打勾时,所灯光ui打勾
{
for (let data of downStore.lightsData)
if (!data.enable && data.mode !== LightDataModeType.A)
data.enable = true;
operAllLightHelper(this.props.GetLightType);
}
else if (data.mode === LightDataModeType.A && !data.enable) // 选"全部"不打勾时,所灯光ui取消打勾
{
for (let data of downStore.lightsData)
if (data.enable && data.mode !== LightDataModeType.A)
data.enable = false;
operAllLightHelper(this.props.GetLightType);
}
else if (data.mode !== LightDataModeType.A)
{
operAllLightHelper(this.props.GetLightType);
}
function operAllLightHelper(GetLightType: (ent: Entity) => string)
{
let title = data.mode === LightDataModeType.A ? data.name + "灯光" : data.name;
CommandWrap(() =>
{
for (let light of app.Database.Lights.Entitys)
{
if (data.mode === LightDataModeType.A)
(light as Light).ShowHelper = data.enable;
else
if (GetLightType(light) === data.mode)
(light as Light).ShowHelper = data.enable;
}
}, data.enable ? "显示" + title + "助手" : "隐藏" + title + "助手");
}
}
}

@ -257,24 +257,7 @@ export class DownPanel extends React.Component<{ store?: DownPanelStore; }, {}>
}
if (key === "lightHelper")
{
userConfig.lightHelper = !userConfig.lightHelper;
const downStore = DownPanelStore.GetInstance() as DownPanelStore;
let Lights: string[] = [];
for (let light of downStore.lightsData)
{
if (light.enable && light.mode !== LightDataModeType.A)
Lights.push(light.mode);
}
if (Lights.length > 0)
CommandWrap(() =>
{
for (let light of app.Database.Lights.Entitys)
{
if (Lights.includes(this.GetLightType(light)))
(light as Light).ShowHelper = userConfig.lightHelper;
}
}, userConfig.lightHelper ? "显示灯光助手" : "隐藏灯光助手");
this.operHelper();
e.currentTarget.blur();
return;
}
@ -293,6 +276,28 @@ export class DownPanel extends React.Component<{ store?: DownPanelStore; }, {}>
e.currentTarget.blur();
this.props.store.Upload();
};
private operHelper()
{
userConfig.lightHelper = !userConfig.lightHelper;
const downStore = DownPanelStore.GetInstance() as DownPanelStore;
let Lights: string[] = [];
for (let light of downStore.lightsData)
{
if (light.enable && light.mode !== LightDataModeType.A)
Lights.push(light.mode);
}
if (Lights.length > 0)
CommandWrap(() =>
{
for (let light of app.Database.Lights.Entitys)
{
if (Lights.includes(this.GetLightType(light)))
(light as Light).ShowHelper = userConfig.lightHelper;
}
}, userConfig.lightHelper ? "显示灯光助手" : "隐藏灯光助手");
}
private GetLightType(ent: Entity)
{
if (ent instanceof SpotLight)
@ -458,7 +463,7 @@ export class DownPanel extends React.Component<{ store?: DownPanelStore; }, {}>
style={switchStyle}
alignIndicator={Alignment.RIGHT}
>
<LightsMenu />
<LightsMenu GetLightType={this.GetLightType} />
</Switch>
</div >

Loading…
Cancel
Save