static void Main(string[] args)
    {
        Door       sideDoor    = new Door("Side Door");
        Decoration photo       = new Decoration("Awkward Family Portrait");
        Decoration antiqueVase = new Decoration("Antique Vase", 5, true);

        Objs <Decoration> decorations = new Objs <Decoration>();

        decorations.Add(photo);
        decorations.Add(antiqueVase);

        foreach (Decoration deco in decorations)
        {
            Console.WriteLine(deco);
            while (deco.durability > 0)
            {
                deco.Break();
            }
        }

        Console.WriteLine("------------");

        Objs <IInteractive> interactables = new Objs <IInteractive>();

        interactables.Add(sideDoor);
        interactables.Add(photo);
        interactables.Add(antiqueVase);

        foreach (IInteractive obj in interactables)
        {
            Console.WriteLine(obj);
            obj.Interact();
        }
    }
Пример #2
0
        public void Top(object sender, EventArgs e)
        {
            IDrawObj obj = _selectedObjs[0];

            Objs.Remove(obj);
            Objs.Add(obj);
            obj.Invalidate();
        }
Пример #3
0
        private IDrawObj CloneDrawObj(IDrawObj origObj)
        {
            IDrawObj newObj = (IDrawObj)origObj.Clone();

            newObj.Parant = Container;
            _nameManager.CreateName(newObj);
            newObj.LoadInitializationEvent();
            Objs.Add(newObj);
            newObj.Invalidate();
            return(newObj);
        }
Пример #4
0
        private void UpdateObjects()
        {
            foreach (IGameObj o in DeadObjs)
            {
                o.Die(this);
                Objs.Remove(o);
            }
            DeadObjs.Clear();

            foreach (IGameObj o in NewObjs)
            {
                Objs.Add(o);
            }
            NewObjs.Clear();
        }
Пример #5
0
 // Crap, when must this happen?
 // It can happen whenever Objs is the current state... which is thoretically always.
 // This will nuke the particles though.
 // This is actually pretty close to correct.
 public void SetLevel(int level)
 {
     UpdateObjects();
     Objs.Remove(Player);
     Levels[CurrentLevel].Objs = Objs;
     // This is PROBABLY right, but I'm not sure.
     CurrentLevel = level;
     Objs         = Levels[CurrentLevel].Objs;
     Objs.Add(Player);
     NewObjs.Clear();
     DeadObjs.Clear();
     Particles.Clear();
     NewParticles.Clear();
     DeadParticles.Clear();
     UpdateCollisionTree();
 }
Пример #6
0
        /// <summary>
        /// Update all game objects
        /// </summary>
        public override void Update()
        {
            // Update GameObjects in world
            foreach (GameObject obj in Objs)
            {
                obj.Update();
            }

            // Add queued objects to world
            for (int i = CreationQueue.Count - 1; i > -1; i--)
            {
                Objs.Add(CreationQueue[i]);
                CreationQueue.RemoveAt(i);
            }

            _mouseObs.Update();
        }
Пример #7
0
        /// <summary>
        /// Remove objects from creation queue and
        /// add to object registry
        /// </summary>
        public void UnqueueObjects()
        {
            for (int i = CreationQueue.Count - 1; i > -1; i--)
            {
                Objs.Add(CreationQueue[i]);

                // Add to decayable registry and sort registry by time to live
                IDecay decay = CreationQueue[i] as IDecay;
                if (decay != null)
                {
                    Decayables.Add(decay);
                    Decayables = Decayables.OrderByDescending(d => d.TTL).ToList();
                }

                CreationQueue.RemoveAt(i);
            }
        }
Пример #8
0
        public static void LoadInstance_Encounter()
        {
            _InstanceEncounter = new Dictionary <uint, List <Instance_Encounter> >();

            IList <Instance_Encounter> InstanceEncounter = Database.SelectAllObjects <Instance_Encounter>();

            foreach (Instance_Encounter Obj in InstanceEncounter)
            {
                List <Instance_Encounter> Objs;
                if (!_InstanceEncounter.TryGetValue(Obj.InstanceID, out Objs))
                {
                    Objs = new List <Instance_Encounter>();
                    _InstanceEncounter.Add(Obj.InstanceID, Objs);
                }

                Objs.Add(Obj);
            }
            Log.Success("WorldMgr", "Loaded " + _InstanceEncounter.Count + "Instance_Encounters");
        }
