Пример #1
0
        public void saveThing(IPersistableWriter wr, Thing thing)
        {
            var kindId = (int)classify(thing);

            // thing header
            wr.Write(kindId);
            wr.Write(thing.uid);
            // thing data
            switch (thing)
            {
            case Capsule cap: {
                // write status
                wr.Write(cap.acquired);
                // write body data
                wr.writeBody(cap.body);
                // write other capsule info
                wr.Write(cap.energy);
                wr.Write(cap.firstAvailableAt);
                wr.Write(cap.despawnAt);
                wr.Write(cap.interactor?.uid ?? default);
                wr.Write(cap.creator?.uid ?? default);
                break;
            }

            case Tree tree: {
                // we don't store fruit refs
                wr.Write(tree.Transform.Position);
                wr.Write(tree.stage);
                wr.Write(tree.harvest);

                break;
            }
            }
        }
 public static void Write(this IPersistableWriter self, string[] arr)
 {
     self.Write(arr.Length);
     for (var i = 0; i < arr.Length; i++)
     {
         self.Write(arr[i]);
     }
 }
Пример #3
0
 public static void Write(this IPersistableWriter self, IPersistable[] arr)
 {
     self.Write(arr.Length);
     for (int i = 0; i < arr.Length; i++)
     {
         self.Write(arr[i]);
     }
 }
Пример #4
0
        public static void writeBody(this IPersistableWriter w, KinBody body)
        {
            var bodyData = new BodyData(body);

            w.Write(bodyData.pos);
            w.Write(bodyData.velocity);
            w.Write(bodyData.angle);
            w.Write(bodyData.angularVelocity);
        }
Пример #5
0
 void WritePrimitives(IPersistableWriter writer)
 {
     writer.Write(TestValues.aString);
     writer.Write(TestValues.aInt);
     writer.Write(TestValues.aUint);
     writer.Write(TestValues.aFloat);
     writer.Write(TestValues.aDouble);
     writer.Write(TestValues.aBool);
 }
Пример #6
0
 void WriteComplex(IPersistableWriter writer)
 {
     writer.Write(TestValues.aNullableBool);
     writer.Write(TestValues.aIntList);
     writer.Write(TestValues.aFloatList);
     writer.Write(TestValues.aStringList);
     writer.Write(TestValues.aIntArray);
     writer.Write(TestValues.aFloatArray);
     writer.Write(TestValues.aStringArray);
 }
        public static void Write(this IPersistableWriter self, List <int> list)
        {
            var cnt = list.Count;

            self.Write(cnt);

            for (var i = 0; i < cnt; i++)
            {
                self.Write(list[i]);
            }
        }
Пример #8
0
        public static void Write(this IPersistableWriter self, bool?value)
        {
            bool hasValue = value.HasValue;

            self.Write(hasValue);

            if (hasValue)
            {
                self.Write(value.Value);
            }
        }
Пример #9
0
        public void Save(string filename, IPersistable persistable)
        {
            string tmpFile = GetTmpFile(filename);

            using (IPersistableWriter writer = GetDataWriter(tmpFile)) {
                writer.Write(persistable);
            }

            File.Copy(tmpFile, Path.Combine(_persistentDataPath, filename), true);
            File.Delete(tmpFile);
        }
Пример #10
0
        public static void writeWing(this IPersistableWriter w, Wing wing)
        {
            var wd = new WingData(wing);

            w.Write(wing.uid);
            w.Write(wd.name);
            w.Write((int)wd.wingClass);
            w.Write(wd.energy);
            w.writePersonality(wd.ply);
            w.Write(wd.armed);
        }
Пример #11
0
        public static void Write(this IPersistableWriter self, List <float> list)
        {
            int cnt = list.Count;

            self.Write(cnt);

            for (int i = 0; i < cnt; i++)
            {
                self.Write(list[i]);
            }
        }
