コード例 #1
0
ファイル: Media.cs プロジェクト: Ortu-/AgkSharp-Framework
        public void UnloadAsset()
        {
            //TODO: unset from any linked objects

            Media.ShaderList.Remove(this);
            Agk.DeleteShader(this.ResourceNumber);
        }
コード例 #2
0
ファイル: Media.cs プロジェクト: Ortu-/AgkSharp-Framework
        public static ImageAsset MakeColorImage(uint rSizeX, uint rSizeY, uint rColor1, uint rColor2, uint rColor3, uint rColor4, int rFill)
        {
            string tName = rSizeX.ToString() + "," + rSizeY.ToString() + "," + rColor1.ToString() + "," + rColor2.ToString() + "," + rColor3.ToString() + "," + rColor4.ToString() + "," + rFill.ToString();

            var tImg = Media.GetImageAsset(tName, 1.0f, 1.0f);

            if (tImg != null)
            {
                return(tImg);
            }

            Agk.Swap();
            Agk.DrawBox(0, 0, rSizeX, rSizeY, rColor1, rColor2, rColor3, rColor4, rFill);
            Agk.Render();
            var tNum = Agk.GetImage(0, 0, rSizeX, rSizeY);

            Agk.ClearScreen();
            Agk.Swap();

            App.Log("Media.cs", 2, "media", " > made image from color");

            tImg = new ImageAsset()
            {
                ResourceNumber = tNum,
                File           = tName,
                ScaleX         = 1.0f,
                ScaleY         = 1.0f
            };
            Media.ImageList.Add(tImg);
            return(tImg);
        }
コード例 #3
0
        public CharacterEntity2d(string rFileBase, int rWidth, int rHeight)
        {
            Properties.IsObject = false;
            Properties.Filebase = rFileBase;

            ImageAsset tSheet = Media.GetImageAsset(rFileBase + ".png", 1.0f, 1.0f);

            Agk.Swap();
            var spSheet = Agk.CreateSprite(tSheet.ResourceNumber);

            Agk.SetSpritePosition(spSheet, 0.0f, 0.0f);
            Agk.Render();
            bool isFirst = true;

            for (int row = 0; row < (Agk.GetImageHeight(tSheet.ResourceNumber) / rHeight); row++)
            {
                for (int col = 0; col < (Agk.GetImageWidth(tSheet.ResourceNumber) / rWidth); col++)
                {
                    var tImg = Agk.GetImage(col * rWidth, row * rHeight, rWidth, rHeight);
                    if (isFirst)
                    {
                        Properties.ResourceNumber = Agk.CreateSprite(tImg);
                        isFirst = false;
                    }
                    Agk.AddSpriteAnimationFrame(Properties.ResourceNumber, tImg);
                }
            }
            Agk.DeleteSprite(spSheet);
            Agk.ClearScreen();
            Agk.Swap();

            CharacterHandler2d.CharacterList.Add(this);
        }
コード例 #4
0
        public CharacterEntity3d(string rFileBase)
        {
            var tObj = Media.LoadObjectAsset(rFileBase + ".dae", false, true, Guid.NewGuid().ToString());

            Agk.SetObjectScalePermanent(tObj.ResourceNumber, 30.0f, 30.0f, 30.0f);
            Agk.RotateObjectGlobalY(tObj.ResourceNumber, 180.0f);
            Agk.FixObjectPivot(tObj.ResourceNumber);

            var fx = Media.GetShaderAsset("media/shaders/SurfaceDiffSpecBone.vs", "media/shaders/SurfaceDiffSpec.ps", true);

            Agk.SetShaderConstantByName(fx.ResourceNumber, "u_normalSize", 1.0f, 0, 0, 0);
            Agk.SetShaderConstantByName(fx.ResourceNumber, "u_specularPower", 10.0f, 0, 0, 0);
            Agk.SetObjectShader(tObj.ResourceNumber, fx.ResourceNumber);

            var tImg = Media.GetImageAsset(rFileBase + "_d.png", 1.0f, 1.0f);

            Agk.SetObjectImage(tObj.ResourceNumber, tImg.ResourceNumber, 0);
            tImg = Media.GetImageAsset(rFileBase + "_n.png", 1.0f, 1.0f);
            Agk.SetObjectImage(tObj.ResourceNumber, tImg.ResourceNumber, 1);
            tImg = Media.GetImageAsset(rFileBase + "_s.png", 1.0f, 1.0f);
            Agk.SetObjectImage(tObj.ResourceNumber, tImg.ResourceNumber, 2);

            Properties.ResourceNumber = tObj.ResourceNumber;
            Properties.IsObject       = true;
            Properties.Filebase       = rFileBase;
            Properties.Shader         = fx;
            Properties.Height         = Agk.GetObjectSizeMaxY(Properties.ResourceNumber) - Agk.GetObjectSizeMinY(Properties.ResourceNumber);

            CharacterHandler3d.CharacterList.Add(this);
        }
コード例 #5
0
ファイル: Physics.cs プロジェクト: Ortu-/AgkSharp-Framework
        public void SphereCast(AGKVector3 rFrom, AGKVector3 rTo, float rRadius, bool rSlide)
        {
            Agk.SetVector3(FromVectorNumber, rFrom.X, rFrom.Y, rFrom.Z);
            Agk.SetVector3(ToVectorNumber, rTo.X, rTo.Y, rTo.Z);
            Agk.SphereCast3DPhysics(ResourceNumber, (int)FromVectorNumber, (int)ToVectorNumber, rRadius);
            HitObjectNumber = (uint)Agk.Get3DPhysicsRayCastObjectHit(ResourceNumber, Agk.Get3DPhysicsRayCastFraction(ResourceNumber));
            if (HitObjectNumber > 0)
            {
                Agk.Get3DPhysicsRayCastContactPosition(ResourceNumber, Agk.Get3DPhysicsRayCastFraction(ResourceNumber), (int)HitVectorNumber);
                HitPosition.X = Agk.GetVector3X(HitVectorNumber);
                HitPosition.Y = Agk.GetVector3Y(HitVectorNumber);
                HitPosition.Z = Agk.GetVector3Z(HitVectorNumber);

                if (!rSlide)
                {
                    return;
                }

                Agk.Get3DPhysicsRayCastNormalVector(ResourceNumber, (int)HitVectorNumber);

                if (Math.Abs(HitNormalVector.Y) > 0.999)
                {
                    SlideVector = new AGKVector3(HitNormalVector.Y, 0.0f, 0.0f);
                }
                else
                {
                    SlideVector = new AGKVector3(-HitNormalVector.Z, 0.0f, HitNormalVector.X).Normalize();
                }
                HitPosition *= SlideVector;
            }
        }