Пример #9
0
        public static void LoadInstance_Boss_Creatures()
        {
            _InstanceBossSpawns = new Dictionary <uint, List <Instance_Boss_Spawn> >();

            IList <Instance_Boss_Spawn> InstanceSpawns = Database.SelectAllObjects <Instance_Boss_Spawn>();

            foreach (Instance_Boss_Spawn Obj in InstanceSpawns)
            {
                List <Instance_Boss_Spawn> Objs;
                if (!_InstanceBossSpawns.TryGetValue(Obj.InstanceID, out Objs))
                {
                    Objs = new List <Instance_Boss_Spawn>();
                    _InstanceBossSpawns.Add(Obj.InstanceID, Objs);
                }

                Objs.Add(Obj);
            }
            Log.Success("WorldMgr", "Loaded " + _InstanceBossSpawns.Count + "Instance_Boss_Spawn");
        }
Пример #10
0
        public static void LoadPQuest_Creatures()
        {
            _PQuest_Spawns = new Dictionary <uint, List <PQuest_Spawn> >();

            IList <PQuest_Spawn> PQSpawns = Database.SelectAllObjects <PQuest_Spawn>();

            foreach (PQuest_Spawn Obj in PQSpawns)
            {
                List <PQuest_Spawn> Objs;
                if (!_PQuest_Spawns.TryGetValue(Obj.Objective, out Objs))
                {
                    Objs = new List <PQuest_Spawn>();
                    _PQuest_Spawns.Add(Obj.Objective, Objs);
                }

                Objs.Add(Obj);
            }

            Log.Success("WorldMgr", "Loaded " + PQSpawns.Count + " Public Quest Spawns");
        }
Пример #11
0
        public static void LoadPQuest_Objective()
        {
            _PQuest_Objectives = new Dictionary <uint, List <PQuest_Objective> >();

            IList <PQuest_Objective> PObjectives = Database.SelectObjects <PQuest_Objective>("Type != 0");

            foreach (PQuest_Objective Obj in PObjectives)
            {
                List <PQuest_Objective> Objs;
                if (!_PQuest_Objectives.TryGetValue(Obj.Entry, out Objs))
                {
                    Objs = new List <PQuest_Objective>();
                    _PQuest_Objectives.Add(Obj.Entry, Objs);
                }

                Objs.Add(Obj);
            }

            Log.Success("WorldMgr", "Loaded " + PObjectives.Count + " Public Quest Objectives");
        }
Пример #12
0
        /// <summary>添加对象文件</summary>
        /// <param name="path"></param>
        /// <param name="filter"></param>
        /// <param name="allSub"></param>
        public void AddObjs(String path, String filter = null, Boolean allSub = false)
        {
            path = path.GetFullPath();
            if (!Directory.Exists(path))
            {
                return;
            }

            if (filter.IsNullOrEmpty())
            {
                filter = "*.o";
            }
            //var opt = allSub ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly;
            foreach (var item in path.AsDirectory().GetAllFiles(filter, allSub))
            {
                // 不包含,直接增加
                if (!Objs.Contains(item.FullName))
                {
                    var lib = new LibFile(item.FullName);
                    WriteLog("发现对象文件:{0, -12} {1}".F(lib.Name, item.FullName));
                    Objs.Add(item.FullName);
                }
            }
        }
