예제 #1
0
        protected Component()
        {
            GlobalPos.Subscribe(x =>
            {
                if (Parent.Value != null)
                {
                    LocalPos.Value = x - Parent.Value.GlobalPos.Value;
                }
                else
                {
                    LocalPos.Value = x;
                }
                foreach (Component child in Children)
                {
                    child.GlobalPos.Value = x + child.LocalPos.Value;
                }
            });

            LocalPos.Subscribe(x =>
            {
                if (Parent.Value != null)
                {
                    GlobalPos.Value = Parent.Value.GlobalPos.Value + x;
                }
                else
                {
                    GlobalPos.Value = x;
                }
            });
        }
예제 #2
0
        public TerrainQuadTree(int parentLodLevel, LocalPos sonPos, int2 parentPos, double worldSize)
        {
            this.worldSize = worldSize;
            distOffset     = MTerrain.current.terrainData.lodDeferredOffset;
            isRendering    = false;
            lodLevel       = parentLodLevel + 1;
            leftDown       = null;
            leftUp         = null;
            rightDown      = null;
            rightUp        = null;
            localPosition  = parentPos * 2;
            switch (sonPos)
            {
            case LocalPos.LeftUp:
                localPosition += int2(0, 1);
                break;

            case LocalPos.RightDown:
                localPosition += int2(1, 0);
                break;

            case LocalPos.RightUp:
                localPosition += 1;
                break;
            }
        }
        public TerrainQuadTree(int parentLodLevel, TerrainQuadTreeSettings *setting, LocalPos sonPos, int2 parentPos, int2 rootPosition)
        {
            this.setting      = setting;
            this.rootPosition = rootPosition;
            isCreated         = true;
            isRendering       = false;
            lodLevel          = parentLodLevel + 1;
            leftDown          = null;
            leftUp            = null;
            rightDown         = null;
            rightUp           = null;
            localPosition     = parentPos * 2;
            switch (sonPos)
            {
            case LocalPos.LeftUp:
                localPosition += int2(0, 1);
                break;

            case LocalPos.RightDown:
                localPosition += int2(1, 0);
                break;

            case LocalPos.RightUp:
                localPosition += 1;
                break;
            }
        }
    void CmdStart(Vector3 rp)
    {
        rubiGo = Instantiate(Ruby, rp, Quaternion.identity) as GameObject;
        NetworkServer.Spawn(rubiGo);
        LocalPos rubipos = rubiGo.GetComponent <LocalPos>();

        rubipos.InstantPosition(rp);
        RpcStart();
    }
예제 #5
0
        public override byte GetSymbol(byte x, byte y)
        {
            if (x >= Width || y >= Height)
            {
                return(BasicChunk.NoOwner);
            }

            var pos = new LocalPos(x, y);

            return(!_symbols.ContainsKey(pos) ? BasicChunk.NoOwner : _symbols[pos]);
        }
예제 #6
0
 public ListChunk(BasicChunk init) : this((byte)init.Width, (byte)init.Height)
 {
     for (var y = 0; y < Height; ++y)
     {
         for (var x = 0; x < Width; ++x)
         {
             var owner = init.GetSymbol((byte)x, (byte)y);
             if (owner != BasicChunk.NoOwner)
             {
                 var pos = new LocalPos((byte)x, (byte)y);
                 _symbols[pos] = owner;
             }
         }
     }
     Next = init.Next;
 }
예제 #7
0
        public override bool SetSymbol(byte x, byte y, byte owner, bool overwrite = false)
        {
            if (x >= Width || y >= Height)
            {
                return(false);
            }

            var pos = new LocalPos(x, y);

            if (!overwrite && _symbols.ContainsKey(pos))
            {
                return(false);
            }

            _symbols[pos] = owner;
            return(true);
        }
예제 #8
0
 public AbsolutePos(SectorPos secPos, LocalPos locPos)
 {
     X = secPos.X * SEC_FACTOR + locPos.X;
     Y = secPos.Y * SEC_FACTOR + locPos.Y;
     Z = secPos.Z * SEC_FACTOR + locPos.Z;
 }
예제 #9
0
 public bool SetSymbol(LocalPos pos, byte owner, bool overwrite = false)
 {
     return(SetSymbol(pos.X, pos.Y, owner, overwrite));
 }
