예제 #1
0
        public static void SaveEntity(string path, FindLogic.Combo.ComboInfo info,
                                      ulong entityGuid)
        {
            FindLogic.Combo.EntityInfoNew entityInfo = info.Entities[entityGuid];

            Entity.OverwatchEntity entity = new Entity.OverwatchEntity(entityInfo, info);

            string entityDir  = Path.Combine(path, "Entities", entityInfo.GetName());
            string outputFile = Path.Combine(entityDir, entityInfo.GetName() + $".{entity.Extension}");

            CreateDirectoryFromFile(outputFile);

            using (Stream entityOutputStream = File.OpenWrite(outputFile)) {
                entityOutputStream.SetLength(0);
                entity.Write(entityOutputStream);
            }

            if (!info.SaveConfig.SaveAnimationEffects)
            {
                return;
            }
            if (entityInfo.Model == 0)
            {
                return;
            }
            foreach (ulong animation in entityInfo.Animations)
            {
                SaveAnimationEffectReference(entityDir, info, animation, entityInfo.Model);
            }
        }
예제 #2
0
파일: Entity.cs 프로젝트: Toocanzs/OWLib
            public void Write(Stream output, FindLogic.Combo.EntityInfoNew entity, FindLogic.Combo.ComboInfo info)
            {
                using (BinaryWriter writer = new BinaryWriter(output)) {
                    writer.Write(new string(Identifier));
                    writer.Write(VersionMajor);
                    writer.Write((ushort)1);  // todo

                    writer.Write(entity.GetNameIndex());
                    if (entity.Model != 0)
                    {
                        FindLogic.Combo.ModelInfoNew modelInfo = info.Models[entity.Model];
                        writer.Write(modelInfo.GetName());
                    }
                    else
                    {
                        writer.Write("null");
                    }
                    if (entity.Effect != 0)
                    {
                        FindLogic.Combo.EffectInfoCombo effectInfo = info.Effects[entity.Effect];
                        writer.Write(effectInfo.GetName());
                    }
                    else
                    {
                        writer.Write("null");
                    }
                    writer.Write(GUID.Index(entity.GUID));
                    writer.Write(GUID.Index(entity.Model));
                    writer.Write(GUID.Index(entity.Effect));

                    if (entity.Children == null)
                    {
                        writer.Write(0);
                        return;
                    }
                    writer.Write(entity.Children.Count(x => x.GUID != 0));
                    foreach (FindLogic.Combo.ChildEntityReferenceNew childEntityReference in entity.Children.Where(x => x.GUID != 0))
                    {
                        FindLogic.Combo.EntityInfoNew childEntityInfo = info.Entities[childEntityReference.GUID];

                        writer.Write(childEntityInfo.GetName());
                        writer.Write(childEntityReference.Hardpoint);
                        writer.Write(childEntityReference.Variable);
                        writer.Write(GUID.Index(childEntityReference.Hardpoint));
                        writer.Write(GUID.Index(childEntityReference.Variable));
                        if (childEntityReference.Hardpoint != 0)
                        {
                            writer.Write(Model.OWModelWriter14.IdToString("hardpoint", GUID.Index(childEntityReference.Hardpoint)));
                        }
                        else
                        {
                            writer.Write("null"); // erm, k
                        }
                    }
                }
            }
