public override void CreateAndDrop(InGameRootViewModel viewModel)
    {
        base.CreateAndDrop (viewModel);
        Debug.Log ("todo: CreateAndDrop");

        viewModel.IsDropping = true;

        Dictionary<int, int> existColInfo = GetExistCountByCol (viewModel);
        for (int x = viewModel.MapInfo.xmin; x <= viewModel.MapInfo.xmax; x++) {

            int existCount = 0;
            if (existColInfo.ContainsKey(x)){
                existCount = existColInfo[x];
            }

            int needAddCount = viewModel.MapInfo.ymax - existCount;
            int remainNeedAddCount = needAddCount;
            int addTargety = viewModel.MapInfo.ymax + 1;

            while (remainNeedAddCount > 0) {
                viewModel.CreateAnimal.OnNext (new CreateAnimalCommand () {
                    Argument = new AnimalProp () {
                        AnimalType = Locator.RandomGetAnimalType(),
                        Loc = new Loc(x, addTargety)
                    }
                });

                remainNeedAddCount--;
                addTargety++;
            }

            int nully = 0;
            for (int y = viewModel.MapInfo.ymin; y <= viewModel.MapInfo.ymax + needAddCount; y++) {

                AnimalViewModel animal = GetAnimalAtLoc (viewModel, new Loc (x, y));

                if (animal == null) {
                    if (nully == 0) {
                        nully = y;
                    }
                    continue;
                } else {
                    if (nully != 0) { // haven't got null space, yet.
                        animal.TargetProp = new AnimalProp () {
                            AnimalType = animal.AnimalType,
                            Loc = new Loc(x, nully)
                        };

                        nully++;
                    }
                }
            }

        //			Debug.Log ("existCount: " + existCount);

        }

        viewModel.CalcAnimalsCount.OnNext (new CalcAnimalsCountCommand ());
    }
    public override void CalcAnimalsCount(InGameRootViewModel viewModel)
    {
        base.CalcAnimalsCount (viewModel);

        int nullCount = viewModel.MapInfo.TotalAnimalCount - viewModel.AnimalCollections.Count;

        viewModel.NullAnimalsCount = nullCount;

        int idleCount = viewModel.AnimalCollections
            .Where (animal => animal.AnimalState is Idle && animal.needDestroy == false)
                .Count ();

        viewModel.IdleAnimalsCount = idleCount;

        if (idleCount == viewModel.MapInfo.TotalAnimalCount) {
            viewModel.IsDropping = false;
        }
    }
 public virtual void RemoveAnimal(InGameRootViewModel viewModel, AnimalProp arg)
 {
 }
 public virtual void RefreshSameCount(InGameRootViewModel viewModel, AnimalViewModel arg)
 {
 }
 public virtual void InitializeInGameRoot(InGameRootViewModel viewModel)
 {
     // This is called when a InGameRootViewModel is created
     viewModel.CreateAnimal.Action = this.CreateAnimalHandler;
     viewModel.RemoveAnimal.Action = this.RemoveAnimalHandler;
     viewModel.CreateAndDrop.Action = this.CreateAndDropHandler;
     viewModel.InitAllAnimal.Action = this.InitAllAnimalHandler;
     viewModel.RefreshSameCount.Action = this.RefreshSameCountHandler;
     viewModel.CalcAnimalsCount.Action = this.CalcAnimalsCountHandler;
     InGameRootViewModelManager.Add(viewModel);
 }
 public virtual void InitAllAnimal(InGameRootViewModel viewModel)
 {
 }
 public virtual void CreateAndDrop(InGameRootViewModel viewModel)
 {
 }
 public virtual void CalcAnimalsCount(InGameRootViewModel viewModel)
 {
 }
    public override void RefreshSameCount(InGameRootViewModel viewModel, AnimalViewModel arg)
    {
        base.RefreshSameCount (viewModel, arg);

        List <AnimalViewModel> list1 = new List<AnimalViewModel> ();
        List <AnimalViewModel> list2 = new List<AnimalViewModel> ();

        Loc loc0 = arg.Loc;
        AnimalType type0 = arg.AnimalType;
        Guid guid = Guid.NewGuid ();

        arg.guid = guid;
        list1.Add (arg);

        while (list1.Count > 0) {
            AnimalViewModel vm = list1 [0];
            list1.RemoveAt (0);
            list2.Add (vm);

            List<Loc> locList = Locator.AroundLoc (vm.Loc);
            foreach (Loc loc in locList) {
                AnimalViewModel _vm = this.GetAnimalAtLoc (viewModel, loc);
                if (_vm != null) {
                    if (_vm.guid != guid) {
                        if (_vm.AnimalType == type0) {
                            _vm.guid = guid;
                            list1.Add (_vm);
                        }
                    }
                }
            }
        }

        foreach (AnimalViewModel _vm in list2) {
            _vm.SameCount = list2.Count;

            if (_vm.SameCount >= viewModel.RuleInfo.DestroyLimitCount) {
                _vm.needDestroy = true;
            }
        }

        viewModel.CalcAnimalsCount.OnNext (new CalcAnimalsCountCommand ());
    }