Пример #12
0
        void IPersistable.Persist(IPersistableWriter writer)
        {
            if (!_isDirty)
            {
                return;
            }

            int cnt = _boolDict.Count;

            writer.Write(cnt);
            foreach (KeyValuePair <string, bool> kv in _boolDict)
            {
                writer.Write(kv.Key);
                writer.Write(kv.Value);
            }

            cnt = _intDict.Count;
            writer.Write(cnt);
            foreach (KeyValuePair <string, int> kv in _intDict)
            {
                writer.Write(kv.Key);
                writer.Write(kv.Value);
            }

            cnt = _floatDict.Count;
            writer.Write(cnt);
            foreach (KeyValuePair <string, float> kv in _floatDict)
            {
                writer.Write(kv.Key);
                writer.Write(kv.Value);
            }

            cnt = _stringDict.Count;
            writer.Write(cnt);
            foreach (KeyValuePair <string, string> kv in _stringDict)
            {
                writer.Write(kv.Key);
                writer.Write(kv.Value);
            }

            _isDirty = false;
        }
Пример #13
0
        void IPersistable.Persist(IPersistableWriter writer)
        {
            if (!_isDirty)
            {
                return;
            }

            var cnt = _boolDict.Count;

            writer.Write(cnt);
            foreach (var kv in _boolDict)
            {
                writer.Write(kv.Key);
                writer.Write(kv.Value);
            }

            cnt = _intDict.Count;
            writer.Write(cnt);
            foreach (var kv in _intDict)
            {
                writer.Write(kv.Key);
                writer.Write(kv.Value);
            }

            cnt = _floatDict.Count;
            writer.Write(cnt);
            foreach (var kv in _floatDict)
            {
                writer.Write(kv.Key);
                writer.Write(kv.Value);
            }

            cnt = _stringDict.Count;
            writer.Write(cnt);
            foreach (var kv in _stringDict)
            {
                writer.Write(kv.Key);
                writer.Write(kv.Value);
            }

            _isDirty = false;
        }
Пример #14
0
 public static void writePersonality(this IPersistableWriter w, BirdPersonality ply)
 {
     w.Write(ply.A);
     w.Write(ply.S);
 }
 void IPersistable.Persist(IPersistableWriter writer)
 {
     writer.Write(strings);
     writer.Write(anInt);
     writer.Write(nullableBool);
 }
Пример #16
0
        public void Persist(IPersistableWriter wr)
        {
            Global.log.info($"{nameof(PlayPersistable)}::persist called");
            wr.Write(version); // save file version

            // save game time
            wr.Write(Time.TotalTime);

            // save map seed
            wr.Write(setup.state.mapgenSeed);

            // save player
            wr.writeWing(setup.state.player);
            wr.writeBody(setup.state.player.body);

            // save all other wings
            var wingsToSave = setup.state.scene.FindEntitiesWithTag(Constants.Tags.WING)
                              .Where(x => x != setup.state.player.Entity)
                              .ToList();

            wr.Write(wingsToSave.Count);
            foreach (var wingNt in wingsToSave)
            {
                var wing = wingNt.GetComponent <Wing>();
                wr.writeWing(wing);
                wr.writeBody(wing.body);
                // wr.writeWingMemory(wing.mind);
            }

            // save world things
            var thingsToSave = setup.state.scene.FindEntitiesWithTag(Constants.Tags.THING).ToList();

            wr.Write(thingsToSave.Count);
            // sort so trees are before capsules
            var treeList = new List <Thing>();
            var capList  = new List <Thing>();

            foreach (var thingNt in thingsToSave)
            {
                if (thingNt.HasComponent <Tree>())
                {
                    treeList.Add(thingNt.GetComponent <Tree>());
                }

                if (thingNt.HasComponent <Capsule>())
                {
                    capList.Add(thingNt.GetComponent <Capsule>());
                }
            }

            var saveThingList = new List <Thing>();

            saveThingList.AddRange(treeList);
            saveThingList.AddRange(capList);
            var thingHelper = new ThingLoader(this);

            foreach (var thing in saveThingList)
            {
                // var kind = thingHelper.classify(thing);
                thingHelper.saveThing(wr, thing);
            }
        }
Пример #17
0
 public static void writeWingMemory(this IPersistableWriter w, DuckMind mind)
 {
     throw new NotImplementedException();
 }