예제 #3
0
            public void Write(Stream stream)
            {
                using (BinaryWriter writer = new BinaryWriter(stream)) {
                    writer.Write(Extension);  // type identifier
                    writer.Write(VersionMajor);
                    writer.Write(VersionMinor);

                    writer.Write(Entity.GetNameIndex());
                    if (Entity.Model != 0)
                    {
                        FindLogic.Combo.ModelInfoNew modelInfo = Info.Models[Entity.Model];
                        writer.Write(modelInfo.GetName());
                    }
                    else
                    {
                        writer.Write("null");
                    }
                    if (Entity.Effect != 0)
                    {
                        FindLogic.Combo.EffectInfoCombo effectInfo = Info.Effects[Entity.Effect];
                        writer.Write(effectInfo.GetName());
                    }
                    else
                    {
                        writer.Write("null");
                    }
                    writer.Write(teResourceGUID.Index(Entity.GUID));
                    writer.Write(teResourceGUID.Index(Entity.Model));
                    writer.Write(teResourceGUID.Index(Entity.Effect));

                    if (Entity.Children == null)
                    {
                        writer.Write(0);
                        return;
                    }
                    writer.Write(Entity.Children.Count(x => x.GUID != 0));
                    foreach (FindLogic.Combo.ChildEntityReferenceNew childEntityReference in Entity.Children.Where(x => x.GUID != 0))
                    {
                        FindLogic.Combo.EntityInfoNew childEntityInfo = Info.Entities[childEntityReference.GUID];

                        writer.Write(childEntityInfo.GetName());
                        writer.Write(childEntityReference.Hardpoint);
                        writer.Write(childEntityReference.Variable);
                        writer.Write(teResourceGUID.Index(childEntityReference.Hardpoint));
                        writer.Write(teResourceGUID.Index(childEntityReference.Variable));
                        if (childEntityReference.Hardpoint != 0)
                        {
                            writer.Write(OverwatchModel.IdToString("hardpoint", teResourceGUID.Index(childEntityReference.Hardpoint)));
                        }
                        else
                        {
                            writer.Write("null"); // erm, k
                        }
                    }
                }
            }
예제 #4
0
파일: Combo.cs 프로젝트: Toocanzs/OWLib
        public static void SaveEntity(ICLIFlags flags, string path, FindLogic.Combo.ComboInfo info,
                                      ulong entity)
        {
            FindLogic.Combo.EntityInfoNew entityInfo   = info.Entities[entity];
            Entity.OWEntityWriter         entityWriter = new Entity.OWEntityWriter();
            string entityDir  = Path.Combine(path, "Entities", entityInfo.GetName());
            string outputFile = Path.Combine(entityDir, entityInfo.GetName() + entityWriter.Format);

            CreateDirectoryFromFile(outputFile);

            using (Stream entityOutputStream = File.OpenWrite(outputFile)) {
                entityOutputStream.SetLength(0);
                entityWriter.Write(entityOutputStream, entityInfo, info);
            }

            if (!info.SaveConfig.SaveAnimationEffects)
            {
                return;
            }
            foreach (ulong animation in entityInfo.Animations)
            {
                SaveAnimationEffectReference(flags, entityDir, info, animation, entityInfo.Model);
            }
        }
