public override void SendInitialState(BSONObject bsonObj, INetObjectViewer viewer)
    {
        base.SendInitialState(bsonObj, viewer);

        // if we have trunk pieces, send those
        if (this.trunkPieces.Count > 0)
        {
            BSONArray trunkInfo = BSONArray.New;
            foreach (var trunkPiece in this.trunkPieces)
            {
                trunkInfo.Add(trunkPiece.ToInitialBson());
            }
            bsonObj["trunks"] = trunkInfo;
        }

        if (this.Controller != null && this.Controller is INetObject)
        {
            bsonObj["controller"] = ((INetObject)this.Controller).ID;
        }

        if (this.stumpHealth <= 0f) // trunk pieces have their own grounders
        {
            bsonObj["noGround"] = true;
        }

        bsonObj["mult"] = this.resourceMultiplier;
    }
 public override bool IsNotRelevant(INetObjectViewer viewer)
 {
     if (viewer is IWorldObserver)
     {
         IWorldObserver observer           = viewer as IWorldObserver;
         var            closestWrapped     = World.ClosestWrappedLocation(observer.Position, this.Position);
         var            notVisibleDistance = observer.ViewDistance + Eco.Shared.Voxel.Chunk.Size;
         var            v = closestWrapped - observer.Position;
         if (Mathf.Abs(v.x) >= notVisibleDistance || Mathf.Abs(v.z) >= notVisibleDistance)
         {
             if (this.Controller != null && this.Controller.Equals(viewer))
             {
                 this.SetPhysicsController(null);
             }
             return(true);
         }
         else
         {
             // Still relevant, Check if viewer would be a better controller
             if (this.Controller == null)
             {
                 this.SetPhysicsController(viewer);
             }
             else if (this.Controller != viewer && Vector2.WrappedDistance(observer.Position.XZ, this.Position.XZ) < 10f)
             {
                 IWorldObserver other = this.Controller as IWorldObserver;
                 if (Vector2.WrappedDistance(other.Position.XZ, this.Position.XZ) > 15f)
                 {
                     this.SetPhysicsController(viewer);
                 }
             }
         }
     }
     return(false);
 }
    public bool SetPhysicsController(INetObjectViewer owner)
    {
        // Trees don't need physics until felled
        if (!this.Fallen)
        {
            return(false);
        }

        if (Equals(this.Controller, owner))
        {
            return(false);
        }

        if (this.Controller != null)
        {
            this.Controller.RemoveDestroyAction(this.RemovePhysicsController);
        }

        this.Controller = owner;

        if (this.Controller != null)
        {
            this.Controller.AddDestroyAction(this.RemovePhysicsController);
        }

        int id = owner == null ? -1 : ((INetObject)owner).ID;

        this.NetObj.Controller.RPC("UpdateController", id);

        return(true);
    }
Esempio n. 4
0
 public override void SendUpdate(BSONObject bsonObj, INetObjectViewer viewer)
 {
     if (this.attached == null)
     {
         base.SendUpdate(bsonObj, viewer);
     }
 }
 public override bool IsUpdated(INetObjectViewer viewer)
 {
     if (this.LastUpdateTime > viewer.LastSentUpdateTime && SleepManager.Obj.AcceleratingTime)
     {
         return(true);
     }
     return(this.Fallen && this.trunkPieces.Any(piece => !piece.Collected) && this.LastUpdateTime > viewer.LastSentUpdateTime);
 }
Esempio n. 6
0
        public override void SendUpdate(BSONObject bsonObj, INetObjectViewer viewer)
        {
            base.SendUpdate(bsonObj, viewer);
            var cage = BSONObject.New;

            cage["pos"]     = new Vector3(0f, this.cagePos, 0f);
            cage["v"]       = new Vector3(0f, this.cageVelocity, 0f);
            bsonObj["cage"] = cage;
        }
Esempio n. 7
0
 public override void SendInitialState(BSONObject bsonObj, INetObjectViewer viewer)
 {
     base.SendInitialState(bsonObj, viewer);
     bsonObj["pos"]   = this.Position;
     bsonObj["force"] = this.CastForce;
     if (this.Controller != null && this.Controller is INetObject)
     {
         bsonObj["controller"] = ((INetObject)this.Controller).ID;
     }
 }
        public override bool IsNotRelevant(INetObjectViewer viewer)
        {
            bool isNot = base.IsNotRelevant(viewer);

            if (this.Controller == null)
            {
                this.Destroy();
            }

            return(isNot);
        }
Esempio n. 9
0
 public override void SendInitialState(BSONObject bsonObj, INetObjectViewer viewer)
 {
     base.SendInitialState(bsonObj, viewer);
     if (this.attached != null)
     {
         bsonObj["attached"] = this.attached.ToBson();
     }
     bsonObj["v"] = this.Velocity;
     if (this.Controller != null && this.Controller is INetObject)
     {
         bsonObj["controller"] = ((INetObject)this.Controller).ID;
     }
 }
