예제 #1
0
        private static IActor CreateHumanActor(HumanPlayer humanPlayer,
                                               IHumanPersonFactory personFactory,
                                               ISectorManager sectorManager,
                                               IActorManager actorManager,
                                               IPerkResolver perkResolver)
        {
            var person = personFactory.Create();

            Console.WriteLine("Start properties:");
            foreach (var equipment in person.EquipmentCarrier)
            {
                Console.WriteLine($"Equiped: {equipment}");
            }

            foreach (var prop in person.Inventory.CalcActualItems())
            {
                Console.WriteLine(prop);
            }

            humanPlayer.MainPerson = person;

            var playerActorStartNode = sectorManager.CurrentSector.Map.Regions
                                       .SingleOrDefault(x => x.IsStart).Nodes
                                       .First();

            var actor = new Actor(humanPlayer.MainPerson, humanPlayer, playerActorStartNode, perkResolver);

            actorManager.Add(actor);

            return(actor);
        }
예제 #2
0
        public void SetUp()
        {
            var actUsageRandomSourceMock = new Mock <ITacticalActUsageRandomSource>();

            _actUsageRandomSource = actUsageRandomSourceMock.Object;

            _perkResolverMock = new Mock <IPerkResolver>();
            _perkResolver     = _perkResolverMock.Object;

            var personMock = new Mock <IPerson>();

            _person = personMock.Object;

            var evolutionDataMock = new Mock <IEvolutionData>();
            var evolutionData     = evolutionDataMock.Object;

            personMock.SetupGet(x => x.EvolutionData).Returns(evolutionData);

            var actMock = new Mock <ITacticalAct>();

            actMock.SetupGet(x => x.Stats).Returns(new TacticalActStatsSubScheme {
                Range = new Range <int>(1, 1)
            });
            _act = actMock.Object;
        }
 /// <summary>
 /// Конструирует экземпляр службы <see cref="TacticalActUsageService"/>.
 /// </summary>
 /// <param name="actUsageRandomSource">Источник рандома для выполнения действий.</param>
 /// <param name="perkResolver">Сервис для работы с прогрессом перков.</param>
 /// <param name="sectorManager">Менеджер сектора.</param>
 /// <exception cref="System.ArgumentNullException">
 /// actUsageRandomSource
 /// or
 /// perkResolver
 /// or
 /// sectorManager
 /// </exception>
 public TacticalActUsageService(ITacticalActUsageRandomSource actUsageRandomSource,
                                IPerkResolver perkResolver,
                                ISectorManager sectorManager)
 {
     _actUsageRandomSource = actUsageRandomSource ?? throw new ArgumentNullException(nameof(actUsageRandomSource));
     _perkResolver         = perkResolver ?? throw new ArgumentNullException(nameof(perkResolver));
     _sectorManager        = sectorManager ?? throw new ArgumentNullException(nameof(sectorManager));
 }
예제 #4
0
    private ActorViewModel CreateHumanActorViewModel([NotNull] IPlayer player,
                                                     [NotNull] IActorManager actorManager,
                                                     [NotNull] IPerkResolver perkResolver,
                                                     [NotNull] IGraphNode startNode,
                                                     [NotNull] IEnumerable <MapNodeVM> nodeVMs)
    {
        if (_humanPlayer.MainPerson == null)
        {
            if (!_progressStorageService.LoadPerson())
            {
                var playerPerson = _humanPersonFactory.Create("human-person");

                _humanPlayer.MainPerson = playerPerson;

                ShowCreatePersonModal(playerPerson);
            }
        }

        var fowData = new HumanSectorFowData();

        var actor = new Actor(_humanPlayer.MainPerson, player, startNode, perkResolver, fowData);

        _playerEventLogService.Actor = actor;

        actorManager.Add(actor);

        var actorViewModelObj = _container.InstantiatePrefab(ActorPrefab, transform);
        var actorViewModel    = actorViewModelObj.GetComponent <ActorViewModel>();

        actorViewModel.PlayerState = _playerState;
        var actorGraphic = Instantiate(HumanoidGraphicPrefab, actorViewModel.transform);

        actorGraphic.transform.position = new Vector3(0, 0.2f, -0.27f);
        actorViewModel.SetGraphicRoot(actorGraphic);

        var graphicController = actorViewModel.gameObject.AddComponent <HumanActorGraphicController>();

        graphicController.Actor   = actor;
        graphicController.Graphic = actorGraphic;

        var actorNodeVm   = nodeVMs.Single(x => x.Node == actor.Node);
        var actorPosition = actorNodeVm.transform.position + new Vector3(0, 0, -1);

        actorViewModel.transform.position = actorPosition;
        actorViewModel.Actor = actor;

        if (!actor.Person.GetModule <IInventoryModule>().CalcActualItems().Any(x => x.Scheme.Sid == "camp-tools"))
        {
            AddResourceToCurrentPerson("camp-tools");
        }

        return(actorViewModel);
    }
