public FirstPersonToolRenderer(
            D3DEngine d3DEngine,
            CameraManager <ICameraFocused> camManager,
            PlayerEntityManager playerEntityManager,
            VoxelModelManager voxelModelManager,
            VisualWorldParameters visualWorldParameters,
            SingleArrayChunkContainer chunkContainer,
            ISkyDome skyDome)
        {
            _d3dEngine = d3DEngine;

            _camManager        = camManager;
            _voxelModelManager = voxelModelManager;
            _chunkContainer    = chunkContainer;
            _skyDome           = skyDome;

            PlayerCharacter = playerEntityManager.PlayerCharacter;
            playerEntityManager.PlayerEntityChanged += _player_PlayerEntityChanged;

            _cubeRenderer = new CubeRenderer(d3DEngine, visualWorldParameters);

            _animationRotation = Quaternion.Identity;

            DrawOrders.UpdateIndex(0, 5000);

            this.IsDefferedLoadContent = true;
        }
Exemple #2
0
 public IconFactory(D3DEngine d3DEngine, VoxelModelManager modelManager, VisualWorldParameters visualWorldParameters)
 {
     _d3DEngine             = d3DEngine;
     _modelManager          = modelManager;
     _visualWorldParameters = visualWorldParameters;
     //if(Utopia.UtopiaRender.LCDefferedModeLvl !=1) this.IsDefferedLoadContent = true;
 }
