mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-06-10 23:42:33 +00:00
command line help fix, show dependet character ids in basic tag info
This commit is contained in:
@@ -160,6 +160,7 @@ import java.util.Date;
|
||||
import java.util.EmptyStackException;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
@@ -262,6 +263,9 @@ public final class SWF implements SWFContainerItem, Timelined {
|
||||
@Internal
|
||||
private Map<Integer, CharacterTag> characters;
|
||||
|
||||
@Internal
|
||||
private Map<Integer, Set<Integer>> dependentCharacters;
|
||||
|
||||
@Internal
|
||||
private List<ABCContainerTag> abcList;
|
||||
|
||||
@@ -388,6 +392,71 @@ public final class SWF implements SWFContainerItem, Timelined {
|
||||
return characters;
|
||||
}
|
||||
|
||||
public Map<Integer, Set<Integer>> getDependentCharacters() {
|
||||
if (dependentCharacters == null) {
|
||||
synchronized (this) {
|
||||
if (dependentCharacters == null) {
|
||||
Map<Integer, Set<Integer>> dep = new HashMap<>();
|
||||
for (Tag tag : tags) {
|
||||
if (tag instanceof CharacterTag) {
|
||||
int characterId = ((CharacterTag) tag).getCharacterId();
|
||||
Set<Integer> needed = new HashSet<>();
|
||||
tag.getNeededCharacters(needed);
|
||||
for (Integer needed1 : needed) {
|
||||
Set<Integer> s = dep.get(needed1);
|
||||
if (s == null) {
|
||||
s = new HashSet<>();
|
||||
dep.put(needed1, s);
|
||||
}
|
||||
|
||||
s.add(characterId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependentCharacters = dep;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return dependentCharacters;
|
||||
}
|
||||
|
||||
public Set<Integer> getDependentCharacters(int characterId) {
|
||||
Set<Integer> visited = new HashSet<>();
|
||||
|
||||
Set<Integer> dependents2 = new LinkedHashSet<>();
|
||||
Set<Integer> deps = getDependentCharacters().get(characterId);
|
||||
if (deps != null) {
|
||||
dependents2.addAll(deps);
|
||||
}
|
||||
|
||||
while (visited.size() != dependents2.size()) {
|
||||
for (int chId : dependents2) {
|
||||
if (!visited.contains(chId)) {
|
||||
visited.add(chId);
|
||||
if (getCharacters().containsKey(chId)) {
|
||||
deps = getDependentCharacters().get(chId);
|
||||
if (deps != null) {
|
||||
dependents2.addAll(deps);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Set<Integer> dependents = new LinkedHashSet<>();
|
||||
for (Integer chId : dependents2) {
|
||||
if (getCharacters().containsKey(chId)) {
|
||||
dependents.add(chId);
|
||||
}
|
||||
}
|
||||
|
||||
return dependents;
|
||||
}
|
||||
|
||||
public CharacterTag getCharacter(int characterId) {
|
||||
return getCharacters().get(characterId);
|
||||
}
|
||||
|
||||
@@ -660,17 +660,14 @@ public abstract class Tag implements NeedsCharacters, Exportable, Serializable {
|
||||
tagInfo.addInfo("general", "neededCharacters", Helper.joinStrings(needed, ", "));
|
||||
}
|
||||
|
||||
/* todo: add dependent characters, getDependentCharacters method is currently slow
|
||||
if (this instanceof CharacterTag) {
|
||||
Set<Integer> dependent = new LinkedHashSet<>();
|
||||
int characterId = ((CharacterTag) this).getCharacterId();
|
||||
dependent.add(characterId);
|
||||
getDependentCharacters(dependent);
|
||||
dependent.remove(characterId);
|
||||
|
||||
if (dependent.size() > 0) {
|
||||
tagInfo.addInfo("general", "dependentCharacters", Helper.joinStrings(dependent, ", "));
|
||||
}
|
||||
}*/
|
||||
if (this instanceof CharacterTag) {
|
||||
int characterId = ((CharacterTag) this).getCharacterId();
|
||||
Set<Integer> dependent = swf.getDependentCharacters(characterId);
|
||||
if (dependent != null) {
|
||||
if (dependent.size() > 0) {
|
||||
tagInfo.addInfo("general", "dependentCharacters", Helper.joinStrings(dependent, ", "));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -117,6 +117,7 @@ public class Timeline {
|
||||
ensureInitialized();
|
||||
frames.add(frame);
|
||||
maxDepth = getMaxDepthInternal();
|
||||
calculateMaxDepthFrames();
|
||||
}
|
||||
|
||||
public AS2Package getAS2RootPackage() {
|
||||
@@ -343,14 +344,7 @@ public class Timeline {
|
||||
|
||||
// todo: enable again after TweenDetector.detectRanges implemented
|
||||
//detectTweens();
|
||||
for (int d = 1; d <= maxDepth; d++) {
|
||||
for (int f = frames.size() - 1; f >= 0; f--) {
|
||||
if (frames.get(f).layers.get(d) != null) {
|
||||
depthMaxFrame.put(d, f + 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
calculateMaxDepthFrames();
|
||||
|
||||
createASPackages();
|
||||
if (parentTag == null) {
|
||||
@@ -397,6 +391,18 @@ public class Timeline {
|
||||
}
|
||||
}
|
||||
|
||||
private void calculateMaxDepthFrames() {
|
||||
depthMaxFrame.clear();
|
||||
for (int d = 1; d <= maxDepth; d++) {
|
||||
for (int f = frames.size() - 1; f >= 0; f--) {
|
||||
if (frames.get(f).layers.get(d) != null) {
|
||||
depthMaxFrame.put(d, f + 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void createASPackages() {
|
||||
for (ASMSource asm : asmSources) {
|
||||
if (asm instanceof DoInitActionTag) {
|
||||
|
||||
Reference in New Issue
Block a user