-
Notifications
You must be signed in to change notification settings - Fork 37
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
9 changed files
with
465 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
package design.designers; | ||
|
||
import com.badlogic.gdx.Gdx; | ||
import com.badlogic.gdx.files.FileHandle; | ||
import com.badlogic.gdx.scenes.scene2d.Stage; | ||
import shared.model.Spell; | ||
import shared.util.AOJson; | ||
import shared.util.SharedResources; | ||
import shared.util.SpellJson; | ||
|
||
import java.util.*; | ||
|
||
import static design.designers.SpellDesigner.SpellParameter; | ||
|
||
public class SpellDesigner implements IDesigner<Spell, SpellParameter> { | ||
|
||
private HashMap<Integer, Spell> spells = new HashMap<>(); | ||
; | ||
|
||
public SpellDesigner() { | ||
load(new SpellParameter()); | ||
} | ||
|
||
@Override | ||
public void load(SpellParameter params) { | ||
SpellJson.load(spells, Gdx.files.internal(SharedResources.SPELLS_JSON_FILE)); | ||
spells.forEach((k, v) -> v.setId(k)); | ||
} | ||
|
||
@Override | ||
public void reload() { | ||
|
||
} | ||
|
||
@Override | ||
public void save() { | ||
ArrayList<Spell> spells = new ArrayList<>(this.spells.values()); | ||
FileHandle output = Gdx.files.local("output/" + SharedResources.SPELLS_FOLDER); | ||
new AOJson().toJson(spells, ArrayList.class, Spell.class, output); | ||
} | ||
|
||
@Override | ||
public Map<Integer, Spell> get() { | ||
return spells; | ||
} | ||
|
||
@Override | ||
public Optional<Spell> get(int id) { | ||
return Optional.ofNullable(spells.get(id)); | ||
} | ||
|
||
@Override | ||
public Optional<Spell> create() { | ||
return Optional.of(new Spell(getFreeId())); | ||
} | ||
|
||
private int getFreeId() { | ||
return spells.keySet().stream().max(Integer::compareTo).get() + 1; | ||
} | ||
|
||
@Override | ||
public void modify(Spell element, Stage stage) { | ||
|
||
} | ||
|
||
@Override | ||
public void delete(Spell element) { | ||
spells.remove(element.getId()); | ||
} | ||
|
||
@Override | ||
public void add(Spell spell) { | ||
spells.put(spell.getId(), spell); | ||
} | ||
|
||
@Override | ||
public boolean contains(int id) { | ||
return spells.containsKey(id); | ||
} | ||
|
||
@Override | ||
public void markUsedImages() { | ||
} | ||
|
||
static class SpellParameter implements Parameters<Spell> { | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,133 @@ | ||
package design.editors; | ||
|
||
import com.badlogic.gdx.scenes.scene2d.ui.Dialog; | ||
import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane; | ||
import com.badlogic.gdx.scenes.scene2d.ui.Table; | ||
import com.esotericsoftware.minlog.Log; | ||
import design.editors.fields.*; | ||
import org.jetbrains.annotations.NotNull; | ||
import shared.objects.types.Obj; | ||
|
||
import java.lang.reflect.Field; | ||
import java.util.Arrays; | ||
import java.util.LinkedList; | ||
import java.util.List; | ||
|
||
import static launcher.DesignCenter.SKIN; | ||
|
||
public class GenericEditor extends Dialog { | ||
|
||
Object obj; | ||
|
||
public GenericEditor(Obj obj) { | ||
super("Object Editor", SKIN); | ||
this.obj = obj; | ||
addTable(); | ||
button("Cancel", false); | ||
button("OK", obj); | ||
} | ||
|
||
public static Table getTable(Object obj, FieldEditor.FieldListener listener) { | ||
Table table = new Table(SKIN); | ||
table.defaults().growX().uniform(); | ||
|
||
List<Field> allFields = getAllFields(new LinkedList<>(), obj.getClass()); | ||
allFields.forEach(field -> { | ||
Class<?> type = field.getType(); | ||
field.setAccessible(true); | ||
if (type.equals(int.class) || type.equals(Integer.class)) { | ||
table.add(IntegerEditor.create(field.getName(), getFieldProvider(field.getName()), (v) -> { | ||
try { | ||
field.set(obj, v); | ||
} catch (Exception e) { | ||
Log.error("Failed to set field value", e); | ||
} | ||
}, () -> { | ||
try { | ||
return (Integer) field.get(obj); | ||
} catch (Exception e) { | ||
Log.error("Failed to get field value", e); | ||
} | ||
return 0; | ||
}, listener)).row(); | ||
} else if (type.equals(String.class)) { | ||
table.add(StringEditor.simple(field.getName(), (v) -> { | ||
try { | ||
field.set(obj, v); | ||
} catch (Exception e) { | ||
Log.error("Failed to set field value", e); | ||
} | ||
}, () -> { | ||
try { | ||
return (String) field.get(obj); | ||
} catch (Exception e) { | ||
Log.error("Failed to get field value", e); | ||
} | ||
return ""; | ||
}, listener)).row(); | ||
} else if (type.equals(boolean.class) || type.equals(Boolean.class)) { | ||
table.add(BooleanEditor.simple(field.getName(), (v) -> { | ||
try { | ||
field.set(obj, v); | ||
} catch (Exception e) { | ||
Log.error("Failed to set field value", e); | ||
} | ||
}, () -> { | ||
try { | ||
return (Boolean) field.get(obj); | ||
} catch (Exception e) { | ||
Log.error("Failed to get field value", e); | ||
} | ||
return false; | ||
}, listener)).row(); | ||
} else if (type.equals(float.class) || type.equals(Float.class)) { | ||
table.add(FloatEditor.simple(field.getName(), (v) -> { | ||
try { | ||
field.set(obj, v); | ||
} catch (Exception e) { | ||
Log.error("Failed to set field value", e); | ||
} | ||
}, () -> { | ||
try { | ||
return (Float) field.get(obj); | ||
} catch (Exception e) { | ||
Log.error("Failed to get field value", e); | ||
} | ||
return 0f; | ||
}, listener)).row(); | ||
} | ||
}); | ||
|
||
return table; | ||
} | ||
|
||
private static List<Field> getAllFields(List<Field> fields, Class<?> type) { | ||
fields.addAll(Arrays.asList(type.getDeclaredFields())); | ||
|
||
if (type.getSuperclass() != null) { | ||
getAllFields(fields, type.getSuperclass()); | ||
} | ||
|
||
return fields; | ||
} | ||
|
||
@NotNull | ||
public static FieldProvider getFieldProvider(String field) { | ||
switch (field) { | ||
case "grhIndex": | ||
case "iconGrh": | ||
return FieldProvider.IMAGE; | ||
case "bodyNumber": | ||
case "animationId": | ||
case "dwarfAnimationId": | ||
case "fxGrh": | ||
return FieldProvider.ANIMATION; | ||
} | ||
return FieldProvider.NONE; | ||
} | ||
|
||
private void addTable() { | ||
getContentTable().add(new ScrollPane(getTable(obj, () -> { | ||
}))).prefHeight(300).prefWidth(300); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,92 @@ | ||
package design.screens.views; | ||
|
||
import com.badlogic.gdx.scenes.scene2d.ui.Table; | ||
import com.badlogic.gdx.utils.Array; | ||
import design.designers.SpellDesigner; | ||
import design.editors.GenericEditor; | ||
import design.editors.fields.FieldEditor; | ||
import design.screens.ScreenEnum; | ||
import graphics.AOAnimationActor; | ||
import graphics.Effect; | ||
import model.descriptors.FXDescriptor; | ||
import model.textures.AOAnimation; | ||
import model.textures.BundledAnimation; | ||
import org.jetbrains.annotations.NotNull; | ||
import shared.model.Spell; | ||
|
||
import static launcher.DesignCenter.SKIN; | ||
|
||
public class SpellView extends View<Spell, SpellDesigner> { | ||
|
||
public SpellView() { | ||
super(new SpellDesigner()); | ||
} | ||
|
||
@Override | ||
Preview<Spell> createPreview() { | ||
return new SpellPreview(); | ||
} | ||
|
||
@Override | ||
Editor<Spell> createItemView() { | ||
return new SpellItemView(); | ||
} | ||
|
||
@Override | ||
protected void sort(Array<Spell> items) { | ||
} | ||
|
||
@Override | ||
protected void keyPressed(int keyCode) { | ||
} | ||
|
||
class SpellItemView extends Editor<Spell> { | ||
|
||
public SpellItemView() { | ||
super(SKIN); | ||
} | ||
|
||
@NotNull | ||
@Override | ||
protected Table getTable(FieldEditor.FieldListener listener) { | ||
return GenericEditor.getTable(get(), listener); | ||
} | ||
|
||
@Override | ||
protected Spell getCopy(Spell to) { | ||
return to; | ||
} | ||
} | ||
|
||
class SpellPreview extends Preview<Spell> { | ||
|
||
private Spell spell; | ||
|
||
public SpellPreview() { | ||
super(SKIN); | ||
} | ||
|
||
@Override | ||
void show(Spell spell) { | ||
clear(); | ||
this.spell = spell; | ||
|
||
int fxGrh = spell.getFxGrh(); | ||
ScreenEnum.FXS_VIEW.getScreen() | ||
.getDesigner() | ||
.get(fxGrh) | ||
.filter(FXDescriptor.class::isInstance) | ||
.ifPresent(fx -> { | ||
FXDescriptor descriptor = (FXDescriptor) fx; | ||
BundledAnimation anim = getAnimationHandler().getFX(new Effect.EffectBuilder().withFX(descriptor.id).build()); | ||
AOAnimationActor animation = new AOAnimationActor(anim); | ||
add(animation); | ||
}); | ||
} | ||
|
||
@Override | ||
Spell get() { | ||
return spell; | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.