예제 #5
0
        private IActor CreateHumanActor([NotNull] string personSchemeSid,
                                        [NotNull] IGraphNode startNode,
                                        [NotNull] IPerkResolver perkResolver)
        {
            var personFactory   = ServiceProvider.GetRequiredService <IPersonFactory>();
            var humanTaskSource = ServiceProvider.GetRequiredService <IHumanActorTaskSource <ISectorTaskSourceContext> >();

            var person = personFactory.Create(personSchemeSid, Fractions.MainPersonFraction);

            var actor = new Actor(person, humanTaskSource, startNode, perkResolver);

            return(actor);
        }
        public async Task SetUpAsync()
        {
            var actUsageRandomSourceMock = new Mock <ITacticalActUsageRandomSource>();

            actUsageRandomSourceMock.Setup(x => x.RollToHit(It.IsAny <Roll>())).Returns(6);
            actUsageRandomSourceMock.Setup(x => x.RollEfficient(It.IsAny <Roll>())).Returns(1);
            _actUsageRandomSource = actUsageRandomSourceMock.Object;

            _perkResolverMock = new Mock <IPerkResolver>();
            _perkResolver     = _perkResolverMock.Object;

            var personMock = new Mock <IPerson>();

            _person = personMock.Object;

            var evolutionDataMock = new Mock <IEvolutionData>();
            var evolutionData     = evolutionDataMock.Object;

            personMock.SetupGet(x => x.EvolutionData).Returns(evolutionData);

            var actScheme = new TestTacticalActStatsSubScheme
            {
                Offence = new TestTacticalActOffenceSubScheme
                {
                    Type   = OffenseType.Tactical,
                    Impact = ImpactType.Kinetic,
                    ApRank = 10
                }
            };

            var actMock = new Mock <ITacticalAct>();

            actMock.SetupGet(x => x.Stats).Returns(actScheme);
            _act = actMock.Object;

            var sectorManagerMock = new Mock <ISectorManager>();
            var sectorManager     = sectorManagerMock.Object;

            var map = await SquareMapFactory.CreateAsync(3);

            var sectorMock = new Mock <ISector>();

            sectorMock.SetupGet(x => x.Map).Returns(map);
            var sector = sectorMock.Object;

            sectorManagerMock.SetupGet(x => x.CurrentSector).Returns(sector);

            _sectorManager = sectorManager;
        }
예제 #7
0
    private ActorViewModel CreateHumanActorViewModel([NotNull] IPlayer player,
                                                     [NotNull] IActorManager actorManager,
                                                     [NotNull] IPerkResolver perkResolver,
                                                     [NotNull] IMapNode startNode,
                                                     [NotNull] IEnumerable <MapNodeVM> nodeVMs)
    {
        if (_humanPlayer.MainPerson == null)
        {
            if (!_progressStorageService.LoadPerson())
            {
                _humanPlayer.MainPerson = _humanPersonFactory.Create();
            }
        }

        var actor = new Actor(_humanPlayer.MainPerson, player, startNode, perkResolver);

        actorManager.Add(actor);

        var actorViewModelObj = _container.InstantiatePrefab(ActorPrefab, transform);
        var actorViewModel    = actorViewModelObj.GetComponent <ActorViewModel>();

        actorViewModel.PlayerState = _playerState;
        var actorGraphic = Instantiate(HumanoidGraphicPrefab, actorViewModel.transform);

        actorGraphic.transform.position = new Vector3(0, 0.2f, -0.27f);
        actorViewModel.GraphicRoot      = actorGraphic;

        var graphicController = actorViewModel.gameObject.AddComponent <HumanActorGraphicController>();

        graphicController.Actor   = actor;
        graphicController.Graphic = actorGraphic;

        var actorNodeVm   = nodeVMs.Single(x => x.Node == actor.Node);
        var actorPosition = actorNodeVm.transform.position + new Vector3(0, 0, -1);

        actorViewModel.transform.position = actorPosition;
        actorViewModel.Actor     = actor;
        actorViewModel.Selected += HumanActorViewModel_Selected;

        actor.OpenedContainer      += PlayerActorOnOpenedContainer;
        actor.UsedAct              += ActorOnUsedAct;
        actor.Person.Survival.Dead += HumanPersonSurvival_Dead;

        return(actorViewModel);
    }