Пример #13
0
        /// <summary>编译所有文件</summary>
        /// <returns></returns>
        public Int32 CompileAll()
        {
            Objs.Clear();
            var count = 0;

            if (Files.Count == 0)
            {
                return(0);
            }

            // 计算根路径,输出的对象文件以根路径下子路径的方式存放
            GetRoot();

            // 提前创建临时目录
            var obj  = GetObjPath(null);
            var list = new List <String>();

            var cmd  = GetCompileCommand(true);
            var cmd2 = GetCompileCommand(false);

            Console.Write("编译参数:");
            Console.ForegroundColor = ConsoleColor.Magenta;
            if (Files.Any(e => e.EndsWithIgnoreCase(".cpp", ".cxx")))
            {
                Console.WriteLine(cmd);
            }
            if (Files.Any(e => e.EndsWithIgnoreCase(".c")))
            {
                Console.WriteLine(cmd2);
            }
            Console.ResetColor();

            var asm = 0;

            foreach (var item in Files)
            {
                var rs = 0;
                var sw = new Stopwatch();
                sw.Start();
                switch (Path.GetExtension(item).ToLower())
                {
                case ".c":
                    rs = Compile(cmd2, item);
                    break;

                case ".cpp":
                case ".cxx":
                    rs = Compile(cmd, item);
                    break;

                case ".s":
                    rs = Assemble(item, asm == 0);
                    if (rs != -2)
                    {
                        asm++;
                    }
                    break;

                default:
                    break;
                }

                sw.Stop();

                if (rs == 0 || rs == -1)
                {
                    var fi   = item;
                    var root = _Root;
                    if (fi.StartsWith(root))
                    {
                        fi = fi.Substring(root.Length);
                    }
                    Console.Write("编译:{0}\t", fi);
                    var old = Console.ForegroundColor;
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.WriteLine("\t {0:n0}毫秒", sw.ElapsedMilliseconds);
                    Console.ForegroundColor = old;
                }

                if (rs <= 0)
                {
                    if (!Preprocess)
                    {
                        //var fi = obj.CombinePath(Path.GetFileNameWithoutExtension(item) + ".o");
                        var fi = GetObjPath(item) + ".o";
                        list.Add(fi);
                    }
                }
            }

            Console.WriteLine("等待编译完成:");
            var left = 0;

            try
            {
                // 如果外部把编译结果输出到文本文件,那么这里会抛出异常
                left = Console.CursorLeft;
            }
            catch { }
            var list2 = new List <String>(list);
            var end   = DateTime.Now.AddSeconds(10);
            var fs    = 0;

            while (fs < Files.Count)
            {
                for (var i = list2.Count - 1; i >= 0; i--)
                {
                    if (File.Exists(list[i]))
                    {
                        fs++;
                        list2.RemoveAt(i);
                    }
                }
                try
                {
                    // 如果外部把编译结果输出到文本文件,那么这里会抛出异常
                    Console.CursorLeft = left;
                }
                catch
                {
                    Console.WriteLine();
                }
                Console.Write("\t {0}/{1} = {2:p}", fs, Files.Count, (Double)fs / Files.Count);

                if (DateTime.Now > end)
                {
                    Console.Write(" 等待超时!");
                    break;
                }
                Thread.Sleep(500);
            }
            Console.WriteLine();

            for (var i = 0; i < list.Count; i++)
            {
                if (File.Exists(list[i]))
                {
                    count++;
                    Objs.Add(list[i]);
                }
            }

            return(count);
        }
