Beispiel #1
0
        public static BodyData readBody(this IPersistableReader r)
        {
            var bodyData = new BodyData();

            bodyData.pos             = r.ReadVec2();
            bodyData.velocity        = r.ReadVec2();
            bodyData.angle           = r.ReadFloat();
            bodyData.angularVelocity = r.ReadFloat();
            return(bodyData);
        }
Beispiel #2
0
        public LoadedThing loadThing(IPersistableReader rd)
        {
            var kind       = (ThingKind)rd.ReadInt();
            var res        = default(Thing);
            var uid        = rd.ReadLong();
            var senderUid  = default(long);
            var creatorUid = default(long);

            switch (kind)
            {
            case ThingKind.Capsule: {
                var nt  = new Entity("cap");
                var cap = nt.AddComponent(new Capsule());
                cap.acquired = rd.ReadBool();
                // read body
                var bodyData = rd.readBody();
                bodyData.copyTo(cap.body);
                // read other capsule info
                cap.energy           = rd.ReadFloat();
                cap.firstAvailableAt = rd.ReadFloat();
                cap.despawnAt        = rd.ReadFloat();
                senderUid            = rd.ReadLong();
                creatorUid           = rd.ReadLong();

                // if acquired then throw away
                if (cap.acquired)
                {
                    cap = null;     // ick
                }

                res = cap;
                break;
            }

            case ThingKind.Tree: {
                var nt   = new Entity("tree");
                var tree = nt.AddComponent(new Tree());
                // load tree
                tree.Entity.Position = rd.ReadVec2();
                tree.stage           = rd.ReadInt();
                tree.harvest         = rd.ReadInt();
                tree.uid             = uid;

                tree.updateStage();
                res = tree;
                break;
            }

            default:
                // unrecognized thing
                Global.log.err($"unrecognized thing kind: {kind}");
                res = null;
                break;
            }

            if (res != null)
            {
                Global.log.trace($"rehydrated entity {res.GetType().Name}, pos{res.Entity.Position.RoundToPoint()}");

                var loadedThing = new LoadedThing(res)
                {
                    interactorUid = senderUid,
                    creatorUid    = creatorUid
                };
                return(loadedThing); // yee
            }

            return(null);
        }