예제 #8
0
    private ActorViewModel CreateHumanActorViewModelFromMainPerson(
        [NotNull] IActorManager actorManager,
        [NotNull] IPerkResolver perkResolver,
        [NotNull] IGraphNode startNode,
        [NotNull] IEnumerable <MapNodeVM> nodeVMs)
    {
        var fowData = new HumanSectorFowData();
        var actor   = new Actor(_humanPlayer.MainPerson, _humanPlayer, startNode, perkResolver, fowData);

        actorManager.Add(actor);

        var actorViewModelObj = _container.InstantiatePrefab(ActorPrefab, TargetObject);

        // Задаём имя объекта для отладки через редактор.
        // Чтобы визуально можно было проще найти вью-модель персонажа игрока в секторе.
        actorViewModelObj.name = "PlayerActor";
        var actorViewModel = actorViewModelObj.GetComponent <ActorViewModel>();

        var actorGraphic = Instantiate(HumanoidGraphicPrefab, actorViewModel.transform);

        actorGraphic.transform.position = new Vector3(0, 0.2f, -0.27f);
        actorViewModel.SetGraphicRoot(actorGraphic);

        var graphicController = actorViewModel.gameObject.AddComponent <HumanActorGraphicController>();

        graphicController.Actor   = actor;
        graphicController.Graphic = actorGraphic;

        var actorNodeVm   = nodeVMs.Single(x => x.Node == actor.Node);
        var actorPosition = actorNodeVm.transform.position + new Vector3(0, 0, -1);

        actorViewModel.transform.position = actorPosition;
        actorViewModel.Actor = actor;

        return(actorViewModel);
    }
예제 #9
0
        private IActor CreateHumanActor([NotNull] IPlayer player,
                                        [NotNull] IPersonScheme personScheme,
                                        [NotNull] IMapNode startNode,
                                        [NotNull] IPerkResolver perkResolver)
        {
            var schemeService        = Container.GetInstance <ISchemeService>();
            var survivalRandomSource = Container.GetInstance <ISurvivalRandomSource>();

            var evolutionData = new EvolutionData(schemeService);

            var inventory = new Inventory();

            var defaultActScheme = schemeService.GetScheme <ITacticalActScheme>(personScheme.DefaultAct);

            var person = new HumanPerson(personScheme,
                                         defaultActScheme,
                                         evolutionData,
                                         survivalRandomSource,
                                         inventory);

            var actor = new Actor(person, player, startNode, perkResolver);

            return(actor);
        }
예제 #10
0
 public ActorActUsageHandler(IPerkResolver perkResolver, ITacticalActUsageRandomSource actUsageRandomSource)
 {
     _perkResolver         = perkResolver;
     _actUsageRandomSource = actUsageRandomSource;
 }
예제 #11
0
 public ActorActUsageHandler(IPerkResolver perkResolver, ITacticalActUsageRandomSource actUsageRandomSource)
 {
     _perkResolver         = perkResolver ?? throw new ArgumentNullException(nameof(perkResolver));
     _actUsageRandomSource = actUsageRandomSource ?? throw new ArgumentNullException(nameof(actUsageRandomSource));
 }
예제 #12
0
 public Actor([NotNull] IPerson person, [NotNull]  IPlayer owner, [NotNull]  IMapNode node,
              [CanBeNull] IPerkResolver perkResolver) : this(person, owner, node)
 {
     _perkResolver = perkResolver;
 }
예제 #13
0
 public TacticalActUsageService(ITacticalActUsageRandomSource actUsageRandomSource, IPerkResolver perkResolver)
 {
     _actUsageRandomSource = actUsageRandomSource;
     _perkResolver         = perkResolver;
 }
예제 #14
0
 public Actor([NotNull] IPerson person, [NotNull] IActorTaskSource <ISectorTaskSourceContext> taskSource,
              [NotNull] IGraphNode node,
              [CanBeNull] IPerkResolver perkResolver) : this(person, taskSource, node)
 {
     _perkResolver = perkResolver;
 }