예제 #5
0
파일: Effect.cs 프로젝트: Toocanzs/OWLib
            // combo
            public void Write(BinaryWriter writer, FindLogic.Combo.EffectInfoCombo effectInfo, FindLogic.Combo.ComboInfo info, Dictionary <ulong, HashSet <FindLogic.Combo.VoiceLineInstanceInfo> > svceLines)
            {
                writer.Write(new string(Identifier));
                writer.Write(VersionMajor);
                writer.Write(VersionMinor);

                EffectParser.EffectInfo effect = effectInfo.Effect;

                writer.Write(GUID.Index(effect.GUID));
                writer.Write(effect.EffectLength);

                writer.Write(effect.DMCEs.Count);
                writer.Write(effect.CECEs.Count);
                writer.Write(effect.NECEs.Count);
                writer.Write(effect.RPCEs.Count);
                writer.Write(effect.FECEs.Count);
                writer.Write(effect.OSCEs.Count);
                writer.Write(effect.SVCEs.Count);

                foreach (EffectParser.DMCEInfo dmceInfo in effect.DMCEs)
                {
                    WriteTime(writer, dmceInfo.PlaybackInfo);
                    writer.Write(dmceInfo.Animation);
                    writer.Write(dmceInfo.Material);
                    writer.Write(dmceInfo.Model);
                    FindLogic.Combo.ModelInfoNew modelInfo = info.Models[dmceInfo.Model];
                    writer.Write($"Models\\{modelInfo.GetName()}\\{modelInfo.GetNameIndex()}.owmdl");
                    if (dmceInfo.Animation == 0)
                    {
                        writer.Write("null");
                    }
                    else
                    {
                        FindLogic.Combo.AnimationInfoNew animationInfo = info.Animations[dmceInfo.Animation];
                        writer.Write($"Models\\{modelInfo.GetName()}\\{Model.AnimationEffectDir}\\{animationInfo.GetNameIndex()}\\{animationInfo.GetNameIndex()}.owanim");
                    }
                }

                foreach (EffectParser.CECEInfo ceceInfo in effect.CECEs)
                {
                    WriteTime(writer, ceceInfo.PlaybackInfo);
                    writer.Write((byte)ceceInfo.Action);
                    writer.Write(ceceInfo.Animation);
                    writer.Write(ceceInfo.EntityVariable);
                    writer.Write(GUID.Index(ceceInfo.EntityVariable));
                    if (ceceInfo.Animation != 0)
                    {
                        FindLogic.Combo.AnimationInfoNew animationInfo = info.Animations[ceceInfo.Animation];
                        writer.Write($"{Model.AnimationEffectDir}\\{animationInfo.GetNameIndex()}\\{animationInfo.GetNameIndex()}.owanim");
                    }
                    else
                    {
                        writer.Write("null");
                    }
                }

                foreach (EffectParser.NECEInfo neceInfo in effect.NECEs)
                {
                    WriteTime(writer, neceInfo.PlaybackInfo);
                    writer.Write(neceInfo.GUID);
                    writer.Write(GUID.Index(neceInfo.Variable));
                    FindLogic.Combo.EntityInfoNew entityInfo = info.Entities[neceInfo.GUID];

                    writer.Write($"Entities\\{entityInfo.GetName()}\\{entityInfo.GetName()}.owentity");
                }

                foreach (EffectParser.RPCEInfo rpceInfo in effect.RPCEs)
                {
                    WriteTime(writer, rpceInfo.PlaybackInfo);
                    writer.Write(rpceInfo.Model);
                    // todo: make the materials work
                    writer.Write(rpceInfo.Material);
                    FindLogic.Combo.ModelInfoNew modelInfo = info.Models[rpceInfo.Model];
                    //writer.Write(rpceInfo.TextureDefiniton);

                    writer.Write($"Models\\{modelInfo.GetName()}\\{modelInfo.GetName()}.owmdl");
                }

                foreach (EffectParser.SVCEInfo svceInfo in effect.SVCEs)
                {
                    WriteTime(writer, svceInfo.PlaybackInfo);
                    writer.Write(GUID.Index(svceInfo.VoiceStimulus));
                    if (svceLines.ContainsKey(svceInfo.VoiceStimulus))
                    {
                        HashSet <FindLogic.Combo.VoiceLineInstanceInfo> lines = svceLines[svceInfo.VoiceStimulus];
                        writer.Write(lines.Count);

                        foreach (FindLogic.Combo.VoiceLineInstanceInfo voiceLineInstance in lines)
                        {
                            writer.Write(voiceLineInstance.SoundFiles.Count);
                            foreach (ulong soundFile in voiceLineInstance.SoundFiles)
                            {
                                FindLogic.Combo.SoundFileInfo soundFileInfo =
                                    info.VoiceSoundFiles[soundFile];
                                writer.Write($"Sounds\\{soundFileInfo.GetNameIndex()}.ogg");
                            }
                        }
                    }
                    else
                    {
                        writer.Write(0);
                    }
                }

                // foreach (EffectParser.FECEInfo feceInfo in effect.FECEs) {
                //     WriteTime(writer, feceInfo.PlaybackInfo);
                //     writer.Write(feceInfo.GUID);
                // }
                //
                // foreach (EffectParser.OSCEInfo osceInfo in effect.OSCEs) {
                //     // this needs preprocessing, get the sounds
                //     WriteTime(writer, osceInfo.PlaybackInfo);
                //     writer.Write(osceInfo.Sound);
                // }
            }
예제 #6
0
 public OverwatchEntity(FindLogic.Combo.EntityInfoNew entity, FindLogic.Combo.ComboInfo info)
 {
     Info   = info;
     Entity = entity;
 }
