From b4d3524b07bc58e2ff0ac8ce6cd8beb9b66508b3 Mon Sep 17 00:00:00 2001 From: "Jeison Yehuda Amihud (Blender Dumbass)" Date: Sat, 28 Nov 2020 08:06:27 +0000 Subject: [PATCH] Upload files to 'studio' --- studio/story.py | 338 +++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 307 insertions(+), 31 deletions(-) diff --git a/studio/story.py b/studio/story.py index 8f82b64..e1e209a 100644 --- a/studio/story.py +++ b/studio/story.py @@ -4,6 +4,8 @@ import os import datetime +#from studio import checklist +import checklist def get_legacy(project_location): @@ -104,6 +106,8 @@ def get_legacy(project_location): # But first let's record a scene if it has no scene in it. + + if not "" in eventtext: if eventname in data["scenes"]: @@ -114,10 +118,9 @@ def get_legacy(project_location): "position":eventpositon, "size":eventsize, "parent":"", # For when it's in a Frame (Event) - "links":{}, # Assets, Images, Files etc. - "shots":{}, - "frases":{}, # For dialogues. - "text":eventtext + "shots":[[ + "text_block",[["text", eventtext]] + ]] } else: @@ -139,35 +142,308 @@ def get_legacy(project_location): for scene in eventtext.split("")[:-1]: scenename = scene[scene.find('"')+1:scene.replace('"'," ",1).find('"')] - scenetext = scene[scene.find('"')+2:-1] + scenetext = scene[scene.replace('"', " ", 1).find('"')+1:-1] - # Okay so we have both scene name and scene text. So it's - # time so send this data into the main data thingy, right? - # Wrong. Now we need to parse pointers to the shots, assets - # and other stuff. This file format gonna take a while. + data["scenes"][scenename] = { + "fraction":0.0, # Percentage + "position":eventpositon, + "size":eventsize, + "parent":"", # For when it's in a Frame (Event) + "shots":[[ + "text_block",[["text", scenetext]] + ]] + } + + # Parsing the text inside the scenes... OMG. Finding the SHOTS. + + for scenename in data["scenes"]: + + scenetext = data["scenes"][scenename]["shots"][0][1][0][1] + + # Okay so we have both scene name and scene text. So it's + # time so send this data into the main data thingy, right? + # Wrong. Now we need to parse pointers to the shots, assets + # and other stuff. This file format gonna take a while. + + # If you look into the history of this file on NotABug there + # Will be a version with a novel-long article here in the + # comments. I was toying with ideas of how to make stuff + # work. I will not change the whole system a bit from what + # I though there. (Using text pointers) and make it more like + # list of shot_block or text_block. Which both are just text. + # But one has a bit more metadata then the other. And inside + # which you can specify links, frases, images and simple text... + + # So first of all we need to break the text up into shots. + + shots = [] + + sa = scenetext.count("") # Shots amount + ts = scenetext # Copy of the scene text to butcher + + for s in range(sa): + + # If the first part of the scene is not a shot. + + if not ts.startswith(""): + shots.append([ + "text_block", [["text",ts[:ts.find("")]]] + ]) + + # Now we need to erase the part from the ts. + + ts = ts[ts.find("")+6:] + + # Now we can parse the shot itself. We need the name. + + if ts.count('"') > 1: + shotname = ts[ts.find('"')+1:ts.replace('"', " ", 1).find('"')] + ts = ts[ts.replace('"', " ", 1).find('"')+1:] + else: + shotname = "Unnamed" + + + + # Put it also into the list. + + shots.append([ + "shot_block", shotname, [["text",ts[:ts.find("")]]] + ]) + + # And erase it. + + ts = ts[ts.find("")+7:] + + shots.append([ + "text_block", [["text",ts]] + ]) + + + + # Now I want to get a fraction from a scene. + + shotsfractions = [] + + for shot in shots: + if shot[0] == "shot_block": - # I guess we should do it one by one. Using the technique - # from the Blender-Organizer. + # Let's see if it has a checklist. - # This step requires a huge concentration because a good - # amount of bugs can be created by not thinking about - # all kinds of ways that the user might input stuff into - # the story editor. + if os.path.exists(project_location\ + +"/rnd/"+scenename+"/"+shot[1]+"/shot.progress"): + + check = checklist.get_list(project_location+"/project.progress") + shotsfractions.append(check["fraction"]) + else: + + folder = project_location\ + +"/rnd/"+scenename+"/"+shot[1] + + try: + + if len(os.listdir(folder+"/rendered")) > 0: + shotsfractions.append(1.0) + + elif len(os.listdir(folder+"/test_rnd")) > 0: + shotsfractions.append(0.8) + + elif len(os.listdir(folder+"/opengl")) > 0: + shotsfractions.append(0.6) + + elif len(os.listdir(folder+"/storyboard")) > 0: + shotsfractions.append(0.4) + + elif len(os.listdir(folder+"/extra")) > 0: + shotsfractions.append(0.2) + except: + shotsfractions.append(0.0) + + # Writting parsed verions of the scenes. With all the shots + + data["scenes"][scenename]["shots"] = shots + + # Now that we have SHOTS Fractions we need a scene fraction. + + try: + data["scenes"][scenename]["fraction"] = \ + sum(shotsfractions) / len(shotsfractions) + except: + data["scenes"][scenename]["fraction"] = 0.0 + + # Now since we have shots and we have their factors. I'd like to do + # parsing of the text parts inside shots and texts between shots to + # find all the images, links and phrases. + + for scenename in data["scenes"]: + for shotnum, shot in enumerate(data["scenes"][scenename]["shots"]): + + # Our shot data could be either text_block ot shot_block + # and they are formatted a little bit differently. + + if shot[0] == "shot_block": + text = shot[2][0][1] + else: + text = shot[1][0][1] + + # Now keep in mind that similar stuff has to be done again + # when we saving the parsed text back + + textblock = [] + + # This requires some extreme cleverness. Since I already hate + # this file format. WHY IS IT SO COMPLICATED?! + + part = "" + skip = 0 + + for num, letter in enumerate(text): - # Basically the idea is to read the part of the story from - # beginning to end and gradually removing tags from it. - - # Oh no... I'ts harder then I thought. I think we will have - # to make quite an algorythm here. If I remove from - # the text. I just removed 6 characters. If I do that again - # later with it's another 6 characters. So any - # pointer system will be terrible with this kind of thing. - - # Also imagine typing while having this kind of system. - # On each new typed character. ALL the pointers should be - # off setted. Hm... I think here is where I take a nap. - # Because this decision should not be done quickly. I need - # to figure out how to store this data. + if num >= skip: + + if part.endswith(""): + + # putting the normal text in + if part[skip:].replace("", ""): + textblock.append([ + "text", part[skip:].replace("", "") + ]) + + # parsing the item + itempart = text[num:text[num:].find("")+num] + link = itempart[itempart.find('"')+1: + itempart.replace('"', " ", 1).find('"')] + + if link.startswith("/dev"): + link = link[4:] + + itemtext = itempart[itempart.replace('"', " ", 1).find('"')+1:] + + # puttin the link into the list + textblock.append([ + "link", link, itemtext + ]) + + # skiping to after the item + skip = text[num:].find("")+6 + part = "" + + # Images. With the <> + + elif part.endswith(""): + + # putting the normal text in + if part[skip:].replace("", ""): + textblock.append([ + "text", part[skip:].replace("", "") + ]) + + # parsing the item + link = text[num:text[num:].find("")+num] + + textblock.append([ + "image", link + ]) + + # skiping to after the item + skip = text[num:].find("")+7 + part = "" + + # Images. With the [] (a little older version but still + # should be supported by default) + + elif part.endswith("[image]"): + + # putting the normal text in + if part[skip:].replace("[image]", ""): + textblock.append([ + "text", part[skip:].replace("[image]", "") + ]) + + # parsing the item + link = text[num:text[num:].find("[/image]")+num] + + textblock.append([ + "image", link + ]) + + # skiping to after the item + skip = text[num:].find("[/image]")+7 + part = "" + + # Now let's figure out the frases. Because it has a + # text based thing in the beginning. Or maybe it's going + # to be anything that was before it? Hmm... + elif part.endswith(" - ["): + + # putting the normal text in + if part[skip:].replace(" - [", ""): + textblock.append([ + "text", part[skip:].replace(" - [", "") + ]) + + # I designed the - [ thing to type conversation + # easier. Example: + + # John - [Hello, World.] + + # This would be John saying the words "Hello, World." + # but with the inclusion of it became quite a + # problem. Because I would like John to be a link. + + # It ended up looking something like: + + #"/dev/chr/John"John - [Hello, World.] + + # This is a bit of a problem. Because any link that + # marked as is already in a textblock list. + + character = [] + + # If it's a link + + if textblock[-1][0] == "link": + character = textblock[-1] + del textblock[-1] + + # If it's just a text + + elif textblock[-1][0] == "text": + character = textblock[-1][1] + character = character[character.rfind("\n")+1:] + + if character: + textblock[-1][1] = textblock[-1][1].replace(character, "") + character = ["text", character] + + # Now let's get the frase + frase = text[num:text[num:].find("]")+num] + + # If any character. Put it into a textblock + + if character: + textblock.append([ + "frase", character, frase + ]) + + + # skiping to after the item + skip = text[num:].find("]") + part = "" + + else: + part = part + letter + if shot[0] == "shot_block": + data["scenes"][scenename]["shots"][shotnum][2] = textblock + else: + data["scenes"][scenename]["shots"][shotnum][1] = textblock + + # Okay this was event. LOL. This is a large function to parse them all. + # Crazy complex bastards. Anyway. It's over. And we have to only do the + # easy rest of it. Untill we will get to calculating the project. Because + # we need to filter out all scenes that are not in the main chain. + + + return data this = get_legacy("/home/vcs/Projects/Films/Shorts/MoriasRace") @@ -177,7 +453,7 @@ for i in this: for b in this[i]: print(" ", b, " { ") for c in this[i][b]: - print(" ", c ," : ", str(this[i][b][c])[:50]) + print(" ", c ," : ", this[i][b][c]) print("}") else: - print(i, " : " ,this[i]) \ No newline at end of file + print(i, " : " ,this[i])