public IHttpActionResult UpdatePet(PetUpdateMessage message)
        {
            var pets = new Zealous.Domain.Pets();

            var model = pets.UpdatePet(message);

            if (model != null)
            {
                return Ok(model);
            }

            return NotFound();
        }
Example #2
0
        public IModel UpdatePet(PetUpdateMessage message)
        {
            using (IDal dal = new ProtoDBContext())
            {
                var pet =
                    dal.GetPets().FirstOrDefault(x => x.ID == message.PetID && x.OwnerID == message.UserID) as
                        ProtoPetModel;

                if (pet == null)
                {
                    return null;
                }

                var now = DateTime.Now;

                var delta = (float) ((now - pet.LastChangeDate).TotalSeconds);

                var happinessReduction = pet.HappinessDecay*delta;
                var hungerIncrease = pet.HungerDecay*delta;

                //floats clamp
                pet.Happiness = pet.Happiness - happinessReduction;
                pet.Hunger = pet.Hunger + hungerIncrease;
                pet.LastChangeDate = now;

                //hacky implementation, going to seperate this in to seperate updaters so they can be a bit more interesting.
                switch (pet.Type)
                {
                    case PetType.Aloof:
                        if (message.UpdateActions.HasFlag(PetActions.Feed))
                        {
                            pet.Hunger -= 1000;
                        }
                        if (message.UpdateActions.HasFlag(PetActions.Pet))
                        {
                            pet.Happiness += 200;
                        }
                        break;
                    case PetType.Needy:
                        if (message.UpdateActions.HasFlag(PetActions.Feed))
                        {
                            pet.Hunger -= 800;
                        }
                        if (message.UpdateActions.HasFlag(PetActions.Pet))
                        {
                            pet.Happiness += 2000;
                        }
                        break;
                    case PetType.Big:
                        if (message.UpdateActions.HasFlag(PetActions.Feed))
                        {
                            pet.Hunger -= 200;
                            pet.Happiness += 500;
                        }
                        if (message.UpdateActions.HasFlag(PetActions.Pet))
                        {
                            pet.Happiness += 500;
                        }
                        break;
                    case PetType.Small:
                        if (message.UpdateActions.HasFlag(PetActions.Feed))
                        {
                            pet.Hunger -= 5000;
                        }
                        if (message.UpdateActions.HasFlag(PetActions.Pet))
                        {
                            pet.Happiness += 500;
                        }
                        break;
                }

                dal.UpdatePet(pet);

                return new ProtoPetMap(dal).Map(pet);
            }
        }