Upload files to 'studio'

This commit is contained in:
Jeison Yehuda Amihud (Blender Dumbass) 2020-12-06 13:52:19 +00:00
parent f5879d179b
commit e5cfcf3269
3 changed files with 296 additions and 53 deletions

View file

@ -79,7 +79,11 @@ def run(win):
win.project = project
win.out_dots = {}
win.assets = {}
win.szone = [[100,100],[100,100]] # Square drawn if selected more then one node.
win.surround = { # And this is the list of the squares. Because it's not
"frame":0, # as easy to do. See UI / UI_math / rectangle_surround()
"rects":[] # for details of this implementation.
}
if pm_project.is_legacy(project):
win.story = story.get_legacy(project)
@ -106,6 +110,7 @@ def run(win):
win.current["scroll"] = [0,0]
win.current["project"] = ""
win.current["tool"] = "selection"
win.current["draw_dot"] = "end"
previous(win)
@ -219,6 +224,9 @@ def pmdrawing(pmdrawing, main_layer, win):
# If you press ESC you get back from any window to the main menu.
if 65307 in win.current["keys"] and win.url != "install_updates":
win.url = "story_editor"
win.story["selected"] = []
win.current["tool"] = "selection"
win.current["keys"] = []

View file

@ -36,7 +36,7 @@ def node_dot(layer, win, x, y, direction="in", entry="end"):
if entry.startswith("scene:") or entry in ["start", "end"]:
UI_color.set(layer, win, "progress_background")
UI_color.set(layer, win, "node_script")
else:
UI_color.set(layer, win, "node_imagefile")
@ -47,8 +47,68 @@ def node_dot(layer, win, x, y, direction="in", entry="end"):
0,
6)
if int(win.current["mx"]) in range(int(x), int(x+12))\
and int(win.current["my"]) in range(int(y), int(y+12)):
UI_color.set(layer, win, "text_normal")
UI_elements.roundrect(layer, win,
x,
y,
0,
0,
6,
fill=False)
layer.stroke()
# Start drawing the line
if win.current["LMB"] and direction != "in":
# Out point
win.current["tool"] = "connect"
win.current["draw_dot"] = raw_entry
elif win.current["LMB"] and direction == "in" and win.current["tool"] != "connect":
# Take out of the in point
try:
found = False
win.current["tool"] = "connect"
for arrow in win.story["arrows"]:
if raw_entry == arrow[1]:
win.current["draw_dot"] = arrow[0]#.copy()
found = arrow
break
if found:
win.story["arrows"].remove(found)
else:
win.current["draw_dot"] = "end"
except:
pass
# Connecting the line
if win.current["tool"] == "connect" and direction == "in" and not win.current["LMB"]:
# Connecting the scenes together
if raw_entry[0] != "file" and win.current["draw_dot"][0] != "file":
new_arrow = [
win.current["draw_dot"],
raw_entry
]
if new_arrow not in win.story["arrows"]:
win.story["arrows"].append(new_arrow)
UI_math.filter_arrows(win)
if direction != "in":
win.out_dots[entry] = [x+6, y+6]
@ -61,7 +121,7 @@ def node_dot(layer, win, x, y, direction="in", entry="end"):
fr = fr[0]+":"+fr[1]
try:
UI_color.set(layer, win, "progress_background")
UI_color.set(layer, win, "node_script")
layer.move_to(
win.out_dots[fr][0],
win.out_dots[fr][1]
@ -192,6 +252,9 @@ def scene_node(outlayer, win, x, y, width, height, name="Unknown", fraction=0.0)
entry = ['scene', name]
width = max(width,20)
height = max(height,20)
if int(x) in range(int(0-width), int(win.current["w"]))\
and int(y) in range(int(0-height), int(win.current["h"])):
@ -206,7 +269,8 @@ def scene_node(outlayer, win, x, y, width, height, name="Unknown", fraction=0.0)
if win.current["LMB"] and entry in win.story["selected"]:
if int(win.current["LMB"][0]) in range(int(x), int(x+width))\
and int(win.current["LMB"][1]) in range(int(y), int(y+height)):
and int(win.current["LMB"][1]) in range(int(y), int(y+height))\
and win.current["tool"] == "selection":
win.current["tool"] = "grab"
win.story["active"] = entry
@ -247,12 +311,62 @@ def scene_node(outlayer, win, x, y, width, height, name="Unknown", fraction=0.0)
if win.story["active"] not in win.story["selected"]:
win.story["active"] = entry
if entry in win.story["selected"]:
selected = True
if selected:
if win.current["tool"] == "selection":
UI_math.rectangle_surround(win, "selection",
win.szone[0], win.szone[1],
[x,y], [width, height]
)
# Now let's make the stratching thing do it's stratching. It's the
# circle in the bottom, right corner of the selection.
if win.current["tool"] == "scale" and win.current["LMB"] and win.previous["LMB"]:
# let's get the points of the selection zone.
zx = win.szone[0][0]
zy = win.szone[0][1]
zsx = win.previous["LMB"][0]
zsy = win.previous["LMB"][1]
if win.current["mx"] > zx and win.current["my"] > zy:
# now let's get the motion fraction.
mvx = (x - zx) / (zsx - zx)
mvy = (y - zy) / (zsy - zy)
svx = (win.current["mx"]- zx) / (win.previous["mx"]-zx)
svy = (win.current["my"]- zy) / (win.previous["my"]-zy)
# now let's apply these
win.story["scenes"][name]["position"][0]\
+= (win.current["mx"] - win.previous["mx"])*mvx
win.story["scenes"][name]["position"][1]\
+= (win.current["my"] - win.previous["my"])*mvy
win.story["scenes"][name]["size"][0]\
= max(win.story["scenes"][name]["size"][0] * svx, 40)
win.story["scenes"][name]["size"][1]\
= max(win.story["scenes"][name]["size"][1] * svy, 40)
# Now let's do the simple grab tool.
if win.current["tool"] == "grab":
try:
@ -273,17 +387,12 @@ def scene_node(outlayer, win, x, y, width, height, name="Unknown", fraction=0.0)
else:
elif win.current["tool"] != "connect":
win.current["tool"] = "selection"
# In case there is a parent event in the scene.
if win.story["scenes"][name]["parent"]:
parent = win.story["scenes"][name]["parent"]
win.story["events"][parent]["position"] = [x, y]
win.story["events"][parent]["size"] = [0, 0]
except:
raise()
@ -304,7 +413,20 @@ def scene_node(outlayer, win, x, y, width, height, name="Unknown", fraction=0.0)
fill=False)
outlayer.stroke()
outlayer.set_line_width(2)
# In case there is a parent event in the scene.
if win.story["scenes"][name]["parent"]:
parent = win.story["scenes"][name]["parent"]
UI_math.rectangle_surround(win, parent,
win.story["events"][parent]["position"],
win.story["events"][parent]["size"],
[x,y], [width, height]
)
# Clip
UI_elements.roundrect(layer, win,
0,
@ -322,7 +444,7 @@ def scene_node(outlayer, win, x, y, width, height, name="Unknown", fraction=0.0)
# top banner
UI_color.set(layer, win, "node_blendfile")
UI_color.set(layer, win, "node_script")
layer.rectangle(0,0,width, 20)
layer.fill()
@ -438,7 +560,8 @@ def link_node(outlayer, win, x, y, width=150, height=150, name="", num=0, linkty
if win.current["LMB"] and entry in win.story["selected"]:
if int(win.current["LMB"][0]) in range(int(x), int(x+width))\
and int(win.current["LMB"][1]) in range(int(y), int(y+height)):
and int(win.current["LMB"][1]) in range(int(y), int(y+height))\
and win.current["tool"] == "selection":
win.current["tool"] = "grab"
win.story["active"] = entry
@ -485,6 +608,40 @@ def link_node(outlayer, win, x, y, width=150, height=150, name="", num=0, linkty
if selected:
if win.current["tool"] == "selection":
UI_math.rectangle_surround(win, "selection",
win.szone[0], win.szone[1],
[x,y], [width, height]
)
# Now let's make the stratching thing do it's stratching. It's the
# circle in the bottom, right corner of the selection.
if win.current["tool"] == "scale" and win.current["LMB"] and win.previous["LMB"]:
# let's get the points of the selection zone.
zx = win.szone[0][0]
zy = win.szone[0][1]
zsx = win.previous["LMB"][0]
zsy = win.previous["LMB"][1]
if win.current["mx"] > zx and win.current["my"] > zy:
# now let's get the motion fraction.
mvx = (x - zx) / (zsx - zx)
mvy = (y - zy) / (zsy - zy)
# now let's apply these
win.story["links"][num][2][0]\
+= (win.current["mx"] - win.previous["mx"])*mvx
win.story["links"][num][2][1]\
+= (win.current["my"] - win.previous["my"])*mvy
if win.current["tool"] == "grab":
try:
@ -502,7 +659,7 @@ def link_node(outlayer, win, x, y, width=150, height=150, name="", num=0, linkty
x += win.previous["mx"] - win.previous["LMB"][0]
y += win.previous["my"] - win.previous["LMB"][1]
else:
elif win.current["tool"] != "connect":
win.current["tool"] = "selection"

View file

@ -411,9 +411,6 @@ def layer(win):
sx, sy = win.story["events"][event]["position"]
sx = sx + cx
sy = sy + cy
# Scale
ssx, ssy = win.story["events"][event]["size"]
@ -442,34 +439,7 @@ def layer(win):
#Draw
studio_nodes.scene_node(layer, win, sx, sy, ssx, ssy, name=scene, fraction=sf)
# Let's get events arround the scene. If it's inside the event.
if win.story["scenes"][scene]["parent"]:
parent = win.story["scenes"][scene]["parent"]
try:
# Don't touch these. It's a hard rigging thing.
if win.story["events"][parent]["position"][0] > sx - cx:
win.story["events"][parent]["position"][0] = sx - cx
if win.story["events"][parent]["position"][1] > sy - cy:
win.story["events"][parent]["position"][1] = sy - cy
if win.story["events"][parent]["size"][0]\
+ win.story["events"][parent]["position"][0]+cx < ssx + sx:
win.story["events"][parent]["size"][0] = ssx + sx\
- win.story["events"][parent]["position"][0] - cx
if win.story["events"][parent]["size"][1]\
+ win.story["events"][parent]["position"][1]+cy < ssy + sy:
win.story["events"][parent]["size"][1] = ssy + sy\
- win.story["events"][parent]["position"][1] - cy
except:
pass
# LINKS (Images, Stuff)
@ -484,18 +454,12 @@ def layer(win):
studio_nodes.link_node(layer, win, lx, ly, name=linkname, num=num, linktype=linktype )
# In case there is a selection bug
if not win.story["selected"]:
if not win.story["selected"] and win.current["tool"] != "connect":
win.current["tool"] = "selection"
# Selector visualization
if win.current["LMB"] and win.current["tool"] == "selection" and win.url == "story_editor":
# Undo selection
if int(win.current["LMB"][0] - win.current["mx"]) in range(-10, 10)\
and int(win.current["LMB"][1] - win.current["my"])in range(-10, 10)\
and 65505 not in win.current["keys"]:
win.story["selected"] = []
# Draw selection box
UI_color.set(layer, win, "progress_background")
layer.rectangle(
@ -505,6 +469,97 @@ def layer(win):
win.current["LMB"][1] - win.current["my"]
)
layer.stroke()
# Now let's draw the cool AF multi selection zone thingy
# Draw selection box
if len(win.story["selected"]) > 1 and win.current["tool"] == "selection":
UI_color.set(layer, win, "progress_background")
layer.rectangle(
win.szone[0][0]-10,
win.szone[0][1]-10,
win.szone[1][0]+20,
win.szone[1][1]+20
)
layer.stroke()
# Now I want to make a tiny widget that will resize the stuff.
if win.story["selected"]:
if win.current["tool"] == "selection":
draw_circle = True
if len(win.story["selected"]) == 1:
if win.story["selected"][0][0] != "scene":
draw_circle = False
if draw_circle:
UI_color.set(layer, win, "node_badfile")
UI_elements.roundrect(layer, win,
win.szone[0][0]+win.szone[1][0],
win.szone[0][1]+win.szone[1][1],
0,
0,
10)
UI_color.set(layer, win, "progress_background")
UI_elements.roundrect(layer, win,
win.szone[0][0]+win.szone[1][0],
win.szone[0][1]+win.szone[1][1],
0,
0,
10,
fill=False)
layer.stroke()
elif win.current["tool"] == "scale":
UI_color.set(layer, win, "node_badfile")
UI_elements.roundrect(layer, win,
win.current["mx"]-10,
win.current["my"]-10,
0,
0,
10)
UI_color.set(layer, win, "progress_background")
UI_elements.roundrect(layer, win,
win.current["mx"]-10,
win.current["my"]-10,
0,
0,
10,
fill=False)
layer.stroke()
if int(win.current["mx"]) in range(int(win.szone[0][0]+win.szone[1][0]), int(win.szone[0][0]+win.szone[1][0]+20))\
and int(win.current["my"]) in range(int(win.szone[0][1]+win.szone[1][1]), int(win.szone[0][1]+win.szone[1][1]+20))\
and win.current["tool"] == "selection":
UI_color.set(layer, win, "text_normal")
UI_elements.roundrect(layer, win,
win.szone[0][0]+win.szone[1][0],
win.szone[0][1]+win.szone[1][1],
0,
0,
10,
fill=False)
layer.stroke()
if win.current["LMB"] and not win.previous["LMB"]:
win.current["tool"] = "scale"
if win.current["tool"] == "scale" and not win.current["LMB"]:
win.current["tool"] = "selection"
# Canceling seletion. I move it here so it would not interfire with the
# the rest of the program.
if win.current["LMB"] and win.current["tool"] == "selection" and win.url == "story_editor":
# Undo selection
if int(win.current["LMB"][0] - win.current["mx"]) in range(-10, 10)\
and int(win.current["LMB"][1] - win.current["my"])in range(-10, 10)\
and 65505 not in win.current["keys"]:
win.story["selected"] = []
# Let's put in the start and the end nodes. These are drawn on top of
# everything.
@ -514,5 +569,28 @@ def layer(win):
win.current["h"] - 80,
100,40)
# Let's draw the line while connecting 2 scenes together.
if win.current["tool"] == "connect":
if not win.current["LMB"]:
win.current["tool"] = "selection"
fr = win.current["draw_dot"]
if type(fr) == list:
fr = fr[0]+":"+fr[1]
try:
UI_color.set(layer, win, "node_script")
layer.move_to(
win.out_dots[fr][0],
win.out_dots[fr][1]
)
layer.line_to(win.current["mx"], win.current["my"])
layer.stroke()
except:
pass
return surface