public ICreatureView SpawnCreature(Vector3 position, int level = 1) { ICreatureView creature = SpawnUnit(_settings.creature_view, position) as ICreatureView; creature?.SetLevel(level); return(creature); }
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(); }
public ICreatureView GetIntersectInputPositionCreature(ICreatureView creature) { return(_all_creatures_on_location.FirstOrDefault(unit => unit != creature && unit.Bounds.Intersects(creature.Bounds))); }