예제 #10
0
 public byte GetSymbol(LocalPos pos)
 {
     return(GetSymbol(pos.X, pos.Y));
 }
예제 #11
0
 protected BasicChunk(LocalPos size)
 {
     _size = size;
 }
예제 #12
0
 public ListChunk(LocalPos size) : this(size.X, size.Y)
 {
 }
예제 #13
0
        public TerrainQuadTree(TerrainQuadTree *parent, int parentLodLevel, ref TerrainQuadTreeSettings setting, LocalPos sonPos, int2 parentPos, int2 rootPosition)
        {
            this.setting      = setting.Ptr();
            this.rootPosition = rootPosition;
            lodLevel          = parentLodLevel + 1;
            this.parent       = parent;
            leftDown          = null;
            leftUp            = null;
            rightDown         = null;
            rightUp           = null;
            localPosition     = parentPos * 2;
            switch (sonPos)
            {
            case LocalPos.LeftUp:
                localPosition += int2(0, 1);
                break;

            case LocalPos.RightDown:
                localPosition += int2(1, 0);
                break;

            case LocalPos.RightUp:
                localPosition += 1;
                break;
            }
        }
예제 #14
0
        public TerrainQuadTree(int parentLodLevel, LocalPos sonPos, int2 parentPos, int2 parentRenderingPos, double worldSize, double3 maskScaleOffset, int2 rootPos)
        {
            toPoint        = 0;
            initializing   = true;
            separate       = false;
            dist           = 0;
            isInRange      = false;
            this.worldSize = worldSize;
            distOffset     = MTerrain.current.terrainData.lodDeferredOffset;
            m_isRendering  = false;
            lodLevel       = parentLodLevel + 1;
            leftDown       = null;
            leftUp         = null;
            rightDown      = null;
            rightUp        = null;
            localPosition  = parentPos * 2;
            switch (sonPos)
            {
            case LocalPos.LeftUp:
                localPosition += int2(0, 1);
                break;

            case LocalPos.RightDown:
                localPosition += int2(1, 0);
                break;

            case LocalPos.RightUp:
                localPosition += 1;
                break;
            }
            int decalLayer = lodLevel - MTerrain.current.decalLayerOffset;

            decalMask = decalLayer < 0 ? (LayerMask)0 : MTerrain.current.terrainData.allDecalLayers[decalLayer];
            if (lodLevel >= MTerrain.current.lodOffset)
            {
                //Larger
                if (lodLevel > MTerrain.current.lodOffset)
                {
                    double subScale = maskScaleOffset.x * 0.5;
                    renderingLocalPosition = parentRenderingPos * 2;
                    double2 offset = maskScaleOffset.yz;
                    switch (sonPos)
                    {
                    case LocalPos.LeftUp:
                        offset += double2(0, subScale);
                        renderingLocalPosition += int2(0, 1);
                        break;

                    case LocalPos.RightDown:
                        offset += double2(subScale, 0);
                        renderingLocalPosition += int2(1, 0);
                        break;

                    case LocalPos.RightUp:
                        offset += subScale;
                        renderingLocalPosition += 1;
                        break;
                    }
                    this.maskScaleOffset = double3(subScale, offset);
                    this.rootPos         = rootPos;
                }
                //Equal
                else
                {
                    this.rootPos           = localPosition;
                    this.maskScaleOffset   = maskScaleOffset;
                    renderingLocalPosition = 0;
                    var loadCommand = new MTerrain.MaskLoadCommand
                    {
                        load = true,
                        pos  = this.rootPos
                    };
                    MTerrain.current.maskLoadList.Add(loadCommand);
                    lock (MTerrain.current)
                    {
                        MTerrain.current.boundBoxLoadList.Add(loadCommand);
                    }
                }
            }
            else
            {
                this.rootPos           = localPosition;
                renderingLocalPosition = parentRenderingPos;
                this.maskScaleOffset   = maskScaleOffset;
            }
        }
예제 #15
0
 public ChunkIterator(BasicChunk chunk, LocalPos pos)
 {
     this._chunk = _startChunk = chunk;
     this._pos   = _startPos = pos;
 }
예제 #16
0
 public byte Reset()
 {
     _chunk = _startChunk;
     _pos   = _startPos;
     return(Here());
 }
예제 #17
0
 public ArrayChunk(LocalPos size) : this(size.X, size.Y)
 {
 }