Beispiel #1
0
        private static void FindAllActions(EditorConfig _editorConfig)
        {
            string[] actionGuids = AssetDatabase.FindAssets("t:OTGCombatAction");

            ActionsInstantiated.Clear();
            for (int i = 0; i < actionGuids.Length; i++)
            {
                string assetPath = AssetDatabase.GUIDToAssetPath(actionGuids[i]);
                ActionsInstantiated.Add(AssetDatabase.LoadAssetAtPath <OTGCombatAction>(assetPath));
            }

            for (int i = 0; i < ActionsInstantiated.Count; i++)
            {
                for (int j = 0; j < ActionsAvailable.Count; j++)
                {
                    OTGCombatAction actionInstance = ActionsInstantiated[i];
                    OTGCombatAction spawnAction    = ActionsAvailable[j];

                    if (actionInstance.GetType() == spawnAction.GetType())
                    {
                        ActionsAvailable.Remove(spawnAction);
                    }
                }
            }

            for (int k = 0; k < ActionsAvailable.Count; k++)
            {
                OTGCombatAction act           = ActionsAvailable[k];
                string[]        splitFileName = act.GetType().ToString().Split('.');
                AssetDatabase.CreateAsset(act, _editorConfig.CombatActionsPath + "/" + splitFileName[splitFileName.Length - 1] + ".asset");
            }
        }
        public static bool CollisionTriggerObstacles(ref GameStateData gs, bool isPlayer, int id, ActionsAvailable action)
        {
            if (isPlayer)
            {
                var playerData = gs.players[id];
                for (int i = 0; i < gs.obstacles.Length; i++)
                {
                    var obstacle = gs.obstacles[i];
                    switch (action)
                    {
                    case ActionsAvailable.MOVE_FORWARD:
                        if (!(playerData.playerPosition.x + playerData.PlayerRadius <
                              obstacle.position.x - obstacle.radius ||
                              playerData.playerPosition.x - playerData.PlayerRadius >
                              obstacle.position.x + obstacle.radius ||
                              playerData.playerPosition.z + playerData.PlayerRadius + 0.2 <
                              obstacle.position.z - obstacle.radius ||
                              playerData.playerPosition.z - playerData.PlayerRadius >
                              obstacle.position.z + obstacle.radius) &&
                            (playerData.playerPosition + Vector3.forward).z - playerData.PlayerRadius
                            < obstacle.position.z + obstacle.radius)
                        {
                            return(true);
                        }
                        break;

                    case ActionsAvailable.MOVE_BACK:
                        if (!(playerData.playerPosition.x + playerData.PlayerRadius <
                              obstacle.position.x - obstacle.radius ||
                              playerData.playerPosition.x - playerData.PlayerRadius >
                              obstacle.position.x + obstacle.radius ||
                              playerData.playerPosition.z + playerData.PlayerRadius <
                              obstacle.position.z - obstacle.radius ||
                              playerData.playerPosition.z - playerData.PlayerRadius - 0.2 >
                              obstacle.position.z + obstacle.radius) &&
                            (playerData.playerPosition + Vector3.back).z + playerData.PlayerRadius
                            > obstacle.position.z - obstacle.radius)
                        {
                            return(true);
                        }
                        break;

                    case ActionsAvailable.MOVE_LEFT:
                        if (!(playerData.playerPosition.x + playerData.PlayerRadius <
                              obstacle.position.x - obstacle.radius ||
                              playerData.playerPosition.x - playerData.PlayerRadius - 0.2 >
                              obstacle.position.x + obstacle.radius ||
                              playerData.playerPosition.z + playerData.PlayerRadius <
                              obstacle.position.z - obstacle.radius ||
                              playerData.playerPosition.z - playerData.PlayerRadius >
                              obstacle.position.z + obstacle.radius) &&
                            (playerData.playerPosition + Vector3.left).x + playerData.PlayerRadius
                            > obstacle.position.x - obstacle.radius)
                        {
                            return(true);
                        }
                        break;

                    case ActionsAvailable.MOVE_RIGHT:
                        if (!(playerData.playerPosition.x + playerData.PlayerRadius + 0.2 <
                              obstacle.position.x - obstacle.radius ||
                              playerData.playerPosition.x - playerData.PlayerRadius >
                              obstacle.position.x + obstacle.radius ||
                              playerData.playerPosition.z + playerData.PlayerRadius <
                              obstacle.position.z - obstacle.radius ||
                              playerData.playerPosition.z - playerData.PlayerRadius >
                              obstacle.position.z + obstacle.radius) &&
                            (playerData.playerPosition + Vector3.right).x - playerData.PlayerRadius
                            < obstacle.position.x + obstacle.radius)
                        {
                            return(true);
                        }
                        break;

                    case ActionsAvailable.MOVE_FORWARD_LEFT:
                        if (!(playerData.playerPosition.x + playerData.PlayerRadius <
                              obstacle.position.x - obstacle.radius ||
                              playerData.playerPosition.x - playerData.PlayerRadius - 0.2 >
                              obstacle.position.x + obstacle.radius ||
                              playerData.playerPosition.z + playerData.PlayerRadius + 0.2 <
                              obstacle.position.z - obstacle.radius ||
                              playerData.playerPosition.z - playerData.PlayerRadius >
                              obstacle.position.z + obstacle.radius) &&
                            (playerData.playerPosition + Vector3.forward).z - playerData.PlayerRadius
                            < obstacle.position.z + obstacle.radius &&
                            (playerData.playerPosition + Vector3.left).x + playerData.PlayerRadius
                            > obstacle.position.x - obstacle.radius)
                        {
                            return(true);
                        }
                        break;

                    case ActionsAvailable.MOVE_FORWARD_RIGHT:
                        if (!(playerData.playerPosition.x + playerData.PlayerRadius + 0.2 <
                              obstacle.position.x - obstacle.radius ||
                              playerData.playerPosition.x - playerData.PlayerRadius >
                              obstacle.position.x + obstacle.radius ||
                              playerData.playerPosition.z + playerData.PlayerRadius + 0.2 <
                              obstacle.position.z - obstacle.radius ||
                              playerData.playerPosition.z - playerData.PlayerRadius >
                              obstacle.position.z + obstacle.radius) &&
                            (playerData.playerPosition + Vector3.forward).z - playerData.PlayerRadius
                            < obstacle.position.z + obstacle.radius &&
                            (playerData.playerPosition + Vector3.right).x - playerData.PlayerRadius
                            < obstacle.position.x + obstacle.radius)
                        {
                            return(true);
                        }
                        break;

                    case ActionsAvailable.MOVE_BACK_LEFT:
                        if (!(playerData.playerPosition.x + playerData.PlayerRadius <
                              obstacle.position.x - obstacle.radius ||
                              playerData.playerPosition.x - playerData.PlayerRadius - 0.2 >
                              obstacle.position.x + obstacle.radius ||
                              playerData.playerPosition.z + playerData.PlayerRadius <
                              obstacle.position.z - obstacle.radius ||
                              playerData.playerPosition.z - playerData.PlayerRadius - 0.2 >
                              obstacle.position.z + obstacle.radius) &&
                            (playerData.playerPosition + Vector3.back).z + playerData.PlayerRadius
                            > obstacle.position.z - obstacle.radius &&
                            (playerData.playerPosition + Vector3.left).x + playerData.PlayerRadius
                            > obstacle.position.x - obstacle.radius)
                        {
                            return(true);
                        }
                        break;

                    case ActionsAvailable.MOVE_BACK_RIGHT:
                        if (!(playerData.playerPosition.x + playerData.PlayerRadius + 0.2 <
                              obstacle.position.x - obstacle.radius ||
                              playerData.playerPosition.x - playerData.PlayerRadius >
                              obstacle.position.x + obstacle.radius ||
                              playerData.playerPosition.z + playerData.PlayerRadius <
                              obstacle.position.z - obstacle.radius ||
                              playerData.playerPosition.z - playerData.PlayerRadius - 0.2 >
                              obstacle.position.z + obstacle.radius) &&
                            (playerData.playerPosition + Vector3.back).z + playerData.PlayerRadius
                            > obstacle.position.z - obstacle.radius &&
                            (playerData.playerPosition + Vector3.right).x - playerData.PlayerRadius
                            < obstacle.position.x + obstacle.radius)
                        {
                            return(true);
                        }
                        break;
                    }
                }
            }
            else
            {
                for (int i = 0; i < gs.obstacles.Length; i++)
                {
                    var projectile = gs.projectiles[id];
                    var obstacle   = gs.obstacles[i];
                    if (!(projectile.position.x + projectile.radius <
                          obstacle.position.x - obstacle.radius ||
                          projectile.position.x - projectile.radius >
                          obstacle.position.x + obstacle.radius ||
                          projectile.position.z + projectile.radius <
                          obstacle.position.z - obstacle.radius ||
                          projectile.position.z - projectile.radius >
                          obstacle.position.z + obstacle.radius))
                    {
                        gs.projectiles.RemoveAtSwapBack(id);
                        return(true);
                    }
                }
            }

            return(false);
        }