コード例 #6
0
        public static void OnMouseMove(object sender, MouseEventArgs e)
        {
            if (suppress)
            {
                suppress = false;
                return;
            }

            Mouse.MoveX = e.X - Mouse.PosX;
            Mouse.MoveY = e.Y - Mouse.PosY;
            Mouse.PosX  = e.X;
            Mouse.PosY  = e.Y;

            if (!Mouse.IsVisible)
            {
                suppress   = true;
                Mouse.PosX = App.Config.Screen.CenterX;
                Mouse.PosY = App.Config.Screen.CenterY;
                Agk.SetRawMousePosition(App.Config.Screen.CenterX, App.Config.Screen.CenterY);
            }

            var st = Scheduler.Scheduled.FirstOrDefault(s => s.Name == "Hardware.ResetMouseMove");

            if (st != null)
            {
                Scheduler.Scheduled.Remove(st);
                st.Timer.Dispose();
            }
            Scheduler.SetInterval(Hardware.ResetMouseMove, "", 1, 0, (int)App.Timing.Delta, "");
        }
コード例 #7
0
ファイル: Media.cs プロジェクト: Ortu-/AgkSharp-Framework
        public static ImageAsset GetImageAsset(string rFilename, float rScaleX, float rScaleY)
        {
            App.Log("Media.cs", 2, "media", "Requested image: " + rFilename + " " + rScaleX.ToString() + " " + rScaleY.ToString());

            foreach (var i in Media.ImageList)
            {
                if (i.File == rFilename)
                {
                    if (i.ScaleX == rScaleX && i.ScaleY == rScaleY)
                    {
                        if (Agk.GetImageExists(i.ResourceNumber) == 1)
                        {
                            App.Log("Media.cs", 2, "media", " > found image on " + i.ResourceNumber.ToString());
                            return(i);
                        }
                        else
                        {
                            App.Log("Media.cs", 2, "media", " > found image on " + i.ResourceNumber.ToString() + "but is not valid: reload it");

                            if (System.IO.File.Exists(rFilename))
                            {
                                i.ResourceNumber = Agk.LoadImageResized(rFilename, rScaleX, rScaleY, 0);
                                return(i);
                            }
                        }
                    }
                }
            }

            if (System.IO.File.Exists(rFilename))
            {
                App.Log("Media.cs", 2, "media", " > image not loaded: load it");

                var tImg = Agk.LoadImageResized(rFilename, rScaleX, rScaleY, 0);
                Agk.SetImageWrapU(tImg, 1);
                Agk.SetImageWrapV(tImg, 1);
                var i = new ImageAsset()
                {
                    ResourceNumber = tImg,
                    File           = rFilename,
                    ScaleX         = rScaleX,
                    ScaleY         = rScaleY
                };
                Media.ImageList.Add(i);
                return(i);
            }
            else
            {
                if (rFilename.Contains("media"))
                {
                    //if filename does not include the media folder, we are looking for a generated sprite color image, just return null and keep running
                    //if filename does include media folder, the file is not found and we got problems.
                    App.Log("Media.cs", 5, "error", "ERROR: File not found: " + rFilename + " on Media.GetImageAsset");
                    App.StopRunning(true);
                }
            }

            return(null);
        }
コード例 #8
0
ファイル: Media.cs プロジェクト: Ortu-/AgkSharp-Framework
        public static ShaderAsset GetShaderAsset(string rVsFile, string rPsFile, bool rCanInstance)
        {
            App.Log("Media.cs", 2, "media", "Requested shader: " + rVsFile + " " + rPsFile);

            if (rCanInstance)
            {
                foreach (var i in Media.ShaderList)
                {
                    if (i.VS == rVsFile && i.PS == rPsFile)
                    {
                        if (Agk.IsShaderExists(i.ResourceNumber))
                        {
                            App.Log("Media.cs", 2, "media", " > found shader on " + i.ResourceNumber.ToString());
                            return(i);
                        }
                        else
                        {
                            App.Log("Media.cs", 2, "media", " > found shader on " + i.ResourceNumber.ToString() + "but is not valid: reload it");

                            if (System.IO.File.Exists(rVsFile) && System.IO.File.Exists(rPsFile))
                            {
                                i.ResourceNumber = Agk.LoadShader(rVsFile, rPsFile);
                                return(i);
                            }
                        }
                    }
                }
            }

            if (System.IO.File.Exists(rVsFile) && System.IO.File.Exists(rPsFile))
            {
                App.Log("Media.cs", 2, "media", " > image not loaded: load it");

                var tShd = Agk.LoadShader(rVsFile, rPsFile);
                var i    = new ShaderAsset()
                {
                    ResourceNumber = tShd,
                    VS             = rVsFile,
                    PS             = rPsFile
                };
                Media.ShaderList.Add(i);
                return(i);
            }
            else
            {
                if (rVsFile.Contains("media") || rPsFile.Contains("media"))
                {
                    //if filename does not include the media folder, we are looking for a generated shader from string, just return null and keep running
                    //if filename does include media folder, the file is not found and we got problems.
                    System.Windows.Forms.MessageBox.Show("File not found: " + rVsFile + " " + rPsFile);
                    App.Log("Media.cs", 5, "error", "ERROR: File not found: " + rVsFile + ", " + rPsFile + " on Media.GetShaderAsset");
                    App.StopRunning(true);
                }
            }

            System.Windows.Forms.MessageBox.Show("File not found: " + rVsFile + " " + rPsFile);
            App.StopRunning(true);
            return(null);
        }
