Beispiel #1
0
 private static Int32 ff9fieldMCFSetCharColor(FF9Char CharPtr, Int32 ClrR, Int32 ClrG, Int32 ClrB)
 {
     if (FF9Char.ff9charptr_attr_test(CharPtr, 2048) == 0)
     {
         FF9FieldCharState ff9FieldCharState = FF9StateSystem.Field.FF9Field.loc.map.charStateArray[(Int32)CharPtr.evt.uid];
         FF9FieldCharColor ff9FieldCharColor = default(FF9FieldCharColor);
         ff9FieldCharColor.r      = (Byte)ClrR;
         ff9FieldCharColor.g      = (Byte)ClrG;
         ff9FieldCharColor.b      = (Byte)ClrB;
         ff9FieldCharColor.active = true;
         ff9FieldCharState.clr[0] = (ff9FieldCharState.clr[1] = ff9FieldCharColor);
         FF9Char.ff9charptr_attr_set(CharPtr, 1024);
         FF9Char.ff9charptr_attr_set(CharPtr, 2048);
         return(1);
     }
     FF9Char.ff9charptr_attr_clear(CharPtr, 2048);
     return(0);
 }
Beispiel #2
0
    public static void ff9fieldCharEffectService()
    {
        Dictionary <Int32, FF9Char>           charArray      = FF9StateSystem.Common.FF9.charArray;
        Dictionary <Int32, FF9FieldCharState> charStateArray = FF9StateSystem.Field.FF9Field.loc.map.charStateArray;

        if (charArray == null)
        {
            return;
        }
        List <Int32> list = new List <Int32>(charArray.Keys);

        foreach (Int32 key in list)
        {
            if (charArray.ContainsKey(key))
            {
                FF9Char ff9Char = charArray[key];
                if (charStateArray.ContainsKey(key))
                {
                    FF9FieldCharState ff9FieldCharState = charStateArray[key];
                    UInt32            num  = (UInt32)(ff9Char.attr & 65536u);
                    Int32             num2 = (Int32)((UInt64)(ff9FieldCharState.attr & 65536u) ^ (UInt64)((Int64)num));
                    Int32             num3 = FF9Char.ff9charptr_attr_test(ff9Char, 262144);
                    Int32             num4 = FF9Char.ff9charptr_attr_test(ff9Char, 131072);
                    Boolean           flag = num2 != 0 || num3 != 0 || num4 != 0;
                    if (ff9Char.geo)
                    {
                        Renderer[] componentsInChildren = ff9Char.geo.GetComponentsInChildren <Renderer>();
                        if (flag)
                        {
                            if (FF9Char.ff9charptr_attr_test(ff9Char, 65536) != 0)
                            {
                                Shader     shader = ShadersLoader.Find("PSX/Actor_Abr_" + ff9FieldCharState.arate);
                                Renderer[] array  = componentsInChildren;
                                for (Int32 i = 0; i < (Int32)array.Length; i++)
                                {
                                    Renderer   renderer  = array[i];
                                    Material[] materials = renderer.materials;
                                    for (Int32 j = 0; j < (Int32)materials.Length; j++)
                                    {
                                        Material material = materials[j];
                                        material.shader = shader;
                                    }
                                }
                            }
                            else
                            {
                                Shader shader2 = ShadersLoader.Find("PSX/FieldMapActor");

                                Renderer[] array2 = componentsInChildren;
                                for (Int32 k = 0; k < (Int32)array2.Length; k++)
                                {
                                    Renderer renderer2 = array2[k];
                                    renderer2.material.shader = shader2;
                                }
                            }
                            if (FF9Char.ff9charptr_attr_test(ff9Char, 131072) != 0)
                            {
                                FF9Char.ff9charptr_attr_clear(ff9Char, 131072);
                            }
                            FF9Char.ff9charptr_attr_clear(ff9Char, 262144);
                            if (num2 != 0 || num3 != 0)
                            {
                                FF9Char.ff9charptr_attr_set(ff9Char, 131072);
                            }
                            ff9FieldCharState.attr = (ff9FieldCharState.attr & 0xFFFEFFFF) | num;
                        }
                        FF9FieldCharColor ff9FieldCharColor = ff9FieldCharState.clr[0];
                        if (ff9FieldCharColor.active && !FF9StateSystem.Field.isDebugWalkMesh && (Int32)componentsInChildren.Length > 0)
                        {
                            Renderer[] array3 = componentsInChildren;
                            for (Int32 l = 0; l < (Int32)array3.Length; l++)
                            {
                                Renderer   renderer3  = array3[l];
                                Material[] materials2 = renderer3.materials;
                                for (Int32 m = 0; m < (Int32)materials2.Length; m++)
                                {
                                    Material material2 = materials2[m];
                                    Color32  c         = renderer3.material.GetColor("_Color");
                                    c.r = ff9FieldCharColor.r;
                                    c.g = ff9FieldCharColor.g;
                                    c.b = ff9FieldCharColor.b;
                                    material2.SetColor("_Color", c);
                                    ff9FieldCharState.clr[0] = ff9FieldCharState.clr[1];
                                }
                            }
                            ff9FieldCharState.clr[1] = default(FF9FieldCharColor);
                        }
                        FF9FieldCharMirror mirror = ff9FieldCharState.mirror;
                        if (mirror != null && FF9Char.ff9charptr_attr_test(mirror.chr, 16777216) != 0)
                        {
                            FF9Char chr    = mirror.chr;
                            Vector3 vector = mirror.point + ff9Char.geo.transform.localPosition;
                            vector   += mirror.point;
                            vector.y *= -1f;
                            mirror.geo.transform.position    = vector;
                            mirror.geo.transform.eulerAngles = ff9Char.geo.transform.eulerAngles;
                            Animation component  = ff9Char.geo.GetComponent <Animation>();
                            Animation component2 = mirror.geo.GetComponent <Animation>();
                            String    text       = FF9DBAll.AnimationDB.GetValue((Int32)ff9Char.evt.anim);
                            if (component2.GetClip(text) == (UnityEngine.Object)null)
                            {
                                AnimationClip clip = component.GetClip(text);
                                component2.AddClip(clip, text);
                            }
                            component2.Play(text);
                            component2[text].speed = 0f;
                            component2[text].time  = component[text].time;
                            component2.Sample();
                            Renderer[] componentsInChildren2 = mirror.geo.GetComponentsInChildren <Renderer>();
                            if (mirror.clr[3] != 0)
                            {
                                Color32 c2 = default(Color32);
                                c2.r = mirror.clr[0];
                                c2.g = mirror.clr[1];
                                c2.b = mirror.clr[2];
                                Renderer[] array4 = componentsInChildren2;
                                for (Int32 n = 0; n < (Int32)array4.Length; n++)
                                {
                                    Renderer renderer4 = array4[n];
                                    renderer4.material.SetColor("_Color", c2);
                                }
                                Byte[] clr  = mirror.clr;
                                Int32  num5 = 3;
                                clr[num5] = (Byte)(clr[num5] - 1);
                            }
                        }
                    }
                }
            }
        }
    }
