|
|
@@ -89,7 +89,7 @@ Vector2 sprite_cell_pivot_xy(int cell_w, int cell_h, int pivot)
|
|
|
return Vector2(pivot_x, pivot_y);
|
|
|
}
|
|
|
|
|
|
-Gtk.Label label_with_alignment(string text, Gtk.Align align)
|
|
|
+Gtk.Label label_with_alignment(string text, Gtk.Align align = Gtk.Align.END)
|
|
|
{
|
|
|
var l = new Label(text);
|
|
|
l.halign = align;
|
|
|
@@ -105,15 +105,11 @@ public class SpriteImportDialog : Gtk.Dialog
|
|
|
public Gtk.DrawingArea _preview;
|
|
|
|
|
|
public Gtk.Label resolution;
|
|
|
- public Gtk.SpinButton cells_h;
|
|
|
- public Gtk.SpinButton cells_v;
|
|
|
+ public EntryVector2 cells_hv;
|
|
|
public Gtk.CheckButton cell_wh_auto;
|
|
|
- public Gtk.SpinButton cell_w;
|
|
|
- public Gtk.SpinButton cell_h;
|
|
|
- public Gtk.SpinButton offset_x;
|
|
|
- public Gtk.SpinButton offset_y;
|
|
|
- public Gtk.SpinButton spacing_x;
|
|
|
- public Gtk.SpinButton spacing_y;
|
|
|
+ public EntryVector2 cell_wh;
|
|
|
+ public EntryVector2 offset_xy;
|
|
|
+ public EntryVector2 spacing_xy;
|
|
|
public Gtk.ComboBoxText pivot;
|
|
|
public EntryDouble layer;
|
|
|
public EntryDouble depth;
|
|
|
@@ -123,21 +119,17 @@ public class SpriteImportDialog : Gtk.Dialog
|
|
|
public Gtk.StackSwitcher shape_switcher;
|
|
|
public Gtk.Stack shape;
|
|
|
|
|
|
- public Gtk.SpinButton circle_collision_center_x;
|
|
|
- public Gtk.SpinButton circle_collision_center_y;
|
|
|
- public Gtk.SpinButton circle_collision_radius;
|
|
|
+ public EntryVector2 circle_collision_center_xy;
|
|
|
+ public EntryDouble circle_collision_radius;
|
|
|
|
|
|
- public Gtk.SpinButton capsule_collision_center_x;
|
|
|
- public Gtk.SpinButton capsule_collision_center_y;
|
|
|
- public Gtk.SpinButton capsule_collision_height;
|
|
|
- public Gtk.SpinButton capsule_collision_radius;
|
|
|
+ public EntryVector2 capsule_collision_center_xy;
|
|
|
+ public EntryDouble capsule_collision_height;
|
|
|
+ public EntryDouble capsule_collision_radius;
|
|
|
|
|
|
- public Gtk.SpinButton collision_x;
|
|
|
- public Gtk.SpinButton collision_y;
|
|
|
- public Gtk.SpinButton collision_w;
|
|
|
- public Gtk.SpinButton collision_h;
|
|
|
+ public EntryVector2 collision_xy;
|
|
|
+ public EntryVector2 collision_wh;
|
|
|
public ComboBoxMap actor_class;
|
|
|
- public Gtk.SpinButton mass;
|
|
|
+ public EntryDouble mass;
|
|
|
public Gtk.CheckButton lock_rotation_y;
|
|
|
|
|
|
// Widgets
|
|
|
@@ -191,13 +183,13 @@ public class SpriteImportDialog : Gtk.Dialog
|
|
|
cr.paint();
|
|
|
|
|
|
// Pivot is relative to the top-left corner of the cell
|
|
|
- Vector2 pivot = sprite_cell_pivot_xy((int)cell_w.value
|
|
|
- , (int)cell_h.value
|
|
|
+ Vector2 pivot = sprite_cell_pivot_xy((int)cell_wh.value.x
|
|
|
+ , (int)cell_wh.value.y
|
|
|
, (int)pivot.active
|
|
|
);
|
|
|
|
|
|
- int num_v = (int)cells_v.value;
|
|
|
- int num_h = (int)cells_h.value;
|
|
|
+ int num_v = (int)cells_hv.value.y;
|
|
|
+ int num_h = (int)cells_hv.value.x;
|
|
|
|
|
|
for (int h = 0; h < num_v; ++h)
|
|
|
{
|
|
|
@@ -205,20 +197,20 @@ public class SpriteImportDialog : Gtk.Dialog
|
|
|
{
|
|
|
Vector2 cell = sprite_cell_xy(h
|
|
|
, w
|
|
|
- , (int)offset_x.value
|
|
|
- , (int)offset_y.value
|
|
|
- , (int)cell_w.value
|
|
|
- , (int)cell_h.value
|
|
|
- , (int)spacing_x.value
|
|
|
- , (int)spacing_y.value
|
|
|
+ , (int)offset_xy.value.x
|
|
|
+ , (int)offset_xy.value.y
|
|
|
+ , (int)cell_wh.value.x
|
|
|
+ , (int)cell_wh.value.y
|
|
|
+ , (int)spacing_xy.value.x
|
|
|
+ , (int)spacing_xy.value.y
|
|
|
);
|
|
|
|
|
|
int x0 = (int)cell.x;
|
|
|
int y0 = (int)cell.y;
|
|
|
- int x1 = x0+(int)cell_w.value;
|
|
|
+ int x1 = x0+(int)cell_wh.value.x;
|
|
|
int y1 = y0;
|
|
|
int x2 = x1;
|
|
|
- int y2 = y0+(int)cell_h.value;
|
|
|
+ int y2 = y0+(int)cell_wh.value.y;
|
|
|
int x3 = x0;
|
|
|
int y3 = y2;
|
|
|
// https://www.cairographics.org/FAQ/#sharp_lines
|
|
|
@@ -258,18 +250,18 @@ public class SpriteImportDialog : Gtk.Dialog
|
|
|
|
|
|
Vector2 cell = sprite_cell_xy(0
|
|
|
, 0
|
|
|
- , (int)offset_x.value
|
|
|
- , (int)offset_y.value
|
|
|
- , (int)cell_w.value
|
|
|
- , (int)cell_h.value
|
|
|
- , (int)spacing_x.value
|
|
|
- , (int)spacing_y.value
|
|
|
+ , (int)offset_xy.value.x
|
|
|
+ , (int)offset_xy.value.y
|
|
|
+ , (int)cell_wh.value.x
|
|
|
+ , (int)cell_wh.value.y
|
|
|
+ , (int)spacing_xy.value.x
|
|
|
+ , (int)spacing_xy.value.y
|
|
|
);
|
|
|
|
|
|
int x0 = (int)cell.x;
|
|
|
int y0 = (int)cell.y;
|
|
|
- int x1 = x0+(int)cell_w.value;
|
|
|
- int y2 = y0+(int)cell_h.value;
|
|
|
+ int x1 = x0+(int)cell_wh.value.x;
|
|
|
+ int y2 = y0+(int)cell_wh.value.y;
|
|
|
|
|
|
// Draw checkered background
|
|
|
cr.save();
|
|
|
@@ -294,16 +286,16 @@ public class SpriteImportDialog : Gtk.Dialog
|
|
|
|
|
|
// Draw collision
|
|
|
if (shape.visible_child_name == "square_collider") {
|
|
|
- cr.rectangle(collision_x.value, collision_y.value, collision_w.value, collision_h.value);
|
|
|
+ cr.rectangle(collision_xy.value.x, collision_xy.value.y, collision_wh.value.x, collision_wh.value.y);
|
|
|
cr.set_source_rgba(0.3, 0.3, 0.3, 0.6);
|
|
|
cr.fill();
|
|
|
} else if (shape.visible_child_name == "circle_collider") {
|
|
|
- cr.arc(circle_collision_center_x.value, circle_collision_center_y.value, circle_collision_radius.value, 0, 2*Math.PI);
|
|
|
+ cr.arc(circle_collision_center_xy.value.x, circle_collision_center_xy.value.y, circle_collision_radius.value, 0, 2*Math.PI);
|
|
|
cr.set_source_rgba(0.3, 0.3, 0.3, 0.6);
|
|
|
cr.fill();
|
|
|
} else if (shape.visible_child_name == "capsule_collider") {
|
|
|
- double x = capsule_collision_center_x.value;
|
|
|
- double y = capsule_collision_center_y.value;
|
|
|
+ double x = capsule_collision_center_xy.value.x;
|
|
|
+ double y = capsule_collision_center_xy.value.y;
|
|
|
double radius = capsule_collision_radius.value;
|
|
|
double height = capsule_collision_height.value - 2*radius;
|
|
|
cr.arc(x - height/2, y, radius, Math.PI/2, 3*Math.PI/2);
|
|
|
@@ -319,33 +311,18 @@ public class SpriteImportDialog : Gtk.Dialog
|
|
|
resolution = new Gtk.Label(_pixbuf.width.to_string() + " × " + _pixbuf.height.to_string());
|
|
|
resolution.halign = Gtk.Align.START;
|
|
|
|
|
|
- cells_h = new Gtk.SpinButton.with_range(1.0, 256.0, 1.0);
|
|
|
- cells_h.value = 4;
|
|
|
- cells_v = new Gtk.SpinButton.with_range(1.0, 256.0, 1.0);
|
|
|
- cells_v.value = 4;
|
|
|
+ cells_hv = new EntryVector2(Vector2(4.0, 4.0), Vector2(1.0, 1.0), Vector2(256.0, 256.0));
|
|
|
cell_wh_auto = new Gtk.CheckButton();
|
|
|
cell_wh_auto.active = true;
|
|
|
- cell_w = new Gtk.SpinButton.with_range(1.0, double.MAX, 1.0);
|
|
|
- cell_w.value = _pixbuf.width / cells_h.value;
|
|
|
- cell_w.sensitive = !cell_wh_auto.active;
|
|
|
- cell_h = new Gtk.SpinButton.with_range(1.0, double.MAX, 1.0);
|
|
|
- cell_h.value = _pixbuf.height / cells_v.value;
|
|
|
- cell_h.sensitive = !cell_wh_auto.active;
|
|
|
- offset_x = new Gtk.SpinButton.with_range(0, double.MAX, 1.0);
|
|
|
- offset_y = new Gtk.SpinButton.with_range(0, double.MAX, 1.0);
|
|
|
- spacing_x = new Gtk.SpinButton.with_range(0, double.MAX, 1.0);
|
|
|
- spacing_y = new Gtk.SpinButton.with_range(0, double.MAX, 1.0);
|
|
|
+ cell_wh = new EntryVector2(Vector2(_pixbuf.width / cells_hv.value.x, _pixbuf.height / cells_hv.value.y), Vector2(1.0, 1.0), Vector2(double.MAX, double.MAX));
|
|
|
+ cell_wh.sensitive = !cell_wh_auto.active;
|
|
|
+ offset_xy = new EntryVector2(Vector2(0.0, 0.0), Vector2(0.0, 0.0), Vector2(double.MAX, double.MAX));
|
|
|
+ spacing_xy = new EntryVector2(Vector2(0.0, 0.0), Vector2(0.0, 0.0), Vector2(double.MAX, double.MAX));
|
|
|
|
|
|
collision_enabled = new Gtk.CheckButton();
|
|
|
collision_enabled.active = true;
|
|
|
- collision_x = new Gtk.SpinButton.with_range(-double.MAX, double.MAX, 1.0);
|
|
|
- collision_x.value = 0;
|
|
|
- collision_y = new Gtk.SpinButton.with_range(-double.MAX, double.MAX, 1.0);
|
|
|
- collision_y.value = 0;
|
|
|
- collision_w = new Gtk.SpinButton.with_range(-double.MAX, double.MAX, 1.0);
|
|
|
- collision_w.value = 32;
|
|
|
- collision_h = new Gtk.SpinButton.with_range(-double.MAX, double.MAX, 1.0);
|
|
|
- collision_h.value = 32;
|
|
|
+ collision_xy = new EntryVector2(Vector2(0.0, 0.0), Vector2(-double.MAX, -double.MAX), Vector2(double.MAX, double.MAX));
|
|
|
+ collision_wh = new EntryVector2(Vector2(32.0, 32.0), Vector2(-double.MAX, -double.MAX), Vector2(double.MAX, double.MAX));
|
|
|
actor_class = new ComboBoxMap();
|
|
|
actor_class.append("static", "static");
|
|
|
actor_class.append("dynamic", "dynamic");
|
|
|
@@ -354,100 +331,55 @@ public class SpriteImportDialog : Gtk.Dialog
|
|
|
actor_class.value = "static";
|
|
|
lock_rotation_y = new Gtk.CheckButton();
|
|
|
lock_rotation_y.active = true;
|
|
|
- mass = new Gtk.SpinButton.with_range(0, double.MAX, 1.0);
|
|
|
- mass.value = 10;
|
|
|
-
|
|
|
-
|
|
|
- circle_collision_center_x = new Gtk.SpinButton.with_range(-double.MAX, double.MAX, 1.0);
|
|
|
- circle_collision_center_x.value = cell_w.value/2.0;
|
|
|
- circle_collision_center_y = new Gtk.SpinButton.with_range(-double.MAX, double.MAX, 1.0);
|
|
|
- circle_collision_center_y.value = cell_h.value/2.0;;
|
|
|
- circle_collision_radius = new Gtk.SpinButton.with_range(-double.MAX, double.MAX, 1.0);
|
|
|
- circle_collision_radius.value = 32;
|
|
|
-
|
|
|
- capsule_collision_center_x = new Gtk.SpinButton.with_range(-double.MAX, double.MAX, 1.0);
|
|
|
- capsule_collision_center_x.value = cell_w.value/2.0;
|
|
|
- capsule_collision_center_y = new Gtk.SpinButton.with_range(-double.MAX, double.MAX, 1.0);
|
|
|
- capsule_collision_center_y.value = cell_h.value/2.0;;
|
|
|
- capsule_collision_radius = new Gtk.SpinButton.with_range(-double.MAX, double.MAX, 1.0);
|
|
|
- capsule_collision_radius.value = 32;
|
|
|
- capsule_collision_height = new Gtk.SpinButton.with_range(-double.MAX, double.MAX, 1.0);
|
|
|
- capsule_collision_height.value = 64;
|
|
|
-
|
|
|
- cells_h.value_changed.connect (() => {
|
|
|
- if (cell_wh_auto.active)
|
|
|
- {
|
|
|
- cell_w.value = _pixbuf.width / cells_h.value;
|
|
|
- cell_h.value = _pixbuf.height / cells_v.value;
|
|
|
- }
|
|
|
- _drawing_area.queue_draw();
|
|
|
- _preview.queue_draw();
|
|
|
- });
|
|
|
+ mass = new EntryDouble(10.0, 0.0, double.MAX);
|
|
|
|
|
|
- cells_v.value_changed.connect(() => {
|
|
|
- if (cell_wh_auto.active)
|
|
|
- {
|
|
|
- cell_w.value = _pixbuf.width / cells_h.value;
|
|
|
- cell_h.value = _pixbuf.height / cells_v.value;
|
|
|
- }
|
|
|
- _drawing_area.queue_draw();
|
|
|
- _preview.queue_draw();
|
|
|
- });
|
|
|
+ circle_collision_center_xy = new EntryVector2(Vector2(cell_wh.value.x/2.0, cell_wh.value.y/2.0), Vector2(-double.MAX, -double.MAX), Vector2(double.MAX, double.MAX));
|
|
|
+ circle_collision_radius = new EntryDouble(32.0, 0.0, double.MAX);
|
|
|
|
|
|
- cell_wh_auto.toggled.connect(() => {
|
|
|
- cell_w.sensitive = !cell_wh_auto.active;
|
|
|
- cell_h.sensitive = !cell_wh_auto.active;
|
|
|
- cell_w.value = _pixbuf.width / cells_h.value;
|
|
|
- cell_h.value = _pixbuf.height / cells_v.value;
|
|
|
- _drawing_area.queue_draw();
|
|
|
- _preview.queue_draw();
|
|
|
- });
|
|
|
+ capsule_collision_center_xy = new EntryVector2(Vector2(cell_wh.value.x/2.0, cell_wh.value.y/2.0), Vector2(-double.MAX, -double.MAX), Vector2(double.MAX, double.MAX));
|
|
|
+ capsule_collision_radius = new EntryDouble(32.0, -double.MAX, double.MAX);
|
|
|
+ capsule_collision_height = new EntryDouble(64.0, 0.0, double.MAX);
|
|
|
|
|
|
- cell_w.value_changed.connect (() => {
|
|
|
- circle_collision_center_x.value = cell_w.value/2.0;
|
|
|
- capsule_collision_center_x.value = cell_w.value/2.0;
|
|
|
- _drawing_area.queue_draw();
|
|
|
- _preview.queue_draw();
|
|
|
- });
|
|
|
+ cells_hv.value_changed.connect (() => {
|
|
|
+ if (cell_wh_auto.active)
|
|
|
+ cell_wh.value = Vector2(_pixbuf.width / cells_hv.value.x, _pixbuf.height / cells_hv.value.y);
|
|
|
|
|
|
- cell_h.value_changed.connect(() => {
|
|
|
- circle_collision_center_y.value = cell_h.value/2.0;
|
|
|
- capsule_collision_center_y.value = cell_h.value/2.0;
|
|
|
_drawing_area.queue_draw();
|
|
|
_preview.queue_draw();
|
|
|
});
|
|
|
|
|
|
- offset_x.value_changed.connect(() => {
|
|
|
+ cell_wh_auto.toggled.connect(() => {
|
|
|
+ cell_wh.sensitive = !cell_wh_auto.active;
|
|
|
+ cell_wh.value = Vector2(_pixbuf.width / cells_hv.value.x, _pixbuf.height / cells_hv.value.y);
|
|
|
+
|
|
|
_drawing_area.queue_draw();
|
|
|
_preview.queue_draw();
|
|
|
});
|
|
|
|
|
|
- offset_y.value_changed.connect(() => {
|
|
|
+ cell_wh.value_changed.connect (() => {
|
|
|
+ circle_collision_center_xy.value = Vector2(cell_wh.value.x/2.0, cell_wh.value.y/2.0);
|
|
|
+ capsule_collision_center_xy.value = Vector2(cell_wh.value.x/2.0, cell_wh.value.y/2.0);
|
|
|
_drawing_area.queue_draw();
|
|
|
_preview.queue_draw();
|
|
|
});
|
|
|
|
|
|
- spacing_x.value_changed.connect(() => {
|
|
|
+ offset_xy.value_changed.connect(() => {
|
|
|
_drawing_area.queue_draw();
|
|
|
_preview.queue_draw();
|
|
|
});
|
|
|
|
|
|
- spacing_y.value_changed.connect(() => {
|
|
|
+ spacing_xy.value_changed.connect(() => {
|
|
|
_drawing_area.queue_draw();
|
|
|
_preview.queue_draw();
|
|
|
});
|
|
|
|
|
|
collision_enabled.toggled.connect(() => {
|
|
|
- collision_x.sensitive = !collision_x.sensitive;
|
|
|
- collision_y.sensitive = !collision_y.sensitive;
|
|
|
- collision_w.sensitive = !collision_w.sensitive;
|
|
|
- collision_h.sensitive = !collision_h.sensitive;
|
|
|
+ collision_xy.sensitive = !collision_xy.sensitive;
|
|
|
+ collision_wh.sensitive = !collision_wh.sensitive;
|
|
|
shape_switcher.sensitive = !shape_switcher.sensitive;
|
|
|
- circle_collision_center_x.sensitive = !circle_collision_center_x.sensitive;
|
|
|
- circle_collision_center_y.sensitive = !circle_collision_center_y.sensitive;
|
|
|
+ circle_collision_center_xy.sensitive = !circle_collision_center_xy.sensitive;
|
|
|
circle_collision_radius.sensitive = !circle_collision_radius.sensitive;
|
|
|
- capsule_collision_center_x.sensitive = !capsule_collision_center_x.sensitive;
|
|
|
- capsule_collision_center_y.sensitive = !capsule_collision_center_y.sensitive;
|
|
|
+ capsule_collision_center_xy.sensitive = !capsule_collision_center_xy.sensitive;
|
|
|
capsule_collision_radius.sensitive = !capsule_collision_radius.sensitive;
|
|
|
capsule_collision_height.sensitive = !capsule_collision_height.sensitive;
|
|
|
actor_class.sensitive = !actor_class.sensitive;
|
|
|
@@ -455,27 +387,15 @@ public class SpriteImportDialog : Gtk.Dialog
|
|
|
lock_rotation_y.sensitive = !lock_rotation_y.sensitive;
|
|
|
});
|
|
|
|
|
|
- collision_x.value_changed.connect(() => {
|
|
|
- _preview.queue_draw();
|
|
|
- });
|
|
|
-
|
|
|
- collision_y.value_changed.connect(() => {
|
|
|
- _preview.queue_draw();
|
|
|
- });
|
|
|
-
|
|
|
- collision_w.value_changed.connect(() => {
|
|
|
- _preview.queue_draw();
|
|
|
- });
|
|
|
-
|
|
|
- collision_h.value_changed.connect(() => {
|
|
|
+ collision_xy.value_changed.connect(() => {
|
|
|
_preview.queue_draw();
|
|
|
});
|
|
|
|
|
|
- circle_collision_center_x.value_changed.connect(() => {
|
|
|
+ collision_wh.value_changed.connect(() => {
|
|
|
_preview.queue_draw();
|
|
|
});
|
|
|
|
|
|
- circle_collision_center_y.value_changed.connect(() => {
|
|
|
+ circle_collision_center_xy.value_changed.connect(() => {
|
|
|
_preview.queue_draw();
|
|
|
});
|
|
|
|
|
|
@@ -483,11 +403,7 @@ public class SpriteImportDialog : Gtk.Dialog
|
|
|
_preview.queue_draw();
|
|
|
});
|
|
|
|
|
|
- capsule_collision_center_x.value_changed.connect(() => {
|
|
|
- _preview.queue_draw();
|
|
|
- });
|
|
|
-
|
|
|
- capsule_collision_center_y.value_changed.connect(() => {
|
|
|
+ capsule_collision_center_xy.value_changed.connect(() => {
|
|
|
_preview.queue_draw();
|
|
|
});
|
|
|
|
|
|
@@ -520,86 +436,77 @@ public class SpriteImportDialog : Gtk.Dialog
|
|
|
depth = new EntryDouble(0.0, 0.0, 9999.0);
|
|
|
|
|
|
Gtk.Grid grid = new Gtk.Grid();
|
|
|
- grid.attach(label_with_alignment("Resolution", Gtk.Align.END), 0, 0, 1, 1);
|
|
|
- grid.attach(label_with_alignment("Cells H", Gtk.Align.END), 0, 1, 1, 1);
|
|
|
- grid.attach(label_with_alignment("Cells V", Gtk.Align.END), 0, 2, 1, 1);
|
|
|
- grid.attach(label_with_alignment("Cell WH auto", Gtk.Align.END), 0, 3, 1, 1);
|
|
|
- grid.attach(label_with_alignment("Cell W", Gtk.Align.END), 0, 4, 1, 1);
|
|
|
- grid.attach(label_with_alignment("Cell H", Gtk.Align.END), 0, 5, 1, 1);
|
|
|
- grid.attach(label_with_alignment("Offset X", Gtk.Align.END), 0, 6, 1, 1);
|
|
|
- grid.attach(label_with_alignment("Offset Y", Gtk.Align.END), 0, 7, 1, 1);
|
|
|
- grid.attach(label_with_alignment("Spacing X", Gtk.Align.END), 0, 8, 1, 1);
|
|
|
- grid.attach(label_with_alignment("Spacing Y", Gtk.Align.END), 0, 9, 1, 1);
|
|
|
- grid.attach(label_with_alignment("Pivot", Gtk.Align.END), 0, 10, 1, 1);
|
|
|
- grid.attach(label_with_alignment("Layer", Gtk.Align.END), 0, 11, 1, 1);
|
|
|
- grid.attach(label_with_alignment("Depth", Gtk.Align.END), 0, 12, 1, 1);
|
|
|
-
|
|
|
- grid.attach(label_with_alignment("Collision", Gtk.Align.END), 0, 13, 1, 1);
|
|
|
- grid.attach(label_with_alignment("Class", Gtk.Align.END), 0, 14, 1, 1);
|
|
|
- grid.attach(label_with_alignment("Mass", Gtk.Align.END), 0, 15, 1, 1);
|
|
|
- grid.attach(label_with_alignment("Lock Rotation", Gtk.Align.END), 0, 16, 1, 1);
|
|
|
-
|
|
|
- grid.attach(resolution, 1, 0, 1, 1);
|
|
|
- grid.attach(cells_h, 1, 1, 1, 1);
|
|
|
- grid.attach(cells_v, 1, 2, 1, 1);
|
|
|
- grid.attach(cell_wh_auto, 1, 3, 1, 1);
|
|
|
- grid.attach(cell_w, 1, 4, 1, 1);
|
|
|
- grid.attach(cell_h, 1, 5, 1, 1);
|
|
|
- grid.attach(offset_x, 1, 6, 1, 1);
|
|
|
- grid.attach(offset_y, 1, 7, 1, 1);
|
|
|
- grid.attach(spacing_x, 1, 8, 1, 1);
|
|
|
- grid.attach(spacing_y, 1, 9, 1, 1);
|
|
|
- grid.attach(pivot, 1, 10, 1, 1);
|
|
|
- grid.attach(layer, 1, 11, 1, 1);
|
|
|
- grid.attach(depth, 1, 12, 1, 1);
|
|
|
-
|
|
|
- grid.attach(collision_enabled, 1, 13, 1, 1);
|
|
|
- grid.attach(actor_class, 1, 14, 1, 1);
|
|
|
- grid.attach(mass, 1, 15, 1, 1);
|
|
|
- grid.attach(lock_rotation_y, 1, 16, 1, 1);
|
|
|
- shape = new Gtk.Stack();
|
|
|
+ grid.attach(label_with_alignment("Resolution"), 0, 0, 1, 1);
|
|
|
+ grid.attach(label_with_alignment("Cells"), 0, 1, 1, 1);
|
|
|
+ grid.attach(label_with_alignment("Auto Size"), 0, 2, 1, 1);
|
|
|
+ grid.attach(label_with_alignment("Cell"), 0, 3, 1, 1);
|
|
|
+ grid.attach(label_with_alignment("Offset"), 0, 4, 1, 1);
|
|
|
+ grid.attach(label_with_alignment("Spacing"), 0, 5, 1, 1);
|
|
|
+ grid.attach(label_with_alignment("Pivot"), 0, 6, 1, 1);
|
|
|
+ grid.attach(label_with_alignment("Layer"), 0, 7, 1, 1);
|
|
|
+ grid.attach(label_with_alignment("Depth"), 0, 8, 1, 1);
|
|
|
+ grid.attach(label_with_alignment("Collision"), 0, 9, 1, 1);
|
|
|
+ grid.attach(label_with_alignment("Class"), 0, 10, 1, 1);
|
|
|
+ grid.attach(label_with_alignment("Mass"), 0, 11, 1, 1);
|
|
|
+ grid.attach(label_with_alignment("Lock Rotation"), 0, 12, 1, 1);
|
|
|
+
|
|
|
+ grid.attach(resolution, 1, 0, 1, 1);
|
|
|
+ grid.attach(cells_hv, 1, 1, 1, 1);
|
|
|
+ grid.attach(cell_wh_auto, 1, 2, 1, 1);
|
|
|
+ grid.attach(cell_wh, 1, 3, 1, 1);
|
|
|
+ grid.attach(offset_xy, 1, 4, 1, 1);
|
|
|
+ grid.attach(spacing_xy, 1, 5, 1, 1);
|
|
|
+ grid.attach(pivot, 1, 6, 1, 1);
|
|
|
+ grid.attach(layer, 1, 7, 1, 1);
|
|
|
+ grid.attach(depth, 1, 8, 1, 1);
|
|
|
+ grid.attach(collision_enabled, 1, 9, 1, 1);
|
|
|
+ grid.attach(actor_class, 1, 10, 1, 1);
|
|
|
+ grid.attach(mass, 1, 11, 1, 1);
|
|
|
+ grid.attach(lock_rotation_y, 1, 12, 1, 1);
|
|
|
+
|
|
|
Gtk.Grid square_grid = new Gtk.Grid();
|
|
|
- square_grid.attach(label_with_alignment("Collision X", Gtk.Align.END), 0, 0, 1, 1);
|
|
|
- square_grid.attach(label_with_alignment("Collision Y", Gtk.Align.END), 0, 1, 1, 1);
|
|
|
- square_grid.attach(label_with_alignment("Collision W", Gtk.Align.END), 0, 2, 1, 1);
|
|
|
- square_grid.attach(label_with_alignment("Collision H", Gtk.Align.END), 0, 3, 1, 1);
|
|
|
- square_grid.attach(collision_x, 1, 0, 1, 1);
|
|
|
- square_grid.attach(collision_y, 1, 1, 1, 1);
|
|
|
- square_grid.attach(collision_w, 1, 2, 1, 1);
|
|
|
- square_grid.attach(collision_h, 1, 3, 1, 1);
|
|
|
+ square_grid.attach(label_with_alignment("Collision XY"), 0, 0, 1, 1);
|
|
|
+ square_grid.attach(label_with_alignment("Collision WH"), 0, 1, 1, 1);
|
|
|
+ square_grid.attach(collision_xy, 1, 0, 1, 1);
|
|
|
+ square_grid.attach(collision_wh, 1, 1, 1, 1);
|
|
|
+ collision_xy.hexpand = true;
|
|
|
+ collision_wh.hexpand = true;
|
|
|
square_grid.row_spacing = 6;
|
|
|
square_grid.column_spacing = 12;
|
|
|
|
|
|
Gtk.Grid circle_grid = new Gtk.Grid();
|
|
|
- circle_grid.attach(label_with_alignment("Collision X", Gtk.Align.END), 0, 0, 1, 1);
|
|
|
- circle_grid.attach(label_with_alignment("Collision Y", Gtk.Align.END), 0, 1, 1, 1);
|
|
|
- circle_grid.attach(label_with_alignment("Radius", Gtk.Align.END), 0, 2, 1, 1);
|
|
|
- circle_grid.attach(circle_collision_center_x, 1, 0, 1, 1);
|
|
|
- circle_grid.attach(circle_collision_center_y, 1, 1, 1, 1);
|
|
|
- circle_grid.attach(circle_collision_radius, 1, 2, 1, 1);
|
|
|
+ circle_grid.attach(label_with_alignment("Collision XY"), 0, 0, 1, 1);
|
|
|
+ circle_grid.attach(label_with_alignment("Radius"), 0, 1, 1, 1);
|
|
|
+ circle_grid.attach(circle_collision_center_xy, 1, 0, 1, 1);
|
|
|
+ circle_grid.attach(circle_collision_radius, 1, 1, 1, 1);
|
|
|
+ circle_collision_center_xy.hexpand = true;
|
|
|
+ circle_collision_radius.hexpand = true;
|
|
|
circle_grid.row_spacing = 6;
|
|
|
circle_grid.column_spacing = 12;
|
|
|
|
|
|
Gtk.Grid capsule_grid = new Gtk.Grid();
|
|
|
- capsule_grid.attach(label_with_alignment("Collision X", Gtk.Align.END), 0, 0, 1, 1);
|
|
|
- capsule_grid.attach(label_with_alignment("Collision Y", Gtk.Align.END), 0, 1, 1, 1);
|
|
|
- capsule_grid.attach(label_with_alignment("Radius", Gtk.Align.END), 0, 2, 1, 1);
|
|
|
- capsule_grid.attach(label_with_alignment("Height", Gtk.Align.END), 0, 3, 1, 1);
|
|
|
- capsule_grid.attach(capsule_collision_center_x, 1, 0, 1, 1);
|
|
|
- capsule_grid.attach(capsule_collision_center_y, 1, 1, 1, 1);
|
|
|
- capsule_grid.attach(capsule_collision_radius, 1, 2, 1, 1);
|
|
|
- capsule_grid.attach(capsule_collision_height, 1, 3, 1, 1);
|
|
|
+ capsule_grid.attach(label_with_alignment("Collision XY"), 0, 0, 1, 1);
|
|
|
+ capsule_grid.attach(label_with_alignment("Radius"), 0, 1, 1, 1);
|
|
|
+ capsule_grid.attach(label_with_alignment("Height"), 0, 2, 1, 1);
|
|
|
+ capsule_grid.attach(capsule_collision_center_xy, 1, 0, 1, 1);
|
|
|
+ capsule_grid.attach(capsule_collision_radius, 1, 1, 1, 1);
|
|
|
+ capsule_grid.attach(capsule_collision_height, 1, 2, 1, 1);
|
|
|
+ capsule_collision_center_xy.hexpand = true;
|
|
|
+ capsule_collision_radius.hexpand = true;
|
|
|
+ capsule_collision_height.hexpand = true;
|
|
|
capsule_grid.row_spacing = 6;
|
|
|
capsule_grid.column_spacing = 12;
|
|
|
|
|
|
- shape.add_titled(square_grid, "square_collider", "Square Collider");
|
|
|
- shape.add_titled(circle_grid, "circle_collider", "Circle Collider");
|
|
|
- shape.add_titled(capsule_grid, "capsule_collider", "Capsule Collider");
|
|
|
+ shape = new Gtk.Stack();
|
|
|
+ shape.add_titled(square_grid, "square_collider", "Square");
|
|
|
+ shape.add_titled(circle_grid, "circle_collider", "Circle");
|
|
|
+ shape.add_titled(capsule_grid, "capsule_collider", "Capsule");
|
|
|
shape_switcher = new Gtk.StackSwitcher();
|
|
|
shape_switcher.set_stack(shape);
|
|
|
- grid.attach(shape_switcher, 1, 17, 1, 1);
|
|
|
- grid.attach(shape, 1, 18, 1, 5);
|
|
|
|
|
|
+ grid.attach(label_with_alignment("Collider"), 0, 13, 1, 1);
|
|
|
+ grid.attach(shape_switcher, 1, 13, 1, 1);
|
|
|
+ grid.attach(shape, 1, 14, 1, 1);
|
|
|
grid.row_spacing = 6;
|
|
|
grid.column_spacing = 12;
|
|
|
|
|
|
@@ -633,61 +540,53 @@ public class SpriteImportDialog : Gtk.Dialog
|
|
|
public void load(Hashtable importer_settings)
|
|
|
{
|
|
|
// Load settings
|
|
|
- cells_h.value = (double)importer_settings["num_h"];
|
|
|
- cells_v.value = (double)importer_settings["num_v"];
|
|
|
- cell_w.value = (double)importer_settings["cell_w"];
|
|
|
- cell_h.value = (double)importer_settings["cell_h"];
|
|
|
- offset_x.value = (double)importer_settings["offset_x"];
|
|
|
- offset_y.value = (double)importer_settings["offset_y"];
|
|
|
- spacing_x.value = (double)importer_settings["spacing_x"];
|
|
|
- spacing_y.value = (double)importer_settings["spacing_y"];
|
|
|
- layer.value = (double)importer_settings["layer"];
|
|
|
- depth.value = (double)importer_settings["depth"];
|
|
|
- pivot.active = (int)(double)importer_settings["pivot"];
|
|
|
- collision_enabled.active = (bool)importer_settings["collision_enabled"];
|
|
|
- collision_x.value = (double)importer_settings["collision_x"];
|
|
|
- collision_y.value = (double)importer_settings["collision_y"];
|
|
|
- collision_w.value = (double)importer_settings["collision_w"];
|
|
|
- collision_h.value = (double)importer_settings["collision_h"];
|
|
|
-
|
|
|
- circle_collision_center_x.value = importer_settings.has_key("circle_collision_center_x") ? (double)importer_settings["circle_collision_center_x"] : cell_w.value/2.0;
|
|
|
- circle_collision_center_y.value = importer_settings.has_key("circle_collision_center_y") ? (double)importer_settings["circle_collision_center_y"] : cell_h.value/2.0;
|
|
|
+ cells_hv.value = Vector2((double)importer_settings["num_h"], (double)importer_settings["num_v"]);
|
|
|
+ cell_wh.value = Vector2((double)importer_settings["cell_w"], (double)importer_settings["cell_h"]);
|
|
|
+ offset_xy.value = Vector2((double)importer_settings["offset_x"], (double)importer_settings["offset_y"]);
|
|
|
+ spacing_xy.value = Vector2((double)importer_settings["spacing_x"], (double)importer_settings["spacing_y"]);
|
|
|
+ layer.value = (double)importer_settings["layer"];
|
|
|
+ depth.value = (double)importer_settings["depth"];
|
|
|
+ pivot.active = (int)(double)importer_settings["pivot"];
|
|
|
+ collision_enabled.active = (bool)importer_settings["collision_enabled"];
|
|
|
+ collision_xy.value = Vector2((double)importer_settings["collision_x"], (double)importer_settings["collision_y"]);
|
|
|
+ collision_wh.value = Vector2((double)importer_settings["collision_w"], (double)importer_settings["collision_h"]);
|
|
|
+
|
|
|
+ circle_collision_center_xy.value = Vector2(importer_settings.has_key("circle_collision_center_x") ? (double)importer_settings["circle_collision_center_x"] : cell_wh.value.x/2.0, importer_settings.has_key("circle_collision_center_y") ? (double)importer_settings["circle_collision_center_y"] : cell_wh.value.y/2.0);
|
|
|
circle_collision_radius.value = importer_settings.has_key("circle_collision_radius") ? (double)importer_settings["circle_collision_radius"] : 32;
|
|
|
|
|
|
- capsule_collision_center_x.value = importer_settings.has_key("capsule_collision_center_x") ? (double)importer_settings["capsule_collision_center_x"] : cell_w.value/2.0;
|
|
|
- capsule_collision_center_y.value = importer_settings.has_key("capsule_collision_center_y") ? (double)importer_settings["capsule_collision_center_y"] : cell_h.value/2.0;
|
|
|
- capsule_collision_radius.value = importer_settings.has_key("capsule_collision_radius") ? (double)importer_settings["capsule_collision_radius"] : 32;
|
|
|
- capsule_collision_height.value = importer_settings.has_key("capsule_collision_height") ? (double)importer_settings["capsule_collision_height"] : 64;
|
|
|
+ capsule_collision_center_xy.value = Vector2(importer_settings.has_key("capsule_collision_center_x") ? (double)importer_settings["capsule_collision_center_x"] : cell_wh.value.x/2.0, importer_settings.has_key("capsule_collision_center_y") ? (double)importer_settings["capsule_collision_center_y"] : cell_wh.value.y/2.0);
|
|
|
+ capsule_collision_radius.value = importer_settings.has_key("capsule_collision_radius") ? (double)importer_settings["capsule_collision_radius"] : 32;
|
|
|
+ capsule_collision_height.value = importer_settings.has_key("capsule_collision_height") ? (double)importer_settings["capsule_collision_height"] : 64;
|
|
|
|
|
|
- shape.visible_child_name = importer_settings.has_key("shape_active_name") ? (string)importer_settings["shape_active_name"] : "square_collider";
|
|
|
- actor_class.value = importer_settings.has_key("actor_class") ? (string)importer_settings["actor_class"] : "static";
|
|
|
- lock_rotation_y.active = importer_settings.has_key("lock_rotation_y") ? (bool)importer_settings["lock_rotation_y"] : true;
|
|
|
- mass.value = importer_settings.has_key("mass") ? (double)importer_settings["mass"] : 10.0;
|
|
|
+ shape.visible_child_name = importer_settings.has_key("shape_active_name") ? (string)importer_settings["shape_active_name"] : "square_collider";
|
|
|
+ actor_class.value = importer_settings.has_key("actor_class") ? (string)importer_settings["actor_class"] : "static";
|
|
|
+ lock_rotation_y.active = importer_settings.has_key("lock_rotation_y") ? (bool)importer_settings["lock_rotation_y"] : true;
|
|
|
+ mass.value = importer_settings.has_key("mass") ? (double)importer_settings["mass"] : 10.0;
|
|
|
}
|
|
|
|
|
|
public void save(Hashtable importer_settings)
|
|
|
{
|
|
|
- importer_settings["num_h"] = cells_h.value;
|
|
|
- importer_settings["num_v"] = cells_v.value;
|
|
|
- importer_settings["cell_w"] = cell_w.value;
|
|
|
- importer_settings["cell_h"] = cell_h.value;
|
|
|
- importer_settings["offset_x"] = offset_x.value;
|
|
|
- importer_settings["offset_y"] = offset_y.value;
|
|
|
- importer_settings["spacing_x"] = spacing_x.value;
|
|
|
- importer_settings["spacing_y"] = spacing_y.value;
|
|
|
+ importer_settings["num_h"] = cells_hv.value.x;
|
|
|
+ importer_settings["num_v"] = cells_hv.value.y;
|
|
|
+ importer_settings["cell_w"] = cell_wh.value.x;
|
|
|
+ importer_settings["cell_h"] = cell_wh.value.y;
|
|
|
+ importer_settings["offset_x"] = offset_xy.value.x;
|
|
|
+ importer_settings["offset_y"] = offset_xy.value.y;
|
|
|
+ importer_settings["spacing_x"] = spacing_xy.value.x;
|
|
|
+ importer_settings["spacing_y"] = spacing_xy.value.y;
|
|
|
importer_settings["layer"] = layer.value;
|
|
|
importer_settings["depth"] = depth.value;
|
|
|
importer_settings["pivot"] = pivot.active;
|
|
|
importer_settings["collision_enabled"] = collision_enabled.active;
|
|
|
- importer_settings["collision_x"] = collision_x.value;
|
|
|
- importer_settings["collision_y"] = collision_y.value;
|
|
|
- importer_settings["collision_w"] = collision_w.value;
|
|
|
- importer_settings["collision_h"] = collision_h.value;
|
|
|
- importer_settings["circle_collision_center_x"] = circle_collision_center_x.value;
|
|
|
- importer_settings["circle_collision_center_y"] = circle_collision_center_y.value;
|
|
|
+ importer_settings["collision_x"] = collision_xy.value.x;
|
|
|
+ importer_settings["collision_y"] = collision_xy.value.y;
|
|
|
+ importer_settings["collision_w"] = collision_wh.value.x;
|
|
|
+ importer_settings["collision_h"] = collision_wh.value.y;
|
|
|
+ importer_settings["circle_collision_center_x"] = circle_collision_center_xy.value.x;
|
|
|
+ importer_settings["circle_collision_center_y"] = circle_collision_center_xy.value.y;
|
|
|
importer_settings["circle_collision_radius"] = circle_collision_radius.value;
|
|
|
- importer_settings["capsule_collision_center_x"] = capsule_collision_center_x.value;
|
|
|
- importer_settings["capsule_collision_center_y"] = capsule_collision_center_y.value;
|
|
|
+ importer_settings["capsule_collision_center_x"] = capsule_collision_center_xy.value.x;
|
|
|
+ importer_settings["capsule_collision_center_y"] = capsule_collision_center_xy.value.y;
|
|
|
importer_settings["capsule_collision_radius"] = capsule_collision_radius.value;
|
|
|
importer_settings["capsule_collision_height"] = capsule_collision_height.value;
|
|
|
importer_settings["shape_active_name"] = shape.visible_child_name;
|