Пример #14
0
        public void analyzeCommands()
        {
            string currentFlag     = "";
            bool   processingFiles = false;

            foreach (string word in words)
            {
                if (word.StartsWith("/") || word.StartsWith("-"))
                {
                    if (word.Contains(flag_dll) || word.Contains(flag_dll.ToUpper()))
                    {
                        isDll = true;
                    }
                    else if (word.Contains(flag_exe) || word.Contains(flag_exe.ToUpper()))
                    {
                        isExe = true;
                    }
                    else if (word.Contains(flag_out) || word.Contains(flag_out.ToUpper()))
                    {
                        Output = word.Substring(flag_out.Length + 1);
                        Options.Add(new KeyValuePair <string, string>(flag_out, Output));
                        currentFlag = flag_out;
                    }
                    else if (word.Contains(flag_def) || word.Contains(flag_def.ToUpper()))
                    {
                        Def = word.Substring(flag_def.Length + 1);
                        Options.Add(new KeyValuePair <string, string>(flag_def, Def));
                        currentFlag = flag_def;
                    }
                    else if (word.Contains(flag_entry) || word.Contains(flag_entry.ToUpper()))
                    {
                        Entry = word.Substring(flag_entry.Length + 1);
                        Options.Add(new KeyValuePair <string, string>(flag_entry, Entry));
                        currentFlag = flag_entry;
                    }
                    else
                    {
                        Options.Add(new KeyValuePair <string, string>(word, Entry));
                    }
                }
                else if (word.Contains(".obj"))
                {
                    Objs.Add(word);
                    processingFiles = true;
                }
                else if (word.Contains(".lib"))
                {
                    Libs.Add(word);
                    processingFiles = true;
                }
                else if (word.Contains(".res"))
                {
                }
                else if (currentFlag != "")
                {
                }
                else
                {
                    //Unrecognized command
                }

                if (word.ToLower().Equals("link") || word.ToLower().Equals("link.exe"))
                {
                }
                else if (!processingFiles)
                {
                    if (!word.Equals(""))
                    {
                        LinkOptionsLiteral += word + " ";
                        LinkOptionsLiteral_Words.Add(word);
                    }
                }
            }
            LinkOptionsLiteral = LinkOptionsLiteral.Trim();
        }
Пример #15
0
 public void Add(IGameObj o)
 {
     Objs.Add(o);
 }
Пример #16
0
        public void ParseObj(Boolean debug)
        {
            var map = ".map";

            // 调试版
            if (debug)
            {
                map = "D" + map;
            }

            // 找到映射文件
            var mp = "List".AsDirectory().GetAllFiles("*" + map).FirstOrDefault();

            if (mp == null || !mp.Exists)
            {
                return;
            }

            Console.WriteLine(mp.FullName);
            var name = mp.Name.TrimEnd(".map");

            // 读取所有需要用到的对象文件
            var txt  = File.ReadAllText(mp.FullName).Substring("Library Member Name", "Library Totals");
            var ns   = txt.Trim().Split("\r\n");
            var objs = ns.Select(e => e.Split().Last()).Where(e => e.EndsWith(".o")).ToArray();

            // 找到原始对象文件
            var list = new List <String>();

            foreach (var obj in objs)
            {
                // 注意,不同目录可能有同名对象文件,所以需要同时在两个目录里面找
                var fs = FindObjs(obj, debug);
                if (fs.Length > 0)
                {
                    foreach (var item in fs)
                    {
                        // 无法识别需要哪个同名文件,全部加入
                        if (!list.Contains(item))
                        {
                            list.Add(item);
                        }
                    }
                }
            }

            Console.WriteLine("objs={0} list={1}", objs.Length, list.Count);

            // 引入基础库以及核心库的全部对象
            var bs = Root.CombinePath("Tool/Obj");

            if (debug)
            {
                bs += "D";
            }
            foreach (var item in bs.CombinePath("Core").AsDirectory().GetAllFiles("*.o"))
            {
                if (!list.Contains(item.FullName))
                {
                    list.Add(item.FullName);
                }
            }
            foreach (var item in bs.CombinePath("Kernel").AsDirectory().GetAllFiles("*.o"))
            {
                if (!list.Contains(item.FullName))
                {
                    list.Add(item.FullName);
                }
            }

            list.Sort();

            //Objs = list;

            // 链接打包
            name = "SmartOS";
            if (debug)
            {
                name += "D";
            }
            var lib = Temp.CombinePath(name + ".lib");

            BuildLib(lib, list);
            Objs.Add(lib);
        }
Пример #17
0
 public void AddGameObj(IGameObj g)
 {
     Objs.Add(g);
 }
Пример #18
0
 private void CreateDrawObjOper(IDrawObj obj)
 {
     //Undo.Push(RemoveDrawObjOper, obj, "Create");
     Objs.Add(obj);
 }