public ChangeWeaponMaterialLogic(VfxAction.ChangeWeaponMaterialVfx config, float timeToLive, Character caster, Environment environment)
        {
            this.config      = config;
            this.timeToLive  = timeToLive;
            this.caster      = caster;
            this.environment = environment;
            Entity entity = caster.GameObject().GetComponent <EntityReference>().Entity;
            CustomizeVisualComponent cvc = entity.GetComponent <CustomizeVisualComponent>();
            EquipmentCollectData     equipmentCollectData = cvc.EquipmentCollectData;

            if (equipmentCollectData == null)
            {
                material = environment.FindDefaultMaterialById(
                    caster.CharacterId(), config.id
                    );
            }
            else
            {
                material = environment.FindMaterialById(
                    caster.CharacterId(), equipmentCollectData.EquipmentConfigId.VisualId, config.id
                    );
            }

            if (material == null)
            {
                Interrupt();
                return;
            }

            EntityGameObjectComponent egoc = entity
                                             .GetComponent <EntityGameObjectComponent>();

            affectedRenderer = ((GameObjectComponent)egoc).WeaponRenderer;
            if (material != null)
            {
                originalMaterials         = new SsarTuple <Material, Material[]>(affectedRenderer.material, affectedRenderer.materials);
                affectedRenderer.material = material;
                List <Material> materials = new List <Material>();
                materials.Add(material);

                for (int kIndex = 0; kIndex < config.valueModifiers.Count; kIndex++)
                {
                    VfxAction.MaterialValueModifier mvm = config.valueModifiers[kIndex];
                    valueModifiers.Add(new ValueModifier(mvm, materials));
                }

                for (int kIndex = 0; kIndex < config.colorModifiers.Count; kIndex++)
                {
                    VfxAction.MaterialColorModifier mcm = config.colorModifiers[kIndex];
                    colorModifiers.Add(new ColorModifier(mcm, materials));
                }
            }
        }
        public bool IsGateExisted(int gateId)
        {
            for (int kIndex = 0; kIndex < gateAndId.Count; kIndex++)
            {
                SsarTuple <int, GameObject> tuple = gateAndId[kIndex];
                if (tuple.Element1 == gateId)
                {
                    return(true);
                }
            }

            return(false);
        }
예제 #3
0
        public SsarTuple <AnimMix, PlayMethod, float> FindAnimMixing(AnimMix mix)
        {
            for (int i = 0; i < animationMixingTable.Length; i++)
            {
                SsarTuple <AnimMix, PlayMethod, float> m = animationMixingTable[i];
                if (m.Element1 == mix)
                {
                    return(m);
                }
            }

            throw new Exception("Missing AnimationMixing for " + mix);
        }
        public GameObject GetGateById(int gateId)
        {
            for (int kIndex = 0; kIndex < gateAndId.Count; kIndex++)
            {
                SsarTuple <int, GameObject> tuple = gateAndId[kIndex];
                if (tuple.Element1 == gateId)
                {
                    return(tuple.Element2);
                }
            }

            throw new Exception(string.Format(
                                    "Cannot find gate of id '{0}'", gateId
                                    ));
        }
예제 #5
0
        public void SetCookies(IEnumerable <string> cookies)
        {
            notNullReference.Check(cookies, "cookies");

            monsterId           = new CharacterId(cookies.ElementAt(0));
            monsterCount        = Convert.ToInt32(cookies.ElementAt(1));
            spawnInterval       = Convert.ToSingle(cookies.ElementAt(2));
            spawnCount          = Convert.ToInt32(cookies.ElementAt(3));
            spawnX              = Convert.ToSingle(cookies.ElementAt(4));
            spawnY              = Convert.ToSingle(cookies.ElementAt(5));
            spawnZ              = Convert.ToSingle(cookies.ElementAt(6));
            xAxisAmplitude      = Convert.ToSingle(cookies.ElementAt(7));
            xAxisDensity        = Convert.ToInt32(cookies.ElementAt(8));
            facingDirection     = (Direction)Enum.Parse(typeof(Direction), cookies.ElementAt(9));
            spawnSkillLevelPool = DungeonSpawnConfig.Spawn.ParseSkillLevelPool(cookies.ElementAt(10));
            monsterLevel        = Convert.ToInt32(cookies.ElementAt(11));

            elapsedTimeSinceLastSpawn = spawnInterval;

            monsterCountSoFar      = monsterCount * spawnCount;
            monsterIdAndSpawnCount = new SsarTuple <CharacterId, int>(monsterId, monsterCountSoFar);

            group = hamc.FindBasicStats(monsterId).team;
        }
예제 #6
0
        protected override void OnUpdate(float dt)
        {
            justChanged = false;
            if (IsFinish())
            {
                return;
            }
            if (attachType != ModifierAttachType.Main)
            {
                return;
            }

            elapsed      += dt;
            stateElapsed += dt;
            if (state == State.Peaking)
            {
                if (stateElapsed >= knockdownInfo.TimeToPeak)
                {
                    state         = State.Floating;
                    stateElapsed -= knockdownInfo.TimeToPeak;
                }
            }

            if (state == State.Floating)
            {
                if (stateElapsed >= knockdownInfo.FloatingDur)
                {
                    state = State.Grounding;
                    SsarTuple <AnimMix, PlayMethod, float> mix = knockdownInfo.FindAnimMixing(AnimMix.UpperToFallLoop);
                    targetAnimation.PlayAnimation(AnimName().FallLoop, 1, mix.Element2, mix.Element3);
                    stateElapsed -= knockdownInfo.FloatingDur;
                }
            }

            if (state == State.Grounding)
            {
                if (character.IsOnGround())
                {
                    justChanged   = true;
                    state         = State.Lying;
                    stateElapsed -= knockdownInfo.TimeToGround;
                    SsarTuple <AnimMix, PlayMethod, float> mix = knockdownInfo.FindAnimMixing(AnimMix.FallLoopToLie);
                    targetAnimation.PlayAnimation(AnimName().FallToLie, 1, mix.Element2, mix.Element3);
                    character.QueueAnimation(AnimName().LieLoop);
                    TriggerEvents();
                }
            }

            if (state == State.Lying)
            {
                float extraLyingDuration = 0;
                if (extraLyingDurationStats != null)
                {
                    extraLyingDuration += extraLyingDurationStats.BakedFloatValue;
                }
                if (stateElapsed >= knockdownInfo.LieDuration + extraLyingDuration)
                {
                    justChanged   = true;
                    state         = State.LieToIdle;
                    stateElapsed -= (knockdownInfo.LieDuration + extraLyingDuration);
                    if (target.GetComponent <HealthComponent>().IsAlive())
                    {
                        character.PlayAnimation(AnimName().LieToIdle);
                    }
                    targetMovementComponent.MovingDirection = targetMovementComponent.FacingDirection.ToNormalizedVector2();
                    targetDefaultUserInput.SetRunDirection(targetMovementComponent.FacingDirection);
                }
            }

            if (state == State.LieToIdle)
            {
                if (stateElapsed >= knockdownInfo.LieToIdleDuration)
                {
                    lifetime.End();
                }
            }

            if (vfxLogic != null)
            {
                vfxLogic.Update(dt);
            }
        }