Beispiel #1
0
 public ChunkBase(
     ChunkReference chunkReference,
     ChunkView chunkView,
     ChunkBaseView chunkBaseView,
     ChunkFeatureView chunkFeatureView,
     PlatformView.Factory platformViewFactory)
 {
     this.chunkReference      = chunkReference;
     this.chunkView           = chunkView;
     this.chunkBaseView       = chunkBaseView;
     this.chunkFeatureView    = chunkFeatureView;
     this.platformViewFactory = platformViewFactory;
 }
Beispiel #2
0
 public Chunk(
     DiContainer container,
     Settings settings,
     ChunkRequest chunkRequest,
     ChunkView chunkView,
     ChunkFeature chunkFeature,
     ChunkFeatureView chunkFeatureView,
     IChunkPlacingStrategy chunkPlacingStrategy)
 {
     this.container            = container;
     this.settings             = settings;
     this.chunkRequest         = chunkRequest;
     this.chunkView            = chunkView;
     this.chunkFeature         = chunkFeature;
     this.chunkFeatureView     = chunkFeatureView;
     this.chunkPlacingStrategy = chunkPlacingStrategy;
 }
Beispiel #3
0
        private Vector3 Altitude(ChunkRequest chunkRequest, ChunkFeature chunkFeature, ChunkFeatureView chunkFeatureView)
        {
            if (previousChunkView == null)
            {
                return(settings.mountainOffset * Vector3.up);
            }

            float previousAltitude = previousChunkView.Position.y + previousChunkView.ChunkFeatureView.ExitAltitude;

            if (chunkFeature.MatchChainHeight)
            {
                return((previousAltitude - chunkFeatureView.EntryAltitude) * Vector3.up);
            }

            float variability = UnityEngine.Random.value * settings.altitudeRange;

            return((variability + previousAltitude - chunkFeatureView.EntryAltitude) * Vector3.up);
        }
Beispiel #4
0
 private Vector3 Position(ChunkRequest chunkRequest, Vector3 sideDirection, Vector3 depthDirection, int sideChunkNum, int depth, ChunkFeature chunkFeature, ChunkFeatureView chunkFeatureView)
 {
     return(((sideChunkNum + 1) * sideDirection) + ((depth - sideChunkNum - 1) * depthDirection) + Altitude(chunkRequest, chunkFeature, chunkFeatureView));
 }
Beispiel #5
0
        private Vector3 BirdseyePosition(ChunkView chunkView, ChunkRequest chunkRequest, ChunkFeature chunkFeature, ChunkFeatureView chunkFeatureView)
        {
            int depth = ChunkMath.Depth(chunkRequest);
            int side  = ChunkMath.Side(chunkRequest);
            int depthStartChunkNum = ChunkMath.DepthStartChunkNum(chunkRequest);
            int sideStartChunkNum  = ChunkMath.SideStartChunkNum(chunkRequest);
            int sideChunkNum       = ChunkMath.SideChunkNum(chunkRequest);

            switch (side)
            {
            case 0:
                return(Position(chunkRequest, chunkReference.Northeast, chunkReference.Northwest, sideChunkNum, depth, chunkFeature, chunkFeatureView));

            case 1:
                return(Position(chunkRequest, chunkReference.East, chunkReference.Northeast, sideChunkNum, depth, chunkFeature, chunkFeatureView));

            case 2:
                return(Position(chunkRequest, chunkReference.Southeast, chunkReference.East, sideChunkNum, depth, chunkFeature, chunkFeatureView));

            case 3:
                return(Position(chunkRequest, chunkReference.Southwest, chunkReference.Southeast, sideChunkNum, depth, chunkFeature, chunkFeatureView));

            case 4:
                return(Position(chunkRequest, chunkReference.West, chunkReference.Southwest, sideChunkNum, depth, chunkFeature, chunkFeatureView));

            case 5:
                return(Position(chunkRequest, chunkReference.Northwest, chunkReference.West, sideChunkNum, depth, chunkFeature, chunkFeatureView));
            }

            Debug.LogError("Failed to compute spiral chunk position");
            return(Vector3.zero);
        }
Beispiel #6
0
        public void Place(ChunkView chunkView, ChunkRequest chunkRequest, ChunkFeature chunkFeature, ChunkFeatureView chunkFeatureView)
        {
            if (chunkRequest.chunkNum == 0)
            {
                chunkView.Rotation *= Quaternion.AngleAxis(
                    120,
                    chunkView.Up
                    );
                chunkView.Position = Vector3.zero + Altitude(chunkRequest, chunkFeature, chunkFeatureView);
                return;
            }

            chunkView.Rotation *= BirdseyeRotation(chunkView, chunkRequest);
            chunkView.Position  = BirdseyePosition(chunkView, chunkRequest, chunkFeature, chunkFeatureView);

            previousChunkView = chunkView;
        }
Beispiel #7
0
 private void Awake()
 {
     chunkFeatureView = null;
 }