Exemplo n.º 10
0
    public override void RemoveAnimal(InGameRootViewModel viewModel, AnimalProp arg)
    {
        base.RemoveAnimal (viewModel, arg);

        AnimalViewModel vm = this.GetAnimalAtLoc (viewModel, arg.Loc);
        viewModel.AnimalCollections.Remove (vm);

        viewModel.CalcAnimalsCount.OnNext (new CalcAnimalsCountCommand ());
    }
Exemplo n.º 11
0
 public override void InitializeInGameRoot(InGameRootViewModel viewModel)
 {
     base.InitializeInGameRoot (viewModel);
     // This is called when a InGameRootViewModel is created
 }
Exemplo n.º 12
0
    public override void InitAllAnimal(InGameRootViewModel viewModel)
    {
        base.InitAllAnimal (viewModel);

        for (int y = viewModel.MapInfo.ymin; y <= viewModel.MapInfo.ymax; y++) {
            for (int x = viewModel.MapInfo.xmin; x <= viewModel.MapInfo.xmax; x++) {

                viewModel.CreateAnimal.OnNext (new CreateAnimalCommand () {
                    Argument = new AnimalProp () {
                        AnimalType = Locator.RandomGetAnimalType(),
                        Loc = new Loc() {x = x, y = y}
                    }
                });

            }
        }
    }
Exemplo n.º 13
0
    /**
     * return: 1:x1 2:x1 3:x1 4:x4 5:x1
     * */
    public Dictionary<int, int> GetExistCountByCol(InGameRootViewModel viewModel)
    {
        var dictionary = viewModel.AnimalCollections
            .GroupBy (animal => new {animal.Loc.x})
                .ToDictionary (it => it.Key.x, it => it.Count ());

        //		foreach (var it in dictionary) {
        //			Debug.Log(it.Key + " : " + it.Value);
        //		}

        return dictionary;
    }
Exemplo n.º 14
0
 public AnimalViewModel GetAnimalAtLoc(InGameRootViewModel viewModel, Loc loc)
 {
     return viewModel.AnimalCollections.Where (vm => vm.Loc == loc).SingleOrDefault ();
 }
Exemplo n.º 15
0
    public override void CreateAnimal(InGameRootViewModel viewModel, AnimalProp arg)
    {
        base.CreateAnimal (viewModel, arg);

        AnimalViewModel animalVM = this.CreateViewModel<AnimalViewModel> ();
        animalVM.SameCount = 0;
        animalVM.AnimalType = arg.AnimalType;
        animalVM.Loc = arg.Loc;

        viewModel.AnimalCollections.Add (animalVM);

        viewModel.CalcAnimalsCount.OnNext (new CalcAnimalsCountCommand ());
    }