예제 #7
0
파일: Effect.cs 프로젝트: ipud2/OWLib
            protected void WriteEffect(BinaryWriter writer)
            {
                writer.Write("oweffect");
                writer.Write(EffectVersionMajor);
                writer.Write(EffectVersionMinor);

                EffectParser.EffectInfo effect = EffectInfo.Effect;

                writer.Write(teResourceGUID.Index(effect.GUID));
                writer.Write(effect.EffectLength);

                writer.Write(effect.DMCEs.Count);
                writer.Write(effect.CECEs.Count);
                writer.Write(effect.NECEs.Count);
                writer.Write(effect.RPCEs.Count);
                writer.Write(effect.FECEs.Count);
                writer.Write(effect.OSCEs.Count);
                writer.Write(effect.SVCEs.Count);

                foreach (EffectParser.DMCEInfo dmceInfo in effect.DMCEs)
                {
                    WriteTime(writer, dmceInfo.PlaybackInfo);
                    writer.Write(dmceInfo.Animation);
                    writer.Write(dmceInfo.Material);
                    writer.Write(dmceInfo.Model);
                    FindLogic.Combo.ModelInfoNew modelInfo = Info.Models[dmceInfo.Model];
                    writer.Write($"Models\\{modelInfo.GetName()}\\{modelInfo.GetNameIndex()}.owmdl");
                    if (dmceInfo.Animation == 0)
                    {
                        writer.Write("null");
                    }
                    else
                    {
                        FindLogic.Combo.AnimationInfoNew animationInfo = Info.Animations[dmceInfo.Animation];
                        writer.Write($"Models\\{modelInfo.GetName()}\\{OverwatchAnimationEffect.AnimationEffectDir}\\{animationInfo.GetNameIndex()}\\{animationInfo.GetNameIndex()}.owanim");
                    }
                }

                foreach (EffectParser.CECEInfo ceceInfo in effect.CECEs)
                {
                    WriteTime(writer, ceceInfo.PlaybackInfo);
                    writer.Write((byte)ceceInfo.Action);
                    writer.Write(ceceInfo.Animation);
                    writer.Write(ceceInfo.Identifier);
                    writer.Write(teResourceGUID.Index(ceceInfo.Identifier));
                    if (ceceInfo.Animation != 0)
                    {
                        FindLogic.Combo.AnimationInfoNew animationInfo = Info.Animations[ceceInfo.Animation];
                        writer.Write($"{OverwatchAnimationEffect.AnimationEffectDir}\\{animationInfo.GetNameIndex()}\\{animationInfo.GetNameIndex()}.owanim");
                    }
                    else
                    {
                        writer.Write("null");
                    }
                }

                foreach (EffectParser.NECEInfo neceInfo in effect.NECEs)
                {
                    WriteTime(writer, neceInfo.PlaybackInfo);
                    writer.Write(neceInfo.GUID);
                    writer.Write(teResourceGUID.Index(neceInfo.Identifier));
                    FindLogic.Combo.EntityInfoNew entityInfo = Info.Entities[neceInfo.GUID];

                    writer.Write($"Entities\\{entityInfo.GetName()}\\{entityInfo.GetName()}.owentity");
                }

                foreach (EffectParser.RPCEInfo rpceInfo in effect.RPCEs)
                {
                    WriteTime(writer, rpceInfo.PlaybackInfo);
                    writer.Write(rpceInfo.Model);
                    // todo: make the materials work
                    writer.Write(rpceInfo.Material);
                    FindLogic.Combo.ModelInfoNew modelInfo = Info.Models[rpceInfo.Model];
                    //writer.Write(rpceInfo.TextureDefiniton);

                    writer.Write($"Models\\{modelInfo.GetName()}\\{modelInfo.GetName()}.owmdl");
                }

                foreach (EffectParser.SVCEInfo svceInfo in effect.SVCEs)
                {
                    WriteTime(writer, svceInfo.PlaybackInfo);
                    writer.Write(teResourceGUID.Index(svceInfo.VoiceStimulus));
                    if (VoiceStimuli.ContainsKey(svceInfo.VoiceStimulus))
                    {
                        HashSet <FindLogic.Combo.VoiceLineInstanceInfo> lines = VoiceStimuli[svceInfo.VoiceStimulus];
                        writer.Write(lines.Count);

                        foreach (FindLogic.Combo.VoiceLineInstanceInfo voiceLineInstance in lines)
                        {
                            writer.Write(voiceLineInstance.SoundFiles.Count);
                            foreach (ulong soundFile in voiceLineInstance.SoundFiles)
                            {
                                FindLogic.Combo.SoundFileInfo soundFileInfo =
                                    Info.VoiceSoundFiles[soundFile];
                                writer.Write($"Sounds\\{soundFileInfo.GetNameIndex()}.ogg");
                            }
                        }
                    }
                    else
                    {
                        writer.Write(0);
                    }
                }
            }