Exemple #3
0
        public void Initialize(string utopiaPath)
        {
            if (_engine == null)
            {
                _utopiaFolder              = utopiaPath;
                ClientSettings.PathRoot    = _utopiaFolder;
                ClientSettings.EffectPack  = Path.Combine(_utopiaFolder, @"EffectsPacks\Default\");
                ClientSettings.TexturePack = Path.Combine(_utopiaFolder, @"TexturesPacks\Default\");

                _engine = new D3DEngine();
                DXStates.CreateStates(_engine);
            }

            var modelsStorage    = new ModelSQLiteStorage(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Realms", "Common", "models.db"));
            var voxelMeshFactory = new VoxelMeshFactory(_engine);

            _modelManager = new VoxelModelManager();
            _modelManager.VoxelModelStorage = modelsStorage;
            _modelManager.VoxelMeshFactory  = voxelMeshFactory;
            _modelManager.Initialize();

            _visualWorldParameters = new VisualWorldParameters();
            _textureManager        = new CubeTexturesManager(_engine);
            _textureManager.Initialization(_engine.ImmediateContext, FilterFlags.Point);
            _cubeTextureView = _textureManager.CubeArrayTexture;

            _visualWorldParameters.CubeTextureManager = _textureManager;

            _iconFactory = new IconFactory(_engine, _modelManager, _visualWorldParameters);

            //ArrayTexture.CreateTexture2DFromFiles(_engine.Device, _engine.ImmediateContext,
            //                                        Path.Combine(ClientSettings.TexturePack, @"Terran\"), @"ct*.png",
            //                                        FilterFlags.Point, "ArrayTexture_DefaultEntityRenderer",
            //                                        out _cubeTextureView);
        }
Exemple #4
0
        private void LoadMissingModels(WorldConfiguration configuration, VoxelModelManager voxelModelManager)
        {
            ThreadsManager.RunAsync(() => {
                voxelModelManager.Initialize();
                var availableModels = voxelModelManager.Enumerate().Select(m => m.VoxelModel.Name).ToList();
                var neededModels    = configuration.GetUsedModelsNames().Where(m => !availableModels.Contains(m)).ToList();

                foreach (var neededModel in neededModels)
                {
                    voxelModelManager.DownloadModel(neededModel);
                }
            });
        }
        public PlayerEntityManager(CameraManager <ICameraFocused> cameraManager,
                                   InputsManager inputsManager,
                                   SingleArrayChunkContainer cubesHolder,
                                   ServerComponent server,
                                   VoxelModelManager voxelModelManager,
                                   VisualWorldParameters visualWorldParameters,
                                   EntityFactory factory,
                                   LandscapeBufferManager bufferManager,
                                   ILandscapeManager landscapeManager,
                                   ChatComponent chatComponent,
                                   PostEffectComponent postEffectComponent,
                                   GuiManager guiManager,
                                   ISoundEngine soundEngine,
                                   TimerManager timerManager
                                   )
        {
            _cameraManager         = cameraManager;
            _inputsManager         = inputsManager;
            _soundEngine           = soundEngine;
            _cubesHolder           = cubesHolder;
            _visualWorldParameters = visualWorldParameters;
            _factory             = factory;
            _bufferManager       = bufferManager;
            _landscapeManager    = landscapeManager;
            _chatComponent       = chatComponent;
            _postEffectComponent = postEffectComponent;
            OnLanding           += PlayerEntityManager_OnLanding;
            _guiManager          = guiManager;

            PlayerCharacter = (PlayerCharacter)server.Player;

            ShowDebugInfo = true;

            // Create a visualVoxelEntity (== Assign a voxel body to the PlayerCharacter)
            VisualVoxelEntity = new VisualVoxelEntity(PlayerCharacter, voxelModelManager);

            //Add a new Timer trigger
            _energyUpdateTimer = timerManager.AddTimer(1000); //A timer that will be raised every second
            _energyUpdateTimer.OnTimerRaised += energyUpdateTimer_OnTimerRaised;

            HasMouseFocus = Updatable;
            UpdateOrder   = 0;

            // create "real" random
            var entropySource = RNGCryptoServiceProvider.Create();
            var bytes         = new byte[4];

            entropySource.GetBytes(bytes);
            random = new Random(BitConverter.ToInt32(bytes, 0));
        }
        public GhostedEntityRenderer(
            PlayerEntityManager playerEntityManager,
            VoxelModelManager voxelModelManager,
            CameraManager <ICameraFocused> cameraManager
            )
        {
            _playerEntityManager = playerEntityManager;
            _voxelModelManager   = voxelModelManager;
            _cameraManager       = cameraManager;
            Transform            = Matrix.Identity;
            Display = true;

            DrawOrders.UpdateIndex(0, 1070);
        }
Exemple #7
0
        public LandscapeManager(ServerComponent server, IChunkStorageManager chunkStorageManager, TimerManager timerManager, VoxelModelManager voxelModelManager, LandscapeBufferManager landscapeEntityManager)
        {
            _chunkStorageManager = chunkStorageManager;
            _voxelModelManager   = voxelModelManager;

            _server = server;
            _receivedServerChunks     = new Dictionary <Vector3I, ChunkDataMessage>(1024);
            _server.MessageChunkData += ServerConnection_MessageChunkData;
            _landscapeEntityManager   = landscapeEntityManager;

            //Add a new Timer trigger
            _timer = timerManager.AddTimer(10000);
            _timer.OnTimerRaised += _timer_OnTimerRaised;

            Initialize();
        }
        public DynamicEntityManager(D3DEngine d3DEngine,
                                    VoxelModelManager voxelModelManager,
                                    CameraManager <ICameraFocused> camManager,
                                    WorldFocusManager worldFocusManager,
                                    VisualWorldParameters visualWorldParameters,
                                    SingleArrayChunkContainer chunkContainer,
                                    IPlayerManager playerEntityManager,
                                    ISkyDome skyDome,
                                    SharedFrameCB sharedFrameCB,
                                    IWorldChunks worldChunks,
                                    ISoundEngine soundEngine,
                                    UtopiaParticuleEngine utopiaParticuleEngine
                                    )
        {
            _d3DEngine             = d3DEngine;
            _voxelModelManager     = voxelModelManager;
            _camManager            = camManager;
            _chunkContainer        = chunkContainer;
            _soundEngine           = soundEngine;
            _worldFocusManager     = worldFocusManager;
            _visualWorldParameters = visualWorldParameters;
            _playerEntityManager   = playerEntityManager;
            _playerEntityManager.UtopiaParticuleEngine = utopiaParticuleEngine;
            _skyDome               = skyDome;
            _sharedFrameCB         = sharedFrameCB;
            _worldChunks           = worldChunks;
            _utopiaParticuleEngine = utopiaParticuleEngine;

            _voxelModelManager.VoxelModelAvailable += VoxelModelManagerVoxelModelReceived;
            _camManager.ActiveCameraChanged        += CamManagerActiveCameraChanged;

            _playerEntityManager.PlayerEntityChanged += _playerEntityManager_PlayerEntityChanged;

            DynamicEntities = new List <VisualVoxelEntity>();

            DrawOrders.UpdateIndex(VOXEL_DRAW, 99, "VOXEL_DRAW");
            SPRITENAME_DRAW = DrawOrders.AddIndex(1060, "NAME_DRAW");

            this.IsDefferedLoadContent = true;
        }
Exemple #9
0
        public VisualChunkBase(
            D3DEngine d3DEngine,
            WorldFocusManager worldFocusManager,
            VisualWorldParameters visualWorldParameter,
            Range3I cubeRange,
            CameraManager <ICameraFocused> cameraManager,
            WorldChunks worldChunkManager,
            VoxelModelManager voxelModelManager,
            IChunkEntityImpactManager chunkEntityImpactManager,
            ChunkDataProvider provider = null)
            : base(provider)
        {
            _cachedTrees = new Dictionary <TreeBpSeed, VisualVoxelModel>();

            Graphics = new ChunkGraphics(this, d3DEngine);

            _d3DEngine                = d3DEngine;
            _worldFocusManager        = worldFocusManager;
            _worldChunkManager        = worldChunkManager;
            _chunkEntityImpactManager = chunkEntityImpactManager;
#if DEBUG
            _blockpickedUPEffect = new HLSLVertexPositionColor(_d3DEngine.Device);
#endif

            _visualWorldParameters = visualWorldParameter;

            _cameraManager        = cameraManager;
            _voxelModelManager    = voxelModelManager;
            _visualVoxelEntities  = new Dictionary <string, List <VisualVoxelEntity> >();
            EmitterStaticEntities = new List <EntityMetaData>();
            OutOfChunkLightSourceStaticEntities = new List <ILightEmitterEntity>();
            SoundStaticEntities = new List <IItem>();
            CubeRange           = cubeRange;
            State = ChunkState.Empty;
            Entities.EntityAdded       += EntitiesEntityAdded;
            Entities.EntityRemoved     += EntitiesEntityRemoved;
            Entities.CollectionCleared += EntitiesCollectionCleared;
        }
Exemple #10
0
 public VisualChunk(D3DEngine d3DEngine,
                    WorldFocusManager worldFocusManager,
                    VisualWorldParameters visualWorldParameter,
                    ref Range3I cubeRange,
                    SingleArrayChunkContainer singleArrayContainer,
                    CameraManager <ICameraFocused> cameraManager,
                    WorldChunks worldChunkManager,
                    VoxelModelManager voxelModelManager,
                    IChunkEntityImpactManager chunkEntityImpactManager,
                    ChunkDataProvider provider = null)  :
     base(d3DEngine,
          worldFocusManager,
          visualWorldParameter,
          cubeRange,
          cameraManager,
          worldChunkManager,
          voxelModelManager,
          chunkEntityImpactManager,
          new SingleArrayDataProvider(singleArrayContainer))
 {
     ((SingleArrayDataProvider)base.BlockData).DataProviderUser = this; //Didn't find a way to pass it inside the constructor
     _singleArrayContainer = singleArrayContainer;
 }
Exemple #11
0
 public VisualChunk3D(
     D3DEngine d3DEngine,
     WorldFocusManager worldFocusManager,
     VisualWorldParameters visualWorldParameter,
     Range3I cubeRange,
     CameraManager <ICameraFocused> cameraManager,
     WorldChunks worldChunkManager,
     VoxelModelManager voxelModelManager,
     IChunkEntityImpactManager chunkEntityImpactManager,
     ChunkDataProvider provider = null) :
     base(
         d3DEngine,
         worldFocusManager,
         visualWorldParameter,
         cubeRange,
         cameraManager,
         worldChunkManager,
         voxelModelManager,
         chunkEntityImpactManager,
         provider)
 {
     _lights = new ByteColor[BlockData.ChunkSize.Volume];
 }
Exemple #12
0
        public VisualDynamicEntity(ICharacterEntity dynEntity, VoxelModelManager manager)
            : base(dynEntity, manager)
        {
            DynamicEntity = dynEntity;

            //Will be used to update the bounding box with world coordinate when the entity is moving
            LocalBBox.Minimum = new Vector3(-(DynamicEntity.DefaultSize.X / 2.0f), 0, -(DynamicEntity.DefaultSize.Z / 2.0f));
            LocalBBox.Maximum = new Vector3(+(DynamicEntity.DefaultSize.X / 2.0f), DynamicEntity.DefaultSize.Y, +(DynamicEntity.DefaultSize.Z / 2.0f));

            //Set Position
            //Set the entity world position following the position received from server
            WorldPosition.Value     = DynamicEntity.Position;
            WorldPosition.ValuePrev = DynamicEntity.Position;

            //Compute the initial Player world bounding box
            RefreshWorldBoundingBox(ref WorldPosition.Value);

            //Set LookAt
            LookAtDirection.Value     = DynamicEntity.HeadRotation;
            LookAtDirection.ValuePrev = LookAtDirection.Value;

            //Set Move direction = to LookAtDirection
            MoveDirection.Value = LookAtDirection.Value;

            //Change the default value when Player => The player message arrive much more faster !
            if (DynamicEntity is PlayerCharacter)
            {
                _interpolationRate = 0.1;
            }

            _netLocation = new NetworkValue <Vector3D> {
                Value = WorldPosition.Value, Interpolated = WorldPosition.Value
            };

            WithNetworkInterpolation = true;
        }
Exemple #13
0
        public WorldChunks(D3DEngine d3dEngine,
                           CameraManager <ICameraFocused> camManager,
                           VisualWorldParameters visualWorldParameters,
                           WorldFocusManager worldFocusManager,
                           GameStatesManager gameStates,
                           IClock gameClock,
                           SingleArrayChunkContainer cubesHolder,
                           ILandscapeManager2D landscapeManager,
                           IChunkMeshManager chunkMeshManager,
                           IChunksWrapper chunkWrapper,
                           ILightingManager lightingManager,
                           IChunkStorageManager chunkstorage,
                           ServerComponent server,
                           IWeather weather,
                           [Named("SkyBuffer")] StaggingBackBuffer skyBackBuffer,
                           VoxelModelManager voxelModelManager,
                           IChunkEntityImpactManager chunkEntityImpactManager,
                           InputsManager inputsManager
                           )
        {
            _server                   = server;
            _chunkstorage             = chunkstorage;
            _d3dEngine                = d3dEngine;
            _worldFocusManager        = worldFocusManager;
            _gameStates               = gameStates;
            _camManager               = camManager;
            _gameClock                = gameClock;
            VisualWorldParameters     = visualWorldParameters;
            _cubesHolder              = cubesHolder;
            _chunkWrapper             = chunkWrapper;
            _landscapeManager         = landscapeManager;
            _chunkMeshManager         = chunkMeshManager;
            _lightingManager          = lightingManager;
            _weather                  = weather;
            _skyBackBuffer            = skyBackBuffer;
            _voxelModelManager        = voxelModelManager;
            _chunkEntityImpactManager = chunkEntityImpactManager;
            _inputsManager            = inputsManager;

            _skyBackBuffer.OnStaggingBackBufferChanged += _skyBackBuffer_OnStaggingBackBufferChanged;

            SliceViewChunks = 25;

            DrawStaticInstanced = true;

            if (visualWorldParameters.WorldParameters.Configuration is UtopiaWorldConfiguration)
            {
                _utopiaProcessorParam = ((UtopiaWorldConfiguration)visualWorldParameters.WorldParameters.Configuration).ProcessorParam;
            }

            //Self injecting inside components, to avoid circular dependency
            _chunkWrapper.WorldChunks     = this;
            lightingManager.WorldChunk    = this;
            _chunkMeshManager.WorldChunks = this;
            landscapeManager.WorldChunks  = this;

            DrawOrders.UpdateIndex(SOLID_DRAW, 100, "SOLID_DRAW");
            TRANSPARENT_DRAW = DrawOrders.AddIndex(1050, "TRANSPARENT_DRAW");
            ENTITIES_DRAW    = DrawOrders.AddIndex(101, "ENTITIES_DRAW");

            this.IsDefferedLoadContent = true;
        }
Exemple #14
0
 public ModelControl(VoxelModelManager manager)
 {
     Rotation       = Quaternion.Identity;
     _manager       = manager;
     AlterTransform = Matrix.RotationX(-MathHelper.Pi / 5);
 }