Esempio n. 10
0
    public override bool IsRelevant(INetObjectViewer viewer)
    {
        if (this.attached != null)
        {
            var obj = NetObjectManager.GetObject <INetObject>(this.attached.ParentID);
            if (obj != null)
            {
                return(obj.IsRelevant(viewer));
            }

            this.Destroy();
            return(false);
        }
        return(base.IsRelevant(viewer));
    }
 public override bool IsRelevant(INetObjectViewer viewer)
 {
     if (viewer is IWorldObserver)
     {
         IWorldObserver observer           = viewer as IWorldObserver;
         var            closestWrapped     = World.ClosestWrappedLocation(observer.Position, this.Position);
         var            notVisibleDistance = observer.ViewDistance + Eco.Shared.Voxel.Chunk.Size;
         var            v = closestWrapped - observer.Position;
         if (Mathf.Abs(v.x) >= notVisibleDistance || Mathf.Abs(v.z) >= notVisibleDistance)
         {
             if (this.Controller == null)
             {
                 this.SetPhysicsController(viewer);
             }
             return(true);
         }
     }
     return(false);
 }
Esempio n. 12
0
    public override bool IsNotRelevant(INetObjectViewer viewer)
    {
        if (TimeUtil.Seconds > this.DestroyTime)
        {
            this.Destroy();
        }

        if (this.attached != null)
        {
            var obj = NetObjectManager.GetObject <INetObject>(this.attached.ParentID);
            if (obj != null)
            {
                return(obj.IsNotRelevant(viewer));
            }

            this.Destroy();
            return(true);
        }
        return(base.IsNotRelevant(viewer));
    }
    public override void SendUpdate(BSONObject bsonObj, INetObjectViewer viewer)
    {
        base.SendUpdate(bsonObj, viewer);

        if (this.Fallen && this.Controller != viewer)
        {
            BSONArray trunkInfo = BSONArray.New;
            foreach (var trunkPiece in this.trunkPieces)
            {
                if (trunkPiece.Position == Vector3.Zero)
                {
                    continue;
                }
                if (trunkPiece.LastUpdateTime < viewer.LastSentUpdateTime)
                {
                    continue;
                }

                trunkInfo.Add(trunkPiece.ToUpdateBson());
            }
            bsonObj["trunks"] = trunkInfo;
            bsonObj["time"]   = this.lastKeyframeTime;
        }
    }
    public override void SendInitialState(BSONObject bsonObj, INetObjectViewer viewer)
    {
        base.SendInitialState(bsonObj, viewer);

        // if we have trunk pieces, send those
        var trunkInfo = BSONArray.New;

        if (this.trunkPieces.Count > 0)
        {
            foreach (var trunkPiece in this.trunkPieces)
            {
                trunkInfo.Add(trunkPiece.ToInitialBson());
            }
        }
        bsonObj["trunks"] = trunkInfo;

        if (this.Controller != null && this.Controller is INetObject)
        {
            bsonObj["controller"] = ((INetObject)this.Controller).ID;
        }

        bsonObj["mult"]    = this.resourceMultiplier;
        bsonObj["density"] = this.Species.Density;
    }
Esempio n. 15
0
 public override void SendInitialState(BSONObject bsonObj, INetObjectViewer viewer)
 {
     base.SendInitialState(bsonObj, viewer);
     bsonObj["open"]     = this.Open;
     bsonObj["opensOut"] = this.OpensOut;
 }
 public override void SendInitialState(BSONObject bsonObj, INetObjectViewer viewer)
 {
     base.SendInitialState(bsonObj, viewer);
     this.SendUpdate(bsonObj, viewer);
     bsonObj["dir"] = this.GetAnimatedState <float>("dir");
 }
 public override void SendUpdate(BSONObject bsonObj, INetObjectViewer viewer)
 {
     base.SendUpdate(bsonObj, viewer);
     bsonObj["cagePos"] = this.cagePos;
     bsonObj["v"]       = this.v;
 }
Esempio n. 18
0
        public override bool IsUpdated(INetObjectViewer viewer) => this.Controller != viewer;   // Trigger an update to anyone not the owner of this Lure.

        public override void SendUpdate(BSONObject bsonObj, INetObjectViewer viewer)
        {
            bsonObj["pos"] = this.Position;
            base.SendUpdate(bsonObj, viewer);
        }
Esempio n. 19
0
 public override bool IsUpdated(INetObjectViewer viewer) => this.Controller != viewer;   // Trigger an update to anyone not the owner of this Lure.
Esempio n. 20
0
 public override bool IsUpdated(INetObjectViewer viewer)
 {
     return(this.Fallen && this.trunkPieces.Any(piece => !piece.Collected) && this.LastUpdateTime > viewer.LastSentUpdateTime);
 }
Esempio n. 21
0
 public override bool IsNotRelevant(INetObjectViewer viewer) => base.IsNotRelevant(viewer);
 public override void SendInitialState(BSONObject bsonObj, INetObjectViewer viewer)
 {
     base.SendInitialState(bsonObj, viewer);
     bsonObj["noFadeIn"] = true;
 }