Exemplo n.º 1
0
        public ICreatureView SpawnCreature(Vector3 position, int level = 1)
        {
            ICreatureView creature = SpawnUnit(_settings.creature_view, position) as ICreatureView;

            creature?.SetLevel(level);
            return(creature);
        }
Exemplo n.º 2
0
        public void Initialize()
        {
            StartCrateSpawner();

            _input_stream = new CompositeDisposable();

            //Input release logic
            _input_controller.IsRelease
            .Where(release => release == true)
            .Subscribe(_ => {
                if (_current_drag_creature == null)
                {
                    IUnitView found_unit = _location_model.GetIntersectInputPositionUnit(_input_controller.InputWorldPosition.Value);
                    found_unit?.Interact();
                }
                else
                {
                    ICreatureView collide_creature = _location_model.GetIntersectInputPositionCreature(_current_drag_creature);

                    if (collide_creature != null)
                    {
                        if (collide_creature.Level == _current_drag_creature.Level)
                        {
                            _signal_bus.Fire(new SpawnCreatureFromMergeSignal {
                                first_creature  = _current_drag_creature,
                                second_creature = collide_creature
                            });
                        }
                    }
                    else
                    {
                        _current_drag_creature.Interact();
                    }

                    _current_drag_creature.SetDrag(false);
                    _current_drag_creature = null;
                }
            })
            .AddTo(_input_stream);

            //Input press logic
            _input_controller.IsPressed
            .Where(press => press)
            .Subscribe(_ => {
                if (_current_drag_creature == null)
                {
                    CrateView possible_crate =
                        _location_model.GetIntersectInputPositionUnit(_input_controller.InputWorldPosition.Value) as CrateView;

                    if (possible_crate == null)
                    {
                        ICreatureView unit = _location_model.GetIntersectInputPositionCreature(_input_controller.InputWorldPosition.Value);

                        if (unit != null)
                        {
                            _current_drag_creature = unit;
                            _current_drag_creature?.SetDrag(true);
                        }
                    }
                }
            })
            .AddTo(_input_stream);

            //Input move logic
            _input_controller.InputWorldPosition
            .Where(pos => _input_controller.IsPressed.Value)
            .Subscribe(pos => {
                if (_current_drag_creature == null)
                {
                    ICoinView[] coin_view = _location_model.GetIntersectInputPositionCoin(pos);

                    if (coin_view.Length > 0)
                    {
                        coin_view.ForEach(coin => {
                            if (!coin.IsCollected)
                            {
                                coin.Interact();
                            }
                        });
                    }
                }
                else
                {
                    _current_drag_creature.SetPosition(pos.VectorBoundInBound(_current_drag_creature.Bounds, _camera_bounds).SetZ(_current_drag_creature.Position.z));
                }
            })
            .AddTo(_input_stream);

            SpawnCrate();
        }
Exemplo n.º 3
0
 public ICreatureView GetIntersectInputPositionCreature(ICreatureView creature)
 {
     return(_all_creatures_on_location.FirstOrDefault(unit => unit != creature &&
                                                      unit.Bounds.Intersects(creature.Bounds)));
 }