コード例 #9
0
ファイル: Media.cs プロジェクト: Ortu-/AgkSharp-Framework
 public static void UnloadAllImageAssets()
 {
     foreach (var i in Media.ImageList)
     {
         Agk.DeleteImage(i.ResourceNumber);
     }
     Media.ImageList.Clear();
 }
コード例 #10
0
ファイル: Physics.cs プロジェクト: Ortu-/AgkSharp-Framework
 public void Dispose()
 {
     Agk.Delete3DPhysicsRay(ResourceNumber);
     Agk.DeleteVector3(FromVectorNumber);
     Agk.DeleteVector3(ToVectorNumber);
     Agk.DeleteVector3(HitVectorNumber);
     this.Dispose();
 }
コード例 #11
0
 public static void SetMouseVisible(bool rVisible)
 {
     if ((rVisible && !Mouse.IsVisible) || (!rVisible && Mouse.IsVisible))
     {
         Agk.SetRawMouseVisible(rVisible);
         Mouse.IsVisible = rVisible;
     }
 }
コード例 #12
0
ファイル: Core.cs プロジェクト: Ortu-/AgkSharp-Framework
        static void Core_OnActivated(object sender, EventArgs e)
        {
            m_Window.TopMost = m_bMaximized;
            m_Window.Update();
            Agk.Resumed();

            Agk.WindowMoved();
        }
コード例 #13
0
ファイル: Core.cs プロジェクト: Ortu-/AgkSharp-Framework
        public static bool InitAGK()
        {
            if (m_Window.Handle != null)
            {
                Agk.InitGL(m_Window.Handle);
            }

            return(true);
        }
コード例 #14
0
ファイル: Core.cs プロジェクト: Ortu-/AgkSharp-Framework
        public static bool InitAGK(Form window)
        {
            if (window.Handle != null)
            {
                Agk.InitGL(window.Handle);
            }

            return(true);
        }
コード例 #15
0
ファイル: Media.cs プロジェクト: Ortu-/AgkSharp-Framework
 public static void UnloadAllShaderAssets()
 {
     foreach (var i in Media.ShaderList)
     {
         //TODO: remove from objects?
         Agk.DeleteShader(i.ResourceNumber);
     }
     Media.ShaderList.Clear();
 }
コード例 #16
0
ファイル: Data.cs プロジェクト: Ortu-/AgkSharp-Framework
        public static uint ParseColor(string rValue)
        {
            string valR;
            string valG;
            string valB;

            if (rValue[0] == '#')
            {
                if (rValue.Length == 4)
                {
                    //short form hex #000
                    valR = rValue[1].ToString();
                    valG = rValue[2].ToString();
                    valB = rValue[3].ToString();
                    return(Agk.MakeColor(
                               byte.Parse(valR + valR, NumberStyles.HexNumber, CultureInfo.InvariantCulture),
                               byte.Parse(valG + valG, NumberStyles.HexNumber, CultureInfo.InvariantCulture),
                               byte.Parse(valB + valB, NumberStyles.HexNumber, CultureInfo.InvariantCulture)
                               ));
                }
                else if (rValue.Length == 7)
                {
                    //rgb hex #000000
                    valR = rValue.Substring(1, 2);
                    valG = rValue.Substring(3, 2);
                    valB = rValue.Substring(5, 2);
                    return(Agk.MakeColor(
                               byte.Parse(valR, NumberStyles.HexNumber, CultureInfo.InvariantCulture),
                               byte.Parse(valG, NumberStyles.HexNumber, CultureInfo.InvariantCulture),
                               byte.Parse(valB, NumberStyles.HexNumber, CultureInfo.InvariantCulture)
                               ));
                }
                else
                {
                    //argb hex #00000000
                    valR = rValue.Substring(3, 2);
                    valG = rValue.Substring(5, 2);
                    valB = rValue.Substring(7, 2);
                    return(Agk.MakeColor(
                               byte.Parse(valR, NumberStyles.HexNumber, CultureInfo.InvariantCulture),
                               byte.Parse(valG, NumberStyles.HexNumber, CultureInfo.InvariantCulture),
                               byte.Parse(valB, NumberStyles.HexNumber, CultureInfo.InvariantCulture)
                               ));
                }
            }
            else if (rValue[0] == 'r')
            {
                rValue = rValue.Substring(4, rValue.Length - 4);
                var c = rValue.Split(',');
                {
                    return(Agk.MakeColor(Convert.ToUInt32(c[0]), Convert.ToUInt32(c[1]), Convert.ToUInt32(c[2])));
                }
            }

            return(0);
        }
コード例 #17
0
 public void ApplyToAgk()
 {
     Agk.SetCameraFOV(1, FOV);
     Agk.SetCameraPosition(1, Position.X, Position.Y, Position.Z);
     Agk.SetCameraRange(1, Near, Far);
     Agk.SetCameraRotation(1, Rotation.X, Rotation.Y, Rotation.Z);
     if (Target != null)
     {
         Agk.SetCameraLookAt(1, (Target.Properties.Position.X + Offset.X), (Target.Properties.Position.Y + Offset.Y), (Target.Properties.Position.Z + Offset.Z), Rotation.Z);
     }
 }
コード例 #18
0
ファイル: Core.cs プロジェクト: Ortu-/AgkSharp-Framework
        public static bool LoopAGK()
        {
            Application.DoEvents();

            if (Agk.IsCapturingImage() > 0)
            {
                System.Threading.Thread.Sleep(10);
            }

            return(App.Status.IsRunning);
        }
コード例 #19
0
ファイル: Core.cs プロジェクト: Ortu-/AgkSharp-Framework
        static void Core_OnDeactivate(object sender, EventArgs e)
        {
            Agk.MouseLeftButton(0, 0);
            Agk.MouseRightButton(0, 0);
            Agk.MouseMiddleButton(0, 0);

            m_Window.TopMost = m_bMaximized;
            m_Window.Update();
            Agk.Paused();

            Agk.WindowMoved();
        }
コード例 #20
0
ファイル: Media.cs プロジェクト: Ortu-/AgkSharp-Framework
 public void UnloadAsset()
 {
     //TODO: unload textures/shaders?
     Media.ObjectList.Remove(this);
     if (this.HasBones)
     {
         Agk.DeleteObjectWithChildren(this.ResourceNumber);
     }
     else
     {
         Agk.DeleteObject(this.ResourceNumber);
     }
 }
