Add popup & detail optimization #24

Merged
MrKBear merged 12 commits from dev-mrkbear into master 2022-03-22 22:20:48 +08:00
4 changed files with 66 additions and 1 deletions
Showing only changes of commit 30a785eabb - Show all commits

View File

@ -51,6 +51,7 @@ const EN_US = {
"Common.Attr.Title.Basic": "Basic properties",
"Common.Attr.Title.Spatial": "Spatial property",
"Common.Attr.Title.Individual.Generation": "Individual generation",
"Common.Attr.Title.Individual.kill": "Individual kill",
"Common.Attr.Key.Display.Name": "Display name",
"Common.Attr.Key.Position.X": "Position X",
"Common.Attr.Key.Position.Y": "Position Y",
@ -79,6 +80,8 @@ const EN_US = {
"Common.Attr.Key.Generation.Error.Empty.Range.List": "The specified label does not contain any scope objects",
"Common.Attr.Key.Generation.Error.Invalid.Range": "The specified scope object is invalid",
"Common.Attr.Key.Generation.Error.Invalid.Label": "The specified label has expired",
"Common.Attr.Key.Kill.Random": "Random kill",
"Common.Attr.Key.Kill.Count": "Kill count",
"Panel.Info.Range.Details.Attr.Error.Not.Range": "Object is not a Range",
"Panel.Info.Range.Details.Attr.Error.Unspecified": "Unspecified range object",
"Panel.Info.Group.Details.Attr.Error.Not.Group": "Object is not a Group",

View File

@ -50,7 +50,8 @@ const ZH_CN = {
"Common.No.Unknown.Error": "未知错误",
"Common.Attr.Title.Basic": "基础属性",
"Common.Attr.Title.Spatial": "空间属性",
"Common.Attr.Title.Individual.Generation": "个体生成",
"Common.Attr.Title.Individual.Generation": "生成个体",
"Common.Attr.Title.Individual.kill": "消除个体",
"Common.Attr.Key.Display.Name": "显示名称",
"Common.Attr.Key.Position.X": "X 坐标",
"Common.Attr.Key.Position.Y": "Y 坐标",
@ -79,6 +80,8 @@ const ZH_CN = {
"Common.Attr.Key.Generation.Error.Empty.Range.List": "指定的标签中没有包含任何范围对象",
"Common.Attr.Key.Generation.Error.Invalid.Range": "指定的范围对象已失效",
"Common.Attr.Key.Generation.Error.Invalid.Label": "指定的标签已失效",
"Common.Attr.Key.Kill.Random": "随机消除",
"Common.Attr.Key.Kill.Count": "消除数量",
"Panel.Info.Range.Details.Attr.Error.Not.Range": "对象不是一个范围",
"Panel.Info.Range.Details.Attr.Error.Unspecified": "未指定范围对象",
"Panel.Info.Group.Details.Attr.Error.Not.Group": "对象不是一个群",

View File

@ -49,6 +49,11 @@ class Group extends CtrlObject {
*/
public genErrorMessageShowCount: number = 0;
/**
*
*/
public killCount: number = 1;
private genInSingleRange(count: number, range: Range) {
for (let i = 0; i < count; i++) {
let individual = new Individual(this);
@ -188,6 +193,42 @@ class Group extends CtrlObject {
return success;
}
/**
*
*/
public killIndividuals(): boolean {
let success = false;
let killCount = this.killCount;
if (killCount > this.individuals.size) {
killCount = this.individuals.size;
}
// 生成索引数组
const allIndex = new Array(this.individuals.size).fill(0).map((_, i) => i);
const deleteIndex: Set<number> = new Set();
for (let i = 0; i < killCount; i++) {
let randomIndex = Math.floor(Math.random() * allIndex.length);
deleteIndex.add(allIndex[randomIndex]);
allIndex.splice(randomIndex, 1);
}
let j = 0;
this.individuals.forEach((individual) => {
if (deleteIndex.has(j)) {
this.remove(individual);
success = true;
}
j++;
});
if (success) {
this.model.emit("individualChange", this);
}
return success
}
/**
*
* @param count

View File

@ -136,6 +136,24 @@ class GroupDetails extends Component<IGroupDetailsProps & IMixinStatusProps> {
}}
/>
<Message i18nKey="Common.Attr.Title.Individual.kill" isTitle/>
<AttrInput
id={group.id} isNumber={true} step={1} keyI18n="Common.Attr.Key.Kill.Count"
value={group.killCount} min={1} max={1000}
valueChange={(val) => {
this.props.status?.changeGroupAttrib(group.id, "killCount", (val as any) / 1);
}}
/>
<TogglesInput
keyI18n="Common.Attr.Key.Generation"
onIconName="RemoveFilter" offIconName="RemoveFilter"
valueChange={() => {
group.killIndividuals()
}}
/>
</>
}