Beispiel #3
0
    public static void ff9fieldMCFService()
    {
        DMSMapConf?mcfPtr = FF9StateSystem.Field.FF9Field.loc.map.mcfPtr;

        if (mcfPtr == null)
        {
            return;
        }
        DMSMapChar[] dmsmapChar = mcfPtr.Value.DMSMapChar;
        if (dmsmapChar != null)
        {
            DMSMapLight?dmsmapLight  = null;
            DMSMapLight?dmsmapLight2 = null;
            DMSMapChar? dmsmapChar2  = fldmcf.ff9fieldMCFGetCharByID(mcfPtr.Value, -1);
            fldmcf.ff9fieldMCFGetLightDefault(mcfPtr.Value, ref dmsmapLight, ref dmsmapLight2);
            foreach (Int32 num in FF9StateSystem.Common.FF9.charArray.Keys)
            {
                FF9Char ff9Char          = FF9StateSystem.Common.FF9.charArray[num];
                Actor   activeActorByUID = PersistenSingleton <EventEngine> .Instance.getActiveActorByUID(num);

                FF9StateFieldMap map = FF9StateSystem.Field.FF9Field.loc.map;
                if (ff9Char != null && activeActorByUID != null)
                {
                    FF9FieldCharState ff9FieldCharState = FF9StateSystem.Field.FF9Field.loc.map.charStateArray[num];
                    Int16             num2         = 0;
                    DMSMapChar?       dmsmapChar3  = fldmcf.ff9fieldMCFGetCharByID(mcfPtr.Value, (Int32)activeActorByUID.model);
                    DMSMapLight?      dmsmapLight3 = fldmcf.ff9fieldMCFGetLightByCharFloor(mcfPtr.Value, num, ref num2);
                    UInt32            num3         = (UInt32)(ff9Char.attr & 4u);
                    Boolean           flag         = ((Int32)ff9FieldCharState.floor & 255) != (Int32)(num2 & 255) || ((Int64)num3 ^ (Int64)((UInt64)(ff9FieldCharState.attr & 4u))) != 0L || FF9Char.ff9charptr_attr_test(ff9Char, 256) == 0;
                    if (flag)
                    {
                        if (FF9Char.ff9charptr_attr_test(ff9Char, 1024) == 0)
                        {
                            SByte[] array = new SByte[4];
                            SByte[] clr;
                            if (dmsmapChar3 != null)
                            {
                                clr = dmsmapChar3.Value.clr;
                            }
                            else
                            {
                                clr = dmsmapChar2.Value.clr;
                            }
                            if (num3 != 0 && dmsmapLight2 != null)
                            {
                                array = dmsmapLight2.Value.clr;
                            }
                            else if (dmsmapLight3 != null)
                            {
                                array = dmsmapLight3.Value.clr;
                            }
                            else if (dmsmapLight != null)
                            {
                                array = dmsmapLight.Value.clr;
                            }
                            FF9FieldCharColor ff9FieldCharColor = default(FF9FieldCharColor);
                            ff9FieldCharColor.r      = (Byte)((Int32)clr[0] + (Int32)array[0] << 3);
                            ff9FieldCharColor.g      = (Byte)((Int32)clr[1] + (Int32)array[1] << 3);
                            ff9FieldCharColor.b      = (Byte)((Int32)clr[2] + (Int32)array[2] << 3);
                            ff9FieldCharColor.active = true;
                            ff9FieldCharState.clr[0] = (ff9FieldCharState.clr[1] = ff9FieldCharColor);
                        }
                        Int32 num4;
                        Int32 num5;
                        if (dmsmapChar3 != null)
                        {
                            num4 = (Int32)dmsmapChar3.Value.shadowI;
                            num5 = (Int32)dmsmapChar3.Value.shadowR;
                        }
                        else
                        {
                            num4 = (Int32)dmsmapChar2.Value.shadowI;
                            num5 = (Int32)dmsmapChar2.Value.shadowR;
                        }
                        if (dmsmapLight3 != null)
                        {
                            num4 += (Int32)dmsmapLight3.Value.shadowI;
                            num5 += (Int32)dmsmapLight3.Value.shadowR;
                        }
                        else if (dmsmapLight != null)
                        {
                            num4 += (Int32)dmsmapLight.Value.shadowI;
                            num5 += (Int32)dmsmapLight.Value.shadowR;
                        }
                        num4 <<= 3;
                        ff9shadow.FF9ShadowSetAmpField(num, num4);
                        ff9shadow.FF9ShadowSetScaleField(num, num5, num5);
                        ff9FieldCharState.floor = (SByte)num2;
                        ff9FieldCharState.attr  = ((ff9FieldCharState.attr & 0xFFFFFFFF) | num3);
                        FF9Char.ff9charptr_attr_set(ff9Char, 256);
                    }
                }
            }
        }
    }