コード例 #21
0
ファイル: Physics.cs プロジェクト: Ortu-/AgkSharp-Framework
 public void RayCast(AGKVector3 rFrom, AGKVector3 rTo)
 {
     Agk.SetVector3(FromVectorNumber, rFrom.X, rFrom.Y, rFrom.Z);
     Agk.SetVector3(ToVectorNumber, rTo.X, rTo.Y, rTo.Z);
     Agk.RayCast3DPhysics(ResourceNumber, (int)FromVectorNumber, (int)ToVectorNumber, 1);
     HitObjectNumber = (uint)Agk.Get3DPhysicsRayCastObjectHit(ResourceNumber, Agk.Get3DPhysicsRayCastFraction(ResourceNumber));
     if (HitObjectNumber > 0)
     {
         Agk.Get3DPhysicsRayCastContactPosition(ResourceNumber, Agk.Get3DPhysicsRayCastFraction(ResourceNumber), (int)HitVectorNumber);
         HitPosition.X = Agk.GetVector3X(HitVectorNumber);
         HitPosition.Y = Agk.GetVector3Y(HitVectorNumber);
         HitPosition.Z = Agk.GetVector3Z(HitVectorNumber);
     }
 }
コード例 #22
0
        public void UpdateFromAgk()
        {
            FOV        = Agk.GetCameraFOV(1);
            Position.X = Agk.GetCameraX(1);
            Position.Y = Agk.GetCameraY(1);
            Position.Z = Agk.GetCameraZ(1);
            Rotation.X = Agk.GetCameraAngleX(1);
            Rotation.Y = Agk.GetCameraAngleY(1);
            Rotation.Z = Agk.GetCameraAngleZ(1);

            //TODO: reverse calc orbit/target values if bound

            //ProjectionMatrix = AGKMatrix4.Perspective(0.25f * (float)Math.PI, AspectRatio, 1.0f, 1000.0f);
            ProjectionMatrix = AGKMatrix4.Perspective(FOV, App.Config.Screen.AspectRatio, Near, Far);
        }
コード例 #23
0
ファイル: Media.cs プロジェクト: Ortu-/AgkSharp-Framework
        public static void UnloadAllObjectAssets()
        {
            foreach (var i in Media.ObjectList)
            {
                //TODO: unload/unlink textures/shaders?

                if (i.HasBones)
                {
                    Agk.DeleteObjectWithChildren(i.ResourceNumber);
                }
                else
                {
                    Agk.DeleteObject(i.ResourceNumber);
                }
            }
            Media.ObjectList.Clear();
        }
コード例 #24
0
ファイル: Media.cs プロジェクト: Ortu-/AgkSharp-Framework
 public static void UpdateBoundObjects(object rArgs)
 {
     foreach (var objBinding in Media.ObjectBindings)
     {
         if (Data.GetBit((int)ObjectBinding.ModeBit.Location, objBinding.Mode) == 1)
         {
             Agk.SetObjectPosition
             (
                 objBinding.Object.ResourceNumber,
                 Agk.GetObjectWorldX(objBinding.Parent.ResourceNumber),
                 Agk.GetObjectWorldY(objBinding.Parent.ResourceNumber),
                 Agk.GetObjectWorldZ(objBinding.Parent.ResourceNumber)
             );
         }
         if (Data.GetBit((int)ObjectBinding.ModeBit.Rotation, objBinding.Mode) == 1)
         {
             Agk.SetObjectRotation
             (
                 objBinding.Object.ResourceNumber,
                 Agk.GetObjectWorldAngleX(objBinding.Parent.ResourceNumber),
                 Agk.GetObjectWorldAngleY(objBinding.Parent.ResourceNumber),
                 Agk.GetObjectWorldAngleZ(objBinding.Parent.ResourceNumber)
             );
         }
         if (Data.GetBit((int)ObjectBinding.ModeBit.Scale, objBinding.Mode) == 1)
         {
         }
         if (Data.GetBit((int)ObjectBinding.ModeBit.Collision, objBinding.Mode) == 1)
         {
         }
         if (Data.GetBit((int)ObjectBinding.ModeBit.Frame, objBinding.Mode) == 1)
         {
             Agk.SetObjectAnimationFrame
             (
                 objBinding.Object.ResourceNumber,
                 "",
                 Agk.GetObjectAnimationTime(objBinding.Parent.ResourceNumber),
                 0.0f
             );
         }
         if (Data.GetBit((int)ObjectBinding.ModeBit.Light, objBinding.Mode) == 1)
         {
         }
     }
 }
コード例 #25
0
ファイル: Core.cs プロジェクト: Ortu-/AgkSharp-Framework
        public static void UpdateTiming()
        {
            uint oldTime = App.Timing.Timer;

            App.Timing.Timer = Agk.GetMilliseconds();
            App.Timing.Delta = App.Timing.Timer - oldTime;

            int oldPause = App.Timing.PauseState;

            if (App.Timing.PauseHold == 0)
            {
                App.Timing.PauseState = 0;
            }
            else
            {
                App.Timing.PauseState = 1;
                if (oldPause == 0)
                {
                    App.Timing.PauseMark = App.Timing.Timer;
                }
                else
                {
                    App.Timing.PauseElapsed = (uint)Agk.Abs(App.Timing.Timer - App.Timing.PauseMark);
                }
            }

            if (App.Timing.PauseState == 2)
            {
                //pause ended and elapsed time has been applied, clear down
                App.Timing.PauseState   = 0;
                App.Timing.PauseMark    = 0;
                App.Timing.PauseElapsed = 0;
            }

            if (App.Timing.PauseState == 0 && oldPause == 1)
            {
                //pause ended, resume all updates but keep the elapsed time available for paused updates to adjust against elapsed times.
                App.Timing.PauseState = 2;
                Hardware.Mouse.MoveX  = 0.0f;
                Hardware.Mouse.MoveY  = 0.0f;
                Hardware.Mouse.MoveZ  = 0.0f;
            }
        }
コード例 #26
0
        public static void UpdateEntities(object rArgs)
        {
            foreach (var e in WorldEntityList)
            {
                e.Update();
            }

            //TEMP - For SurfaceDiffuseClipLit - TODO we dont want to apply this every loop, only when lighting changes, also handle multiple lights
            var dirLight = World3d.Celestials.First().LightProperties;

            foreach (var s in Media.ShaderList)
            {
                if (s.ReceiveDirectionalLight)
                {
                    Agk.SetShaderConstantByName(s.ResourceNumber, "u_lightDirection", dirLight.Direction.X, dirLight.Direction.Y, dirLight.Direction.Z, 0);
                    Agk.SetShaderConstantByName(s.ResourceNumber, "u_lightDiffuse", dirLight.Diffuse.R, dirLight.Diffuse.G, dirLight.Diffuse.B, 0);
                    Agk.SetShaderConstantByName(s.ResourceNumber, "u_lightAmbient", dirLight.Ambient.R, dirLight.Ambient.G, dirLight.Ambient.B, 0);
                }
            }
        }
コード例 #27
0
        public World3d()
        {
            Dispatcher.Add(World3d.UpdateEntities);
            App.UpdateList.Add(new UpdateHandler("World3d.UpdateEntities", "", false));

            Agk.SetSunActive(0);
            Agk.SetAmbientColor(0, 0, 0);
            //Agk.SetClearColor(52, 125, 217);

            //TEMP most init will happen during a scene load, stick them here until things get built out more
            Celestials.Add(new CelestialBody("sun")
            {
                LightProperties = new AGKCore.Lighting.Basic.DirectionalLight()
                {
                    Ambient   = new AGKVector4(0.2f, 0.2f, 0.2f, 0),
                    Diffuse   = new AGKVector4(0.5f, 0.5f, 0.5f, 0),
                    Specular  = new AGKVector4(0.5f, 0.5f, 0.5f, 0),
                    Direction = new AGKVector3(1, 1, -0.3f)
                }
            });
        }
コード例 #28
0
ファイル: Core.cs プロジェクト: Ortu-/AgkSharp-Framework
        static void Core_OnSizeChanged(object sender, EventArgs e)
        {
            m_bMaximized     = m_Window.WindowState == FormWindowState.Maximized;
            m_Window.TopMost = m_bMaximized;
            m_Window.Update();

            Agk.UpdateDeviceSize();
            Agk.WindowMoved();

            App.Config.Screen.Width       = m_Window.Width;
            App.Config.Screen.Height      = m_Window.Height;
            App.Config.Screen.AspectRatio = App.Config.Screen.Width / App.Config.Screen.Height;
            App.Config.Screen.CenterX     = (int)Math.Floor(App.Config.Screen.Width * 0.5);
            App.Config.Screen.CenterY     = (int)Math.Floor(App.Config.Screen.Height * 0.5);

            if (App.Config.Screen.Width > 1280)
            {
                App.Config.Screen.Layout = 1;
            }
            else
            {
                App.Config.Screen.Layout = 2;
            }
        }
コード例 #29
0
ファイル: Animation.cs プロジェクト: Ortu-/AgkSharp-Framework
        public bool Update()
        {
            string animName  = "";
            float  totalTime = 0;

            if (Owner.Properties.IsObject)
            {
                //Agk.SetObjectAnimationSpeed((uint)Owner.Properties.ResourceNumber, )
                animName  = Agk.GetObjectAnimationName((uint)Owner.Properties.ResourceNumber, 1);
                totalTime = Agk.GetObjectAnimationDuration((uint)Owner.Properties.ResourceNumber, animName);
            }

            int firstFrame = Animation.Keys[Animation.CurrentKey][0];
            int lastFrame  = Animation.Keys[Animation.CurrentKey][1];
            int totalFrame = (int)Math.Floor(totalTime * Animation.Framerate);

            CurrentFrame = CurrentFrame + (Animation.Framerate * Speed * (App.Timing.Delta * 0.001f)); //convert to seconds

            if (CurrentFrame < firstFrame)
            {
                CurrentFrame = firstFrame;
            }

            if (CurrentFrame >= lastFrame)
            {
                if (IsLoop)
                {
                    //handle frame, looping
                    CurrentFrame = firstFrame;

                    if (Owner.Properties.IsObject)
                    {
                        //float animTime = (CurrentFrame * totalTime) / lastFrame;
                        float animTime = (CurrentFrame * totalTime) / totalFrame;
                        Agk.SetObjectAnimationFrame((uint)Owner.Properties.ResourceNumber, animName, animTime, 0.0f);
                    }
                    else
                    {
                        Agk.SetSpriteFrame((uint)Owner.Properties.ResourceNumber, (int)CurrentFrame);
                    }

                    //handle variant
                    if (Animation.Keys.Count > 1)
                    {
                        if (App.Timing.Timer - _VariantMark >= _VariantDelay)
                        {
                            Animation.CurrentKey = (int)Agk.Random(0, (uint)(Animation.Keys.Count - 1));
                            _VariantDelay        = Animation.VariantDelayMin + (int)Agk.Random(0, (uint)Animation.VariantDelayMax);
                            _VariantMark         = (int)App.Timing.Timer;
                        }
                    }

                    //handle callback
                    bool isLoopDone = false;
                    if (!String.IsNullOrEmpty(Callback))
                    {
                        isLoopDone = (bool)Dispatcher.Invoke(Callback, CallbackArgs);
                        if (isLoopDone)
                        {
                            return(true);
                        }
                    }
                    return(false);
                }
                else
                {
                    //handle frame, played once, end it
                    CurrentFrame = lastFrame;

                    if (Owner.Properties.IsObject)
                    {
                        //float animTime = (CurrentFrame * Agk.GetObjectAnimationDuration((uint)Owner.Properties.ResourceNumber, animName)) / Animation.Keys[Animation.CurrentKey][1];
                        float animTime = (CurrentFrame * totalTime) / totalFrame;
                        Agk.SetObjectAnimationFrame((uint)Owner.Properties.ResourceNumber, animName, animTime, 0.0f);
                    }
                    else
                    {
                        Agk.SetSpriteFrame((uint)Owner.Properties.ResourceNumber, (int)CurrentFrame);
                    }

                    //handle callback
                    if (!String.IsNullOrEmpty(Callback))
                    {
                        Dispatcher.Invoke(Callback, CallbackArgs);
                    }
                    return(true);
                }
            }
            else
            {
                //handle frame, sequence hasnt completed, continue
                if (Owner.Properties.IsObject)
                {
                    //float animTime = (CurrentFrame * Agk.GetObjectAnimationDuration((uint)Owner.Properties.ResourceNumber, animName)) / Animation.Keys[Animation.CurrentKey][1];
                    float animTime = (CurrentFrame * totalTime) / totalFrame;
                    Agk.SetObjectAnimationFrame((uint)Owner.Properties.ResourceNumber, animName, animTime, 0.0f);
                }
                else
                {
                    Agk.SetSpriteFrame((uint)Owner.Properties.ResourceNumber, (int)CurrentFrame);
                }

                //handle callback
                bool isLoopDone = false;
                if (!String.IsNullOrEmpty(Callback))
                {
                    isLoopDone = (bool)Dispatcher.Invoke(Callback, CallbackArgs);
                    if (isLoopDone)
                    {
                        return(true);
                    }
                }
                return(false);
            }
        }
コード例 #30
0
        public static void GetGameplayInput(object rArgs)
        {
            App.Log("controls3d", LogLevel.Notice, "main", "> Begin GetGameplayInput");

            //reset forced
            UserInterface.Status.MouseModeForced = "";
            UserInterface.Status.KeyModeForced   = "";

            //exit early if user does not have control

            /*
             * if(App.Status.LoadState < 3)
             * {
             *  return;
             * }
             */

            if (CharacterHandler3d.MyCharacter == null)
            {
                return;
            }

            if (!CharacterHandler3d.MyCharacter.Status.IsLiving)
            {
                return;
            }

            if (UserInterface.Status.KeyMode != "gameplay" || CharacterHandler3d.MyCharacter.Status.MotionState == CharacterEntity3d.MotionStates.Forced)
            {
                return;
            }

            if (ActiveCamera.ControlMode != Camera3d.CameraMode.Anchored)
            {
                return;
            }

            bool animWait = false;

            if (CharacterHandler3d.MyCharacter.AnimationQ.Count > 0)
            {
                animWait = CharacterHandler3d.MyCharacter.AnimationQ.First().Animation.Wait;
            }

            //grab old state
            CharacterHandler3d.MyCharacter.OldStatus = JsonConvert.DeserializeObject <CharacterEntity3d.CharacterStatus>(JsonConvert.SerializeObject(CharacterHandler3d.MyCharacter.Status));

            //reset states that need to be held by user
            if (CharacterHandler3d.MyCharacter.Status.StanceState == CharacterEntity3d.StanceStates.Sneaking)
            {
                CharacterHandler3d.MyCharacter.Status.StanceState = CharacterEntity3d.StanceStates.Basic;
            }

            if (CharacterHandler3d.MyCharacter.Status.ActionState == CharacterEntity3d.ActionStates.Moving)
            {
                CharacterHandler3d.MyCharacter.Status.ActionState = CharacterEntity3d.ActionStates.Idle;
            }

            if (CharacterHandler3d.MyCharacter.Status.MotionState != CharacterEntity3d.MotionStates.Forced)
            {
                CharacterHandler3d.MyCharacter.Status.MotionState = CharacterEntity3d.MotionStates.Stationary;
            }

            CharacterHandler3d.MyCharacter.Status.DirectionState = CharacterEntity3d.DirectionStates.Standard;

            //get mouse input
            if (UserInterface.Status.MouseMode == "gameplay")
            {
            }

            //get keyboard input
            if (UserInterface.Status.KeyMode == "gameplay" && !animWait)
            {
                if (CharacterHandler3d.MyCharacter.Status.MotionState != CharacterEntity3d.MotionStates.Forced)
                {
                    //toggle strafelock
                    if (Hardware.IsKeyDown(MovementKey.StrafeToggle) && UserInterface.Status.InputReady)
                    {
                        UserInterface.Status.InputMark = App.Timing.Timer;
                        CharacterHandler3d.MyCharacter.Status.IsStrafeLocked = !CharacterHandler3d.MyCharacter.Status.IsStrafeLocked;
                    }

                    //toggle runlock
                    if (Hardware.IsKeyDown(MovementKey.RunToggle) && UserInterface.Status.InputReady)
                    {
                        UserInterface.Status.InputMark = App.Timing.Timer;
                        CharacterHandler3d.MyCharacter.Status.IsRunLocked = !CharacterHandler3d.MyCharacter.Status.IsRunLocked;
                    }

                    //apply run if locked
                    if (CharacterHandler3d.MyCharacter.Status.IsRunLocked &&
                        CharacterHandler3d.MyCharacter.OldStatus.StanceState == CharacterEntity3d.StanceStates.Basic
                        )
                    {
                        if (CharacterHandler3d.MyCharacter.OldStatus.ActionState == CharacterEntity3d.ActionStates.Moving &&
                            CharacterHandler3d.MyCharacter.OldStatus.MotionState < CharacterEntity3d.MotionStates.Sprinting
                            )
                        {
                            CharacterHandler3d.MyCharacter.Status.MotionState = CharacterEntity3d.MotionStates.Running;
                        }
                    }

                    //sneak
                    if (Hardware.IsKeyDown(MovementKey.SpeedSlow))
                    {
                        CharacterHandler3d.MyCharacter.Status.StanceState = CharacterEntity3d.StanceStates.Sneaking;
                    }

                    //sprint
                    if (Hardware.IsKeyDown(MovementKey.SpeedBoost))
                    {
                        if (CharacterHandler3d.MyCharacter.Status.StanceState == CharacterEntity3d.StanceStates.Basic &&
                            CharacterHandler3d.MyCharacter.OldStatus.ActionState == CharacterEntity3d.ActionStates.Moving &&
                            CharacterHandler3d.MyCharacter.Status.MotionState != CharacterEntity3d.MotionStates.Forced
                            )
                        {
                            CharacterHandler3d.MyCharacter.Status.MotionState = CharacterEntity3d.MotionStates.Sprinting;
                        }
                    }

                    //jump
                    if (Hardware.IsKeyDown(MovementKey.Upward) && UserInterface.Status.InputReady)
                    {
                        //don't allow a jump if sneaking or already in a jump
                        if (CharacterHandler3d.MyCharacter.Status.StanceState == CharacterEntity3d.StanceStates.Basic &&
                            CharacterHandler3d.MyCharacter.Status.ActionState < CharacterEntity3d.ActionStates.Jumping
                            )
                        {
                            UserInterface.Status.InputMark = App.Timing.Timer;
                            CharacterHandler3d.MyCharacter.Status.ActionState = CharacterEntity3d.ActionStates.Jumping;
                            CharacterHandler3d.MyCharacter.Status.MotionState = CharacterEntity3d.MotionStates.Forced;
                        }
                    }

                    float camY = MathUtil.Wrap(Agk.GetCameraAngleY(1) + 180.0f, 0.0f, 360.0f);

                    //forward
                    if (Hardware.IsKeyDown(MovementKey.Forward))
                    {
                        CharacterHandler3d.MyCharacter.Status.ActionState = CharacterEntity3d.ActionStates.Moving;
                        if (CharacterHandler3d.MyCharacter.Status.MotionState == CharacterEntity3d.MotionStates.Stationary)
                        {
                            CharacterHandler3d.MyCharacter.Status.MotionState = CharacterEntity3d.MotionStates.Walking;
                        }
                        CharacterHandler3d.MyCharacter.Properties.Facing  = MathUtil.Wrap(camY + 180.0f, 0.0f, 360.0f);
                        CharacterHandler3d.MyCharacter.Properties.Heading = MathUtil.Wrap(camY + 180.0f, 0.0f, 360.0f);
                    }

                    //backward
                    if (Hardware.IsKeyDown(MovementKey.Backward))
                    {
                        CharacterHandler3d.MyCharacter.Status.ActionState = CharacterEntity3d.ActionStates.Moving;
                        if (CharacterHandler3d.MyCharacter.Status.MotionState == CharacterEntity3d.MotionStates.Stationary)
                        {
                            CharacterHandler3d.MyCharacter.Status.MotionState = CharacterEntity3d.MotionStates.Walking;
                        }
                        if (CharacterHandler3d.MyCharacter.Status.IsStrafeLocked)
                        {
                            CharacterHandler3d.MyCharacter.Properties.Facing     = MathUtil.Wrap(camY + 180.0f, 0.0f, 360.0f);
                            CharacterHandler3d.MyCharacter.Properties.Heading    = camY;
                            CharacterHandler3d.MyCharacter.Status.DirectionState = CharacterEntity3d.DirectionStates.Backward;
                        }
                        else
                        {
                            CharacterHandler3d.MyCharacter.Properties.Facing  = camY;
                            CharacterHandler3d.MyCharacter.Properties.Heading = camY;
                        }
                    }

                    //left
                    if (Hardware.IsKeyDown(MovementKey.Left))
                    {
                        CharacterHandler3d.MyCharacter.Status.ActionState = CharacterEntity3d.ActionStates.Moving;
                        if (CharacterHandler3d.MyCharacter.Status.MotionState == CharacterEntity3d.MotionStates.Stationary)
                        {
                            CharacterHandler3d.MyCharacter.Status.MotionState = CharacterEntity3d.MotionStates.Walking;
                        }
                        if (CharacterHandler3d.MyCharacter.Status.IsStrafeLocked)
                        {
                            if (Hardware.IsKeyDown(MovementKey.Forward))
                            {
                                CharacterHandler3d.MyCharacter.Properties.Facing     = MathUtil.Wrap(camY + 180.0f, 0.0f, 360.0f);
                                CharacterHandler3d.MyCharacter.Properties.Heading    = MathUtil.Wrap(camY + 180.0f - 45.0f, 0.0f, 360.0f);
                                CharacterHandler3d.MyCharacter.Status.DirectionState = CharacterEntity3d.DirectionStates.Standard;
                            }
                            else if (Hardware.IsKeyDown(MovementKey.Backward))
                            {
                                CharacterHandler3d.MyCharacter.Properties.Facing     = MathUtil.Wrap(camY + 180.0f, 0.0f, 360.0f);
                                CharacterHandler3d.MyCharacter.Properties.Heading    = MathUtil.Wrap(camY + 45.0f, 0.0f, 360.0f);
                                CharacterHandler3d.MyCharacter.Status.DirectionState = CharacterEntity3d.DirectionStates.Backward;
                            }
                            else
                            {
                                CharacterHandler3d.MyCharacter.Properties.Facing     = MathUtil.Wrap(camY + 180.0f, 0.0f, 360.0f);
                                CharacterHandler3d.MyCharacter.Properties.Heading    = MathUtil.Wrap(camY + 90.0f, 0.0f, 360.0f);
                                CharacterHandler3d.MyCharacter.Status.DirectionState = CharacterEntity3d.DirectionStates.Left;
                            }
                        }
                        else
                        {
                            if (Hardware.IsKeyDown(MovementKey.Forward))
                            {
                                CharacterHandler3d.MyCharacter.Properties.Facing     = MathUtil.Wrap(camY + 180.0f - 45.0f, 0.0f, 360.0f);
                                CharacterHandler3d.MyCharacter.Properties.Heading    = MathUtil.Wrap(camY + 180.0f - 45.0f, 0.0f, 360.0f);
                                CharacterHandler3d.MyCharacter.Status.DirectionState = CharacterEntity3d.DirectionStates.Standard;
                            }
                            else if (Hardware.IsKeyDown(MovementKey.Backward))
                            {
                                CharacterHandler3d.MyCharacter.Properties.Facing     = MathUtil.Wrap(camY + 45.0f, 0.0f, 360.0f);
                                CharacterHandler3d.MyCharacter.Properties.Heading    = MathUtil.Wrap(camY + 45.0f, 0.0f, 360.0f);
                                CharacterHandler3d.MyCharacter.Status.DirectionState = CharacterEntity3d.DirectionStates.Standard;
                            }
                            else
                            {
                                CharacterHandler3d.MyCharacter.Properties.Facing     = MathUtil.Wrap(camY + 90.0f, 0.0f, 360.0f);
                                CharacterHandler3d.MyCharacter.Properties.Heading    = MathUtil.Wrap(camY + 90.0f, 0.0f, 360.0f);
                                CharacterHandler3d.MyCharacter.Status.DirectionState = CharacterEntity3d.DirectionStates.Standard;
                            }
                        }
                    }

                    //right
                    if (Hardware.IsKeyDown(MovementKey.Right))
                    {
                        CharacterHandler3d.MyCharacter.Status.ActionState = CharacterEntity3d.ActionStates.Moving;
                        if (CharacterHandler3d.MyCharacter.Status.MotionState == CharacterEntity3d.MotionStates.Stationary)
                        {
                            CharacterHandler3d.MyCharacter.Status.MotionState = CharacterEntity3d.MotionStates.Walking;
                        }
                        if (CharacterHandler3d.MyCharacter.Status.IsStrafeLocked)
                        {
                            if (Hardware.IsKeyDown(MovementKey.Forward))
                            {
                                CharacterHandler3d.MyCharacter.Properties.Facing     = MathUtil.Wrap(camY + 180.0f, 0.0f, 360.0f);
                                CharacterHandler3d.MyCharacter.Properties.Heading    = MathUtil.Wrap(camY + 180.0f + 45.0f, 0.0f, 360.0f);
                                CharacterHandler3d.MyCharacter.Status.DirectionState = CharacterEntity3d.DirectionStates.Standard;
                            }
                            else if (Hardware.IsKeyDown(MovementKey.Backward))
                            {
                                CharacterHandler3d.MyCharacter.Properties.Facing     = MathUtil.Wrap(camY + 180.0f, 0.0f, 360.0f);
                                CharacterHandler3d.MyCharacter.Properties.Heading    = MathUtil.Wrap(camY - 45.0f, 0.0f, 360.0f);
                                CharacterHandler3d.MyCharacter.Status.DirectionState = CharacterEntity3d.DirectionStates.Backward;
                            }
                            else
                            {
                                CharacterHandler3d.MyCharacter.Properties.Facing     = MathUtil.Wrap(camY + 180.0f, 0.0f, 360.0f);
                                CharacterHandler3d.MyCharacter.Properties.Heading    = MathUtil.Wrap(camY - 90.0f, 0.0f, 360.0f);
                                CharacterHandler3d.MyCharacter.Status.DirectionState = CharacterEntity3d.DirectionStates.Right;
                            }
                        }
                        else
                        {
                            if (Hardware.IsKeyDown(MovementKey.Forward))
                            {
                                CharacterHandler3d.MyCharacter.Properties.Facing     = MathUtil.Wrap(camY + 180.0f + 45.0f, 0.0f, 360.0f);
                                CharacterHandler3d.MyCharacter.Properties.Heading    = MathUtil.Wrap(camY + 180.0f + 45.0f, 0.0f, 360.0f);
                                CharacterHandler3d.MyCharacter.Status.DirectionState = CharacterEntity3d.DirectionStates.Standard;
                            }
                            else if (Hardware.IsKeyDown(MovementKey.Backward))
                            {
                                CharacterHandler3d.MyCharacter.Properties.Facing     = MathUtil.Wrap(camY - 45.0f, 0.0f, 360.0f);
                                CharacterHandler3d.MyCharacter.Properties.Heading    = MathUtil.Wrap(camY - 45.0f, 0.0f, 360.0f);
                                CharacterHandler3d.MyCharacter.Status.DirectionState = CharacterEntity3d.DirectionStates.Standard;
                            }
                            else
                            {
                                CharacterHandler3d.MyCharacter.Properties.Facing     = MathUtil.Wrap(camY - 90.0f, 0.0f, 360.0f);
                                CharacterHandler3d.MyCharacter.Properties.Heading    = MathUtil.Wrap(camY - 90.0f, 0.0f, 360.0f);
                                CharacterHandler3d.MyCharacter.Status.DirectionState = CharacterEntity3d.DirectionStates.Standard;
                            }
                        }
                    }
                }
            }

            //mouse steers character if moving and not strafe locked
            if (UserInterface.Status.MouseMode == "gameplay")
            {
                if (CharacterHandler3d.MyCharacter.Status.ActionState == CharacterEntity3d.ActionStates.Moving &&
                    !CharacterHandler3d.MyCharacter.Status.IsStrafeLocked
                    )
                {
                    CharacterHandler3d.MyCharacter.Properties.Facing = MathUtil.CurveAngle(CharacterHandler3d.MyCharacter.Properties.Facing + Hardware.Mouse.MoveX, CharacterHandler3d.MyCharacter.Properties.Facing, ActiveCamera.Precision);
                }
            }

            //sprint camera effect
            if (CharacterHandler3d.MyCharacter.Status.MotionState == CharacterEntity3d.MotionStates.Sprinting)
            {
                ActiveCamera.FOV = MathUtil.CurveValue(65.0f, ActiveCamera.FOV, Agk.ScreenFPS() * CharacterHandler3d.Config.SprintAcceleration);
            }
            else if (ActiveCamera.FOV != Camera3dHandler.DefaultFOV)
            {
                ActiveCamera.FOV = MathUtil.CurveValue(Camera3dHandler.DefaultFOV, ActiveCamera.FOV, Agk.ScreenFPS() * CharacterHandler3d.Config.SprintAcceleration);
            }



            //TEMP:
            if (Hardware.IsKeyDown((int)Keys.Y))
            {
                Controls3d.ActiveCamera.Offset.Y += 0.1f;
            }
            if (Hardware.IsKeyDown((int)Keys.H))
            {
                Controls3d.ActiveCamera.Offset.Y -= 0.1f;
            }

            //TEMP: toggle active
            if (Hardware.IsKeyDown((int)Keys.C) && UserInterface.Status.InputReady)
            {
                UserInterface.Status.InputMark = App.Timing.Timer;
                Controls3d.SetActiveCamera(Camera3dHandler.CameraList.FirstOrDefault(c => c.Name != Controls3d.ActiveCamera.Name));
            }
            //ENDTEMP



            App.Log("Controls3d", LogLevel.Notice, "main", "